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

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

8

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

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

Игрок может арендовать небольшую зону, где действуют особые правила.

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


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

1. Храним центр и радиус приватной зоны для игрока.

2. Проверяем, входит ли другой игрок в чужую зону.

3. При входе можно кикать из зоны или отправлять сообщение.


Реализация

Код:
new Float:ZoneX[MAX_PLAYERS], Float:ZoneY[MAX_PLAYERS], Float:ZoneZ[MAX_PLAYERS];
new Float:ZoneR[MAX_PLAYERS];
new bool:HasZone[MAX_PLAYERS];


CMD:setzone(playerid, params[])
{
    new radius;

    if(sscanf(params, "i", radius))
        return SendClientMessage(playerid, -1, "Используй: /setzone [радиус].");

    if(radius <= 0)
        return SendClientMessage(playerid, -1, "Радиус должен быть больше нуля.");

    GetPlayerPos(playerid, ZoneX[playerid], ZoneY[playerid], ZoneZ[playerid]);
    ZoneR[playerid] = float(radius);
    HasZone[playerid] = true;

    SendClientMessage(playerid, -1, "Приватная зона установлена.");

    return 1;
}


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

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!HasZone[i]) continue;
        if(i == playerid) continue;

        new Float:dx = x - ZoneX[i];
        new Float:dy = y - ZoneY[i];

        new Float:dist = floatsqroot(dx * dx + dy * dy);

        if(dist < ZoneR[i])
        {
            SendClientMessage(playerid, -1, "Ты вошел в приватную зону другого игрока.");
            break;
        }
    }

    return 1;
}


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

1. Телепортировать чужих игроков из приватной зоны.

2. Брать аренду за создание зоны.

3. Делать разные типы зон с разными правами.
 

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

Сверху