PDA

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



kat4ex
13.02.2017, 00:11
Итак, решил я написать для себя фикс пикапов через стример и динамик зоны.
Все работало нормально, пока я не столкнулся со вторым типом пикапа, которые должен пропадать. Но т.к. зона никуда не пропадает, то пикап работает, но без визаульного содержания.
Сделал проверку на тип пикапа, и если он == 2, то возвращал просто айди созданного пикапа, иначе делал с зонами
*(возвращал тоже айди диалога).
**(в перехвате OnPlayerEnterDynamicArea возвращал айди созданного пикапа)

stock _fix_CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_PICKUP_SD)
{
new temp;
if(type == 2)
{
temp = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance),
printf("Pickup ID : %d | Areaid: None | type: %d", temp, type);
return temp;
}
else
{
temp = CreateDynamicSphere(x, y, z, Pickup_Radius, worldid, interiorid, playerid);
DynamicPick[temp] = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance);
printf("Pickup ID : %d | Areaid: %d | type: %d", DynamicPick[temp], temp, type);
return DynamicPick[temp];
}
}
В итоге я на выходе получаю, что пикапы != 2 типа работают нормально, а вторые пикапы выполняют функцию статичных пикапов, при этом, как и должны, пропадают.

Сделал лог создания пикапов и срабатывания коллбека.

http://i.imgur.com/wKKYogo.png
*taked pick - коллбек, Pickup & Area ID - перехват OnPlayerEnterDynamicArea*

А вот пикапы со вторым типом вызывают коллбек OnPlayerPickUpDynamicPickup, без участия динамик зоны, и в итоге вызывается не тот айди пикапа.
Подбираю пикап, айди которого равен 39, вызывается коллбек с 35 айди(с 39-го начинается создание пикапов второго типа)

Почему так происходит, или это я накосячил?

DeimoS
13.02.2017, 00:27
А если не писать костыли, а использовать TogglePlayerDynamicArea с таймером?

kat4ex
13.02.2017, 00:39
А если не писать костыли, а использовать TogglePlayerDynamicArea с таймером?
Если поднять пикап, то он пропадает на 30 сек, но при условии, что ты отошел за 15 метров. Иначе он не появляется.

kat4ex
13.02.2017, 21:12
Нет идей никаких ?

DeimoS
14.02.2017, 15:48
Если поднять пикап, то он пропадает на 30 сек, но при условии, что ты отошел за 15 метров. Иначе он не появляется.

Ну так вот и запускай таймер при взятии пикапа и отключай для конкретного игрока динамическую зону, пока условия появления пикапа не сработают (как сработают - включай)