Denis2131 6 Опубликовано 25 января, 2018 Добрый день, проблема такая, я значит сделал аттач к игроку через EditAttach, или как там, дак вот дело в том, что если игрок начинает аттачить обьект то он видит все передвижения и конечный результат, а другой игрок видит только то когда обьект создался на игроке и не видит конечного сохраненого результата на игроке, в чем может быть проблема? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
noname_idk 150 Опубликовано 25 января, 2018 @Denis2131, через EditObject делаете? Если да, то это не проблема. Так и предусмотрено. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 ,да, через него делаю, как понять так и предусмотрено? а как же тогда нормально аттачить, что бы конечный результат был виден всем ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
hteppl 214 Опубликовано 26 января, 2018 Функцию AttachObjectToPlayer пробовали использовать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 AttachObjectToPlayer нет, не пробовал.Как делаю я использую команду, где открывается диалог, в нем некоторые иды которые я могу прикрепить, после выбора откроется диалог, в нем используется функция ну вот как тут SetPlayerAttachedObject(playerid, 6, 10277, 1); EditAttachedObject(playerid, 6); вот получается, что я аттачу обьект на игрока, используя эти стрелки, что бы я мог в нужное место его направвить, но конечного результатата, аттача я не вижу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
noname_idk 150 Опубликовано 26 января, 2018 @Denis2131, прошу прощения, неправильно вопрос прочел. Вы когда через стрелочку наводите объект куда Вам нужно, то Вы видите куда прикрепился объект, а другой игрок - нет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 ,верно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
noname_idk 150 Опубликовано 26 января, 2018 (изменено) @Denis2131, а вы кнопку сохранения жмете же? В паблик OnPlayerEditObject вставляли что-нибудь? вот, что имею в виду под кнопкой сохранения (самая правая) [spoiler=Изображение] Изменено 26 января, 2018 пользователем Elrmrnt-Kritik Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 , безусловно жму. вот что у меня там 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 150 Опубликовано 26 января, 2018 @Denis2131, в данном случае точно вызывается этот паблик? Через тот же printf не проверяли? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 ,этот паблик вызывается для ограждений, но сними такая же проблема, они после финала не работают, а к аттачу я использую паблик 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 150 Опубликовано 26 января, 2018 (изменено) @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); Все и без того сохранилось. Изменено 26 января, 2018 пользователем Elrmrnt-Kritik Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 , сделал как вы сказали, удалил не нужный код, заработало, спасибо, еще хотел бы узнать, можно ли не создавать новую тему, а в этой задать второй вопрос, он тоже касается такой же проблемы. но только эта проблема связанна с обьектами и с пабликом 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 150 Опубликовано 26 января, 2018 @Denis2131, опять же, с response поковыряйтесь. Не вызывается все-таки EDIT_RESPONSE_FINAL. Нажатие на сохранение = EDIT_RESPONSE_UPDATE, а закрытие через ESC = EDIT_RESPONSE_CANCEL. P.s. нашел свою системку создания гаражей таким же способом. Тоже заметил, что там делал без использования EDIT_RESPONSE_FINAL. Честно говоря, не знаю, почему не вызывается это. На WIKI о данном баге не заявлено. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Denis2131 6 Опубликовано 26 января, 2018 ,хорошо, спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты