Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Антиподбор Pickup

Статус
В этой теме нельзя размещать новые ответы.

LAW

Новичок
Всем доброго времени суток.

По скольку я начинающий пользователь на форуме, прошу без агрессии. Подсказки приветствуются... :df:

Хотелось бы отметить, что идея возникла поиграв на SVL, после чего была реализована для своего сервера.

Автор кода: LAW


1. Для начала, добавим ко всем enum:

PHP:
enum PickInfo { Float: PickX, Float: PickY, Float: PickZ }
new PickupInfo[MAX_PICKUPS][PickInfo];
2. Создадим функционал для создания pickup`ов на сервер:

PHP:
stock AddPickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = -1) 
{ 
     new TempID = CreatePickup(model, type, X, Y, Z, virtualworld); PickupInfo[TempID][PickX] = X, PickupInfo[TempID][PickY] = Y, PickupInfo[TempID][PickZ] = Z; 
     return TempID; 
}
3. Заменим на AddPickup такие ф-ции, как:
а) CreatePickup
b) AddStaticPickup
4. Поищите у себя в немалом коде таймер на 1 секунду. Если нету:

PHP:
public OnGameModeInit() return SetPVarInt(playerid, "PlayerTimer", SetTimerEx("PlayerUpdate", 250, true, "i", playerid);
4.1. Перейдем к forward`ам, и добавим еще один:

forward PlayerUpdate(playerid);
5. Поставим проверку на то, находится ли игрок на pickup`е:

PHP:
public PlayerUpdate(playerid)
{
    if(GetPVarInt(playerid, "PickupIDadd"))
    {
        if(!IsPlayerInRangeOfPoint(playerid, 3.0, PickupInfo[GetPVarInt(playerid, "PickupIDadd")][PickX], PickupInfo[GetPVarInt(playerid, "PickupIDadd")][PickY], PickupInfo[GetPVarInt(playerid, "PickupIDadd")][PickZ]) && GetPVarInt(playerid, "Pickup.TAKED")) return DeletePVar(playerid, "Pickup.TAKED"), DeletePVar(playerid, "PickupIDadd");
    }
    return true;
}
6. Затем, поставим запись ID pickup`ов и сам антиподбор:

PHP:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(IsPlayerInRangeOfPoint(playerid, 5.0, PickupInfo[pickupid][PickX], PickupInfo[pickupid][PickY], PickupInfo[pickupid][PickZ]) && GetPVarInt(playerid, "Pickup.TAKED")) return true;
    SetPVarInt(playerid, "Pickup.TAKED", 1), SetPVarInt(playerid, "PickupIDadd", pickupid); return true;
}

Для тех, кто создавал таймер вместе со мной:

PHP:
public OnPlayerDisconnect(playerid, reason) return KillTimer(GetPVarInt(playerid, "PlayerTimer")), DeletePVar(playerid, "PlayerTimer");
Если забыл о каком-то моменте, говорите. Спасибо за внимание :dn:
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу