Перейти к содержанию
Авторизация  
Denis2131

Не видит игрок.

Рекомендуемые сообщения

Denis2131

Добрый день, проблема такая, я значит сделал аттач к игроку через EditAttach, или как там, дак вот дело в том, что если игрок начинает аттачить обьект то он видит все передвижения и конечный результат, а другой игрок видит только то когда обьект создался на игроке и не видит конечного сохраненого результата на игроке, в чем может быть проблема? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk
@Denis2131, через EditObject делаете? Если да, то это не проблема. Так и предусмотрено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

,да, через него делаю, как понять так и предусмотрено? а как же тогда нормально аттачить, что бы конечный результат был виден всем ?  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
hteppl

Функцию AttachObjectToPlayer пробовали использовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

 

 


AttachObjectToPlayer
нет, не пробовал.

Как делаю я использую команду, где открывается диалог, в нем некоторые иды которые я могу прикрепить, после выбора откроется диалог, в нем используется функция  ну вот как тут 

SetPlayerAttachedObject(playerid, 6, 10277, 1);
 EditAttachedObject(playerid, 6);

вот получается, что я аттачу обьект на игрока, используя эти стрелки, что бы я мог в нужное место его направвить, но конечного результатата, аттача я не вижу. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Denis2131, прошу прощения, неправильно вопрос прочел. Вы когда через стрелочку наводите объект куда Вам нужно, то Вы видите куда прикрепился объект, а другой игрок - нет? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

,верно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Denis2131, а вы кнопку сохранения жмете же? В паблик OnPlayerEditObject вставляли что-нибудь?

 

:D83DDC47: вот, что имею в виду под кнопкой сохранения (самая правая)

[spoiler=Изображение]

EditingObject.png

 

 

Изменено пользователем Elrmrnt-Kritik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

, безусловно жму. вот что у меня там 

new Float:x, Float: y, Float:z;
	if(response == 2) SetObjectPos(objectid,fX, fY, fZ), SetObjectRot(objectid,fRotX,fRotY,fRotZ);
	//ограждение
	if(response == EDIT_RESPONSE_FINAL) {
	    if( GetPVarInt(playerid, "IsPlayerCreateObject") == 1 ) {
            if(!IsValidDynamicObject(objectid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка в системе. Обратитесь к администратору! [#0001]");
            MoveDynamicObject(objectid, x, y, z, 10.0, rx, ry, rz);
            new idi = GetPVarInt(playerid, "IDMassive_Object")/*, string[16]*/;
            ObjList[idi][oModel] = GetPVarInt(playerid, "ObJectCreateID");
            ObjList[idi][Obj_X] = x;
            ObjList[idi][Obj_Y] = y;
            ObjList[idi][Obj_Z] = z;
            ObjList[idi][ObjRx] = rx;
            ObjList[idi][ObjRy] = ry;
            ObjList[idi][ObjRz] = rz;
            //format( string, sizeof string, "[%d]", ObjList[idi][oID] );
            //bjList[idi][o3DText] = CreateDynamic3DTextLabel( string, 0xE6E6E6AA, x, y, z + 0.5, 3.0 );
	        SetPVarInt(playerid, "IsPlayerCreateObject", 0);
            cObjectS++;
        }
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
        if(GetPVarInt(playerid, "IsPlayerCreateObject") == 1)
        {
            new idi = GetPVarInt(playerid, "IDMassive_Object");
            DestroyDynamicObject(ObjList[idi][oObject]);
            ObjList[idi][oObject] = 0;
            ObjList[idi][Obj_X] = 0;
            ObjList[idi][Obj_Y] = 0;
            ObjList[idi][Obj_Z] = 0;
            ObjList[idi][ObjRx] = 0;
            ObjList[idi][ObjRy] = 0;
            ObjList[idi][ObjRz] = 0;
            ObjList[idi][oModel] = 0;
            SetPVarInt(playerid, "IsPlayerCreateObject", 0);
        }
    }
	return 1;
} 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Denis2131, в данном случае точно вызывается этот паблик? Через тот же printf не проверяли? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

,этот паблик вызывается для ограждений, но сними такая же проблема, они после финала не работают, а к аттачу я использую паблик OnPlayerEditAttachedObject, его я заполнил так 

SetPlayerAttachedObject(playerid,index,modelid,boneid,fOffsetX,fOffsetY,fOffsetZ,fRotX,fRotY,fRotZ,fScaleX,fScaleY,fScaleZ);
 	printf("%d, %d, %f, %f, %f,  %f, %f, %f, %f, %f, %f", modelid,boneid,fOffsetX,fOffsetY,fOffsetZ,fRotX,fRotY,fRotZ,fScaleX,fScaleY,fScaleZ);
	//printf("%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, ",index, modelid, boneid,fOffsetX, fOffsetY, fOffsetZ,fRotX, fRotY, fRotZ,fScaleX, fScaleY, fScaleZ);
	if(GetPVarInt(playerid,#P_Edit_InvObj) && response)
	{
		new i = GetPVarInt(playerid,#P_PObj_Idx);
		test2[playerid][modelid0][i] = modelid;
		test2[playerid][boneid0][i] = boneid;
		test2[playerid][fOffsetX0][i] = fOffsetX;
		test2[playerid][fOffsetY0][i] = fOffsetY;
		test2[playerid][fOffsetZ0][i] = fOffsetZ;
		test2[playerid][fRotX0][i] = fRotX;
		test2[playerid][fRotY0][i] = fRotY;
		test2[playerid][fRotZ0][i] = fRotZ;
		test2[playerid][fScaleX0][i] = fScaleX;
		test2[playerid][fScaleY0][i] = fScaleY;
		test2[playerid][fScaleZ0][i] = fScaleZ;
		new type = GetPVarInt(playerid,#P_Inv_Type);
		SaveItems_Tp(type,playerid);
		DeletePVar(playerid,#P_Edit_InvObj);
	}	 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Denis2131, только что попробовал к игроку прикрепить объект, а также отредактировать его местоположение. После нажатия на сохранение все отлично работает (другие игроки видят прикрепленный объект). После рестарта без перезахода самого игрока объект, который был прикреплен к игроку, самому игроку виден. А посторонним - нет (проверяю на CR 0.3.7, в других версиях такого бага, наверное, нет. Решение: повторно создать объект на этом игроке в тот же слот). Исходный код:

CMD:test_attach(playerid)
	return SetPlayerAttachedObject(playerid, 4, 1337, 2);
CMD:test_edit(playerid)
	return EditAttachedObject(playerid, 4);

В OnPlayerEditAttachedObject ничего не вписывал (за исключением возврата значения - 1). Единственное, я не использовал response. Судя по тестам, если нажать ESC, response = 0, если нажать кнопку "Сохранить" на этом редакторе в игре, вызывается единица. Вызов EDIT_RESPONSE_FINAL я так и не увидел. Поэтому проверяйте просто двумя способами:

if(response)//сохраняем
else if(!response)//не сохраняем

И вот эту строку в сам паблик тоже не вставлял:

SetPlayerAttachedObject(playerid,index,modelid,boneid,fOffsetX,fOffsetY,fOffsetZ,fRotX,fRotY,fRotZ,fScaleX,fScaleY,fScaleZ);

Все и без того сохранилось.

Изменено пользователем Elrmrnt-Kritik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

, сделал как вы сказали, удалил не нужный код, заработало, спасибо, еще хотел бы узнать, можно ли не создавать новую тему, а в этой задать второй вопрос, он тоже касается такой же проблемы. но только эта проблема связанна с обьектами и с пабликом  OnPlayerEditObject вот что в нем есть. 

new Float:x, Float: y, Float:z;
	if(response == 2) SetObjectPos(objectid,fX, fY, fZ), SetObjectRot(objectid,fRotX,fRotY,fRotZ);
	//ограждение
	if(response == EDIT_RESPONSE_FINAL) {
	    if( GetPVarInt(playerid, "IsPlayerCreateObject") == 1 ) {
            if(!IsValidDynamicObject(objectid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка в системе. Обратитесь к администратору! [#0001]");
            MoveDynamicObject(objectid, x, y, z, 10.0, rx, ry, rz);
            new idi = GetPVarInt(playerid, "IDMassive_Object")/*, string[16]*/;
            ObjList[idi][oModel] = GetPVarInt(playerid, "ObJectCreateID");
            ObjList[idi][Obj_X] = x;
            ObjList[idi][Obj_Y] = y;
            ObjList[idi][Obj_Z] = z;
            ObjList[idi][ObjRx] = rx;
            ObjList[idi][ObjRy] = ry;
            ObjList[idi][ObjRz] = rz;
            //format( string, sizeof string, "[%d]", ObjList[idi][oID] );
            //bjList[idi][o3DText] = CreateDynamic3DTextLabel( string, 0xE6E6E6AA, x, y, z + 0.5, 3.0 );
	        SetPVarInt(playerid, "IsPlayerCreateObject", 0);
            cObjectS++;
        }
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
        if(GetPVarInt(playerid, "IsPlayerCreateObject") == 1)
        {
            new idi = GetPVarInt(playerid, "IDMassive_Object");
            DestroyDynamicObject(ObjList[idi][oObject]);
            ObjList[idi][oObject] = 0;
            ObjList[idi][Obj_X] = 0;
            ObjList[idi][Obj_Y] = 0;
            ObjList[idi][Obj_Z] = 0;
            ObjList[idi][ObjRx] = 0;
            ObjList[idi][ObjRy] = 0;
            ObjList[idi][ObjRz] = 0;
            ObjList[idi][oModel] = 0;
            SetPVarInt(playerid, "IsPlayerCreateObject", 0);
        }
    }
	return 1;
} 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Denis2131, опять же, с response поковыряйтесь. Не вызывается все-таки EDIT_RESPONSE_FINAL. Нажатие на сохранение = EDIT_RESPONSE_UPDATE, а закрытие через ESC = EDIT_RESPONSE_CANCEL. 

 

P.s. нашел свою системку создания гаражей таким же способом. Тоже заметил, что там делал без использования EDIT_RESPONSE_FINAL. Честно говоря, не знаю, почему не вызывается это. На WIKI о данном баге не заявлено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Denis2131

,хорошо, спасибо.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.