условие для использования команды

Den629

Участник
Автор темы
158
17
делаю на своем сервере работу, и добавил команду для нее. как задать условие чтобы команда работала только если я начал работать?
 

SURVERS

Активный
139
32
делаю на своем сервере работу, и добавил команду для нее. как задать условие чтобы команда работала только если я начал работать?
Всё очень просто
1. Создаёшь переменную bool:Job[MAX_PLAYERS] = false
2. В начале кода внутри команды вставляешь проверку: if(!Job[playerid]) return 1;
И всё :3
 

Dmitriy Makarov

25.05.2021
Проверенный
2,513
1,138
Я использовал PVar'ы, потому что, во-первых - они удобные, во-вторых - сами удаляются при отключении игрока с сервера.
В случае с bool переменными, их вроде нужно при отключении игрока выключать (ставить значение false).
C++:
// При устройстве на работу
SetPVarInt(playerid, "job", 1); // Там по-моему ещё можно вместо 1 писать true/false. Не знаю, я использовал и работало. Но лучше цифроц, ибо Int, всё-таки.))

// При увольнении
DeletePVar(playerid, "job");

// Проверка на то, работаешь или нет
if (GetPVarInt(playerid, "job") != 1)
{
    SendClientMessage(playerid, -1, "Вы не устроены на работу");
    return 1;
}
 

SURVERS

Активный
139
32
Я использовал PVar'ы, потому что, во-первых - они удобные, во-вторых - сами удаляются при отключении игрока с сервера.
В случае с bool переменными, их вроде нужно при отключении игрока выключать (ставить значение false).
C++:
// При устройстве на работу
SetPVarInt(playerid, "job", 1); // Там по-моему ещё можно вместо 1 писать true/false. Не знаю, я использовал и работало. Но лучше цифроц, ибо Int, всё-таки.))

// При увольнении
DeletePVar(playerid, "job");

// Проверка на то, работаешь или нет
if (GetPVarInt(playerid, "job") != 1)
{
    SendClientMessage(playerid, -1, "Вы не устроены на работу");
    return 1;
}
Для меня они не удобны.
 

moreveal

Известный
Проверенный
928
624
Всё очень просто
1. Создаёшь переменную bool:Job[MAX_PLAYERS] = false
2. В начале кода внутри команды вставляешь проверку: if(!Job[playerid]) return 1;
И всё :3
ахуеть, чтобы у тебя половина кода состояла из объявления булевых переменных под что только можно? тут пвары просто необходимо использовать, а не желательно, как и под всю другую мелкую инфу, которую не нужно хранить в бд; в этом случае вообще уместно сделать enum с разными работами (PLAYER_JOB_FARM, PLAYER_JOB_FISHING...), и заносить это в пвар, а после будет удобно делать проверки:
PHP:
if (GetPVarInt(playerid, "CurrentJob") == PLAYER_JOB_FISHING) {
    // code
}

// а можно для удобства создать себе отдельные функи/макросы
stock IsPlayerWork(playerid) return GetPVarInt(playerid, "CurrentJob") > 0;

stock GetPlayerJob(playerid) return GetPVarInt(playerid, "CurrentJob");

stock SetPlayerJob(playerid, job) {
    SetPVarInt(playerid, "CurrentJob", job);
    return 1;
}
 
Последнее редактирование:
  • Нравится
Реакции: SURVERS

SURVERS

Активный
139
32
ахуеть, чтобы у тебя половина кода состояла из объявления булевых переменных под что только можно? тут пвары просто необходимо использовать, а не желательно, как и под всю другую мелкую инфу, которую не нужно хранить в бд; в этом случае вообще уместно сделать enum с разными работами (PLAYER_JOB_FARM, PLAYER_JOB_FISHING...), и заносить это в пвар, а после будет удобно делать проверки:
PHP:
if (GetPVarInt(playerid, "CurrentJob") == PLAYER_JOB_FISHING) {
    // code
}

// а можно для удобства создать себе отдельные функи/макросы
stock IsPlayerWork(playerid) return GetPVarInt(playerid, "CurrentJob") > 0;

stock GetPlayerJob(playerid) return GetPVarInt(playerid, "CurrentJob");

stock SetPlayerJob(playerid, job) {
    SetPVarInt(playerid, "CurrentJob", job);
    return 1;
}
Воу воу воу, в посте не было сказано что ему нужно нужна проверка для всех работ, а сказал лишь про работу, мейби ему возможно нужна проверка для одной работы, и всё, а на счёт того что PVar лучше чем тот же bool это да, но не нужно прям по мелочам отвлекаться на это, так как Pawn язык создал давным давно, и оптимизировать код с помощью переменных, это бред...

Так же почему сразу нельзя создать массив, раз ему нужно для многих работ?

#define MAX_JOBS 2
new bool:Job[MAX_PLAYERS][MAX_JOBS] = false

if(Job[playerid][переменная которая получила при загрузке аккаунта из бд] == false) return 1;