PDA

Просмотр полной версии : [Вопрос] Не срабатывает EditObject



#NickName
08.01.2017, 16:26
Вот к примеру команда
CMD:a_a(playerid)
{
new Float:x, Float:y, Float:z, objects_s;
GetPlayerPos(playerid, x, y, z);
objects_s = CreateObject(19324, x, y, z, 0, 0, 0);
EditObject(playerid, objects_s);
return 1;
}

Он должен показать хоть меню редактирования, но нечего не показывает.

Nexius_Tailer
08.01.2017, 16:35
Вот к примеру команда
CMD:a_a(playerid)
{
new Float:x, Float:y, Float:z, objects_s;
GetPlayerPos(playerid, x, y, z);
objects_s = CreateObject(19324, x, y, z, 0, 0, 0);
EditObject(playerid, objects_s);
return 1;
}

Он должен показать хоть меню редактирования, но нечего не показывает.
Возможно лимит объектов превышен?

CMD:a_a(playerid)
{
new Float:x, Float:y, Float:z, objects_s;
GetPlayerPos(playerid, x, y, z);
objects_s = CreateObject(19324, x, y, z, 0, 0, 0);
printf("Objectid: %d", object_s); //<- 65535 - превышен
EditObject(playerid, objects_s);
return 1;
}
Сам объект-то создаётся?

#NickName
08.01.2017, 16:45
Возможно лимит объектов превышен?

CMD:a_a(playerid)
{
new Float:x, Float:y, Float:z, objects_s;
GetPlayerPos(playerid, x, y, z);
objects_s = CreateObject(19324, x, y, z, 0, 0, 0);
printf("Objectid: %d", object_s); //<- 65535 - превышен
EditObject(playerid, objects_s);
return 1;
}
Сам объект-то создаётся?

нет

- - - Добавлено - - -


нет

Как ты и говорил Objectid: 65535

- - - Добавлено - - -


нет

- - - Добавлено - - -



Как ты и говорил Objectid: 65535

создал как динамический объект всё збс, спасибо за ответ.

vovandolg
08.01.2017, 17:28
Объектов в стриме много было вот и не создался)
По другому не как это произойти не могло.

- - - Добавлено - - -

Я вообще рекомендую в сампе если делать что то с маппингом то сразу смотреть какой ещё маппинг есть в стриме и подсчитать это всё, потом прикинуть как игроки ещё могут создавать объекты и сколько 1 игрок может принести в этот стрим с собой объектов и если правильно всё рассчитать то такого косяка больше не когда не увидишь на сервере.

#NickName
08.01.2017, 17:47
Добавил как и говорили объект динамический, и редактирую его.


Ошибка вот такая как нажму сохранить
Run time error 4: "Array index out of bounds"
[16:20:59] [debug] Attempted to read/write array element at index 5360 in array of size 20
[16:20:59] [debug] AMX backtrace:
[16:20:59] [debug] #0 001e44a8 in public OnPlayerEditDynamicObject (playerid=0, objectid=5360, response=1, Float:x=1178.85291, Float:y=-1328.26001, Float:z=14.14891, Float:rx=0.00000, Float:ry=0.00000, Float:rz=173.99997) at C:\*******\*******\*******\******\gamemodes\new.pw n:22197


Вот в паблике

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
new Float:oldX, Float:oldY, Float:oldZ,Float:oldRotX, Float:oldRotY, Float:oldRotZ;
GetDynamicObjectPos(objectid, oldX, oldY, oldZ);
GetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
if(response == EDIT_RESPONSE_FINAL)
{
if(GetPVarInt(playerid, "a_object") == 1)
{
AtmInfo[a_object][a_x] = oldX;
AtmInfo[a_object][a_y] = oldY;
AtmInfo[a_object][a_z] = oldZ;
AtmInfo[a_object][ar_x] = oldRotX;
AtmInfo[a_object][ar_y] = oldRotY;
AtmInfo[a_object][ar_z] = oldRotZ;
AtmInfo[a_object][a_virtual] = GetPlayerVirtualWorld(playerid);
AtmInfo[a_object][a_int] = GetPlayerInterior(playerid);
AtmInfo[a_object][a_commiss] = 5;
Строка AtmInfo[a_object][a_x] = oldX;



enum a_Info
{
a_ID,
Float:a_x,
Float:a_y,
Float:a_z,
Float:ar_x,
Float:ar_y,
Float:ar_z,
a_commiss,
a_virtual,
a_int,
Text3D:a_label
};
new AtmInfo[20][a_Info];
new a_object;

в команде

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
a_object = CreateDynamicObject(19324, x, y, z, 0, 0, 0);
EditDynamicObject(playerid, a_object);
SetPVarInt(playerid, "a_object", 1);

- - - Добавлено - - -


Объектов в стриме много было вот и не создался)
По другому не как это произойти не могло.

- - - Добавлено - - -

Я вообще рекомендую в сампе если делать что то с маппингом то сразу смотреть какой ещё маппинг есть в стриме и подсчитать это всё, потом прикинуть как игроки ещё могут создавать объекты и сколько 1 игрок может принести в этот стрим с собой объектов и если правильно всё рассчитать то такого косяка больше не когда не увидишь на сервере.

ченки выше

- - - Добавлено - - -


Возможно лимит объектов превышен?

CMD:a_a(playerid)
{
new Float:x, Float:y, Float:z, objects_s;
GetPlayerPos(playerid, x, y, z);
objects_s = CreateObject(19324, x, y, z, 0, 0, 0);
printf("Objectid: %d", object_s); //<- 65535 - превышен
EditObject(playerid, objects_s);
return 1;
}
Сам объект-то создаётся?

да, но с динамикой не очень, глянь

Nexius_Tailer
08.01.2017, 17:59
>

[16:20:59] [debug] Attempted to read/write array element at index 5360 in array of size 20

>

new AtmInfo[20][a_Info]; //20

Размер массива придётся увеличить (либо количество объектов в стриме сократить). А вообще, переводи в переводчике такие ошибки, если по тексту непоянтно

#NickName
08.01.2017, 18:02
>


>

new AtmInfo[20][a_Info]; //20

Размер массива придётся увеличить (либо количество объектов в стриме сократить). А вообще, переводи в переводчике такие ошибки, если по тексту непоянтно

увеличить на кол-во объектов в стриме, и ещё с запасом?

vovandolg
08.01.2017, 18:14
ID созданного объекта надо записывать в простую переменную,
я так понимаю 20 это количество банкоматов,
а ты впихиваешь туда ID созданного объекта:hang1:

Nexius_Tailer
08.01.2017, 18:16
увеличить на кол-во объектов в стриме, и ещё с запасом?
Ну если у тебя, как я понимаю, AtmInfo только для определённых каких-то объектов, то можно просто переделать обращение к этому массиву с минимальными затратами. Например, в этом массиве (в enum) добавить ид объекта для каждого "Atm". Потом при редактировании объектов обращаться не к ячейке массива по иду объекта, а искать циклом по этому массиву тот элемент, ид объекта которого в статистике равен редактируемому.

#NickName
08.01.2017, 18:42
Ну если у тебя, как я понимаю, AtmInfo только для определённых каких-то объектов, то можно просто переделать обращение к этому массиву с минимальными затратами. Например, в этом массиве (в enum) добавить ид объекта для каждого "Atm". Потом при редактировании объектов обращаться не к ячейке массива по иду объекта, а искать циклом по этому массиву тот элемент, ид объекта которого в статистике равен редактируемому.

Создал обычную переменную, при создание объекта +1.Когда сохраняю банкоматы отхожу от этой переменной.При загрузке прибавляю ++.