Система личных тайников с лутом

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Идея и назначение

Игрок может создать личный тайник в определённой точке и хранить там деньги.

Подходит для выживания и криминальных RP серверов.


Суть реализации

1. Храним координаты тайника и сумму, спрятанную в нём.

2. Команда /makestash создаёт тайник в текущей позиции.

3. Команда /stash позволяет положить или забрать деньги.


Реализация

Код:
new bool:HasStash[MAX_PLAYERS];
new Float:StashX[MAX_PLAYERS], Float:StashY[MAX_PLAYERS], Float:StashZ[MAX_PLAYERS];
new StashMoney[MAX_PLAYERS];


CMD:makestash(playerid)
{
    GetPlayerPos(playerid, StashX[playerid], StashY[playerid], StashZ[playerid]);
    HasStash[playerid] = true;

    SendClientMessage(playerid, -1, "Тайник создан в этой точке.");

    return 1;
}


CMD:stash(playerid, params[])
{
    if(!HasStash[playerid])
        return SendClientMessage(playerid, -1, "У тебя нет тайника.");

    new mode[8], amount;

    if(sscanf(params, "s[8]i", mode, amount))
        return SendClientMessage(playerid, -1, "Используй: /stash [put/take] [сумма].");

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    new Float:dx = x - StashX[playerid];
    new Float:dy = y - StashY[playerid];

    if(floatsqroot(dx * dx + dy * dy) > 3.0)
        return SendClientMessage(playerid, -1, "Ты слишком далеко от своего тайника.");

    if(!strcmp(mode, "put", true))
    {
        if(amount <= 0)
            return SendClientMessage(playerid, -1, "Сумма должна быть больше нуля.");

        if(GetPlayerMoney(playerid) < amount)
            return SendClientMessage(playerid, -1, "Недостаточно денег.");

        GivePlayerMoney(playerid, -amount);
        StashMoney[playerid] += amount;

        SendClientMessage(playerid, -1, "Ты положил деньги в тайник.");
    }
    else if(!strcmp(mode, "take", true))
    {
        if(amount <= 0 || amount > StashMoney[playerid])
            return SendClientMessage(playerid, -1, "Неверная сумма для снятия.");

        StashMoney[playerid] -= amount;
        GivePlayerMoney(playerid, amount);

        SendClientMessage(playerid, -1, "Ты забрал деньги из тайника.");
    }
    else
    {
        SendClientMessage(playerid, -1, "Неверный режим, используй put или take.");
    }

    return 1;
}


Дополнительные идеи

1. Давать возможность взлома чужих тайников.

2. Ограничить количество тайников на игрока.

3. Сохранять тайники в базе данных.
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху