OnPlayerEditDynamicObject похитил курсор
#1

Доброго времени суток. Во время переустановки объекта, убежав или уехав из стримзоны объекта, выбирается другой объект. Я это пресекаю, блокирую перемещение нового выбранного объекта, старый возвращаю на место и выключаю эдит режим игроку, после этого пропадает курсор. В чем проблема?
Код:
Код:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
        if(objectid == INVALID_OBJECT_ID) return 1;
        if(pInfo[playerid][EditOID] != objectid)
        {
                GetDynamicObjectPos(objectid, x, y, z);
                GetDynamicObjectRot(objectid, rx, ry, rz);
                SetDynamicObjectPos(objectid, x, y, z);
                SetDynamicObjectRot(objectid, rx, ry, rz);
                if(pInfo[playerid][eKB])
                {
                        new o = pInfo[playerid][EditOID], sl = pInfo[playerid][eKBID];
                        GetDynamicObjectPos(o, x, y, z);
                        GetDynamicObjectRot(o, rx, ry, rz);
                        SetDynamicObjectPos(o, x, y, z);
                        SetDynamicObjectRot(o, rx, ry, rz);
                        format(logtext, 98, "Kelio blokada nr. {ffffff}%d\n{1d5187}Pastate: {ffffff}%s\n%s", sl + 1, GetPlayerNameEx(pKB[sl][kbC]), TimestampToDate(pKB[sl][kbCT]));
                        pKB[sl][kblID] = CreateDynamic3DTextLabel(logtext, 0x1d5187FF, x, y, z + 1.0, 10.0);
                        pKB[sl][kbB] = true;
                        pInfo[playerid][eKB] = false;
                        pInfo[playerid][eKBID] = -1;
                        pInfo[playerid][EditOID] = INVALID_OBJECT_ID;
                }
                if(response != EDIT_RESPONSE_CANCEL) CancelEdit(playerid);
                return 1;
        }
        if(pInfo[playerid][eKB])
        {
                switch(response)
                {
                        case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:
                        {
                                new sl = pInfo[playerid][eKBID];
                                if(response == EDIT_RESPONSE_CANCEL)
                                {
                                        GetDynamicObjectPos(objectid, x, y, z);
                                        GetDynamicObjectRot(objectid, rx, ry, rz);
                                        SetDynamicObjectPos(objectid, x, y, z);
                                        SetDynamicObjectRot(objectid, rx, ry, rz);
                                }
                                else
                                {
                                        DestroyDynamicObject(pKB[sl][kboID]);
                                        pKB[sl][kboID] = CreateDynamicObject(978, x, y, z, rx, ry, rz);
                                }
                                format(logtext, 98, "Kelio blokada nr. {ffffff}%d\n{1d5187}Pastate: {ffffff}%s\n%s", sl + 1, GetPlayerNameEx(pKB[sl][kbC]), TimestampToDate(pKB[sl][kbCT]));
                                pKB[sl][kblID] = CreateDynamic3DTextLabel(logtext, 0x1d5187FF, x, y, z + 1.0, 10.0);
                                pKB[sl][kbB] = true;
                                pInfo[playerid][eKB] = false;
                                pInfo[playerid][eKBID] = -1;
                                pInfo[playerid][EditOID] = INVALID_OBJECT_ID;
                        }
                }
        }
        return 1;
}
Курсора нет не в диалогах, не в эдит режиме.
Reply
#2

В том что когда игрок жмет на перемещение, курсор пропадает, а когда отпускает - курсор снова появляется. Ты закрываешь Эдит когда курсор пропал но не успел появиться.
Reply
#3

Ясно. Как лечить? Таймером наверное не получиться, так как можно зажать кнопку мыши и водить. Проверять кнопку мыши в OnPlayerKeyStateChange - бред.
Reply
#4

С CancelSelectTextDraw можешь похимичить но наврятли что то получится. Просто возвращай объект на место без закрытия редактора.
Reply
#5

С
Код:
SelectTextDraw(playerid, -1);
CancelSelectTextDraw(playerid);
ничего не вышло.

EDIT: Возвращая объект на место, для игрока он остается на том месте, куда он его переставил, что опять же не хорошо, игрок может к примеру отодвинуть объект и пройти/проехать в том месте. Меня не совсем такое решении устраивает.
Reply
#6

Ну так не надо сохранять его в нежелательном месте. Пусть двигает его куда хочет, если это происходит в его интерьере.
Reply
#7

Это сис-ма полицейских заграждений, действие происходит не в интерьерах. Позицию не сохраняю. После закрытия/сохранения объекта, он возвращается на то место, откуда был взят. Код из 1 сообщения не переписывал, убрал лишь:
Код:
if(response != EDIT_RESPONSE_CANCEL) CancelEdit(playerid);
Reply
#8

Для полицейских ограждений сойдет позиция относительно угла поворота игрока и высоты.
Reply
#9

Мне так не сойдет. Я хочу так, как делаю.
Reply
#10

Quote:
Originally Posted by Johurt
Посмотреть сообщение
Мне так не сойдет. Я хочу так, как делаю.
А я хочу бразильянку в бикини, но приходится ограничиваться отечественным продуктом. Так же и с твоей проблемой.

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
На место - это заново установить первоначальную позицию объекта.
Двигаемый объект с сервером не синхронизируется в процессе, поэтому на место вернуть не получится.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)