Перейти к содержанию
Авторизация  
SCRIPTMAN

/ticket(выдать штраф)

Рекомендуемые сообщения

SCRIPTMAN

Привет всем.

 

Сейчас научу вас писать команду /ticket - выдать штраф, команда простая, но возможно кто-то не умеет её писать.

Писать я буду на DC_CMD.

 

1. Для начала создаем команду и пихаем туда проверка, я буду брать со своего мода:

CMD:ticket(playerid, params[])
{
if(Player[playerid][pMember] != 1) return SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать данную команду!");
if(sscanf(params, "iis[128]", params[0], params[1], params[2])) return SCM(playerid, COLOR_WHITE, "Введите: /ticket [id] [сумма] [причина");
if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GREY, "Игрок не найден!");
if(login_check[params[0]] == false) return SCM(playerid, COLOR_GREY, "Игрок не авторизован!");
if(params[0] == playerid) return SCM(playerid, COLOR_GREY, "Вы указали свой ID!");
if(GetDistanceBetweenPlayers(playerid, params[0]) > 10.0) return SCM(playerid, COLOR_GREY, "Игрок далеко от вас!");//Проверка на дистанцию
if(params[1] < 0 || params[1] > 50000) return SCM(playerid, COLOR_GREY, "Не менее 1-го и не больее 50000-ти тысяч рублей.");//проверка на деньги

Проверки я так думаю объяснять не нужно, они и так понятны по тексту.

 

2. Делаем текст с помощью static const: (с данной функцией можно ознакомиться в данной теме)

static const fmt_str[] =
"\
Сотрудник полиции %s выписал вам штраф\
\nРазмером в %d рублей\n\
\nПричина: %s\n\
\nОплатить штраф?\
";
new string[sizeof(fmt_str)-2+MAX_PLAYER_NAME-2+5-2+133];
format(string, sizeof(string), fmt_str
,
Player[playerid][pName],
params[1]
);
SPD(params[0], id диалога, DSM, "Штраф", string, "Да", "Нет");

Почему у меня несколько строк? - мне так удобнее и понятнее, думаю вам тоже.

Дальше нам нужно работать с диалогами, но у них не прокатит params, для этого я создам PVar'ы, так как их не нужно удалять при выходе из игры игрока, как-то так короче :D83DDE03: 

В общем, создаем, я назову их TicketPlayer - человек, который выписывает штраф и TicketPrice - сумма штрафа.

3. Создаем PVar'ы:

SetPVarInt(params[0], "TicketPlayer", playerid);
SetPVarInt(params[0], "TicketPrice", params[1]);

Не забываем завершать действие, чтобы не шло дальше, для этого просто добавляем в конец команды "return true;"

4. Из этого всего мы получаем такую вот команду:

CMD:ticket(playerid, params[])
{
if(Player[playerid][pMember] != 1) return SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать данную команду!");
if(sscanf(params, "iis[128]", params[0], params[1], params[2])) return SCM(playerid, COLOR_WHITE, "Введите: /ticket [id] [сумма] [причина");
if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GREY, "Игрок не найден!");
if(login_check[params[0]] == false) return SCM(playerid, COLOR_GREY, "Игрок не авторизован!");
if(params[0] == playerid) return SCM(playerid, COLOR_GREY, "Вы указали свой ID!");
if(GetDistanceBetweenPlayers(playerid, params[0]) > 10.0) return SCM(playerid, COLOR_GREY, "Игрок далеко от вас!");
if(params[1] < 0 || params[1] > 50000) return SCM(playerid, COLOR_GREY, "Не менее 1-го и не больее 50000-ти тысяч рублей.");
static const fmt_str[] =
"\
Сотрудник полиции %s выписал вам штраф\
\nРазмером в %d рублей\n\
\nПричина: %s\n\
\nОплатить штраф?\
";
new string[sizeof(fmt_str)-2+MAX_PLAYER_NAME-2+5-2+133];
format(string, sizeof(string), fmt_str
,
GN(playerid),
params[1]
);
SPD(params[0], id диалога, DSM, "Штраф", string, "Да", "Нет");
SetPVarInt(params[0], "TicketPlayer", playerid);
SetPVarInt(params[0], "TicketPrice", params[1]);
return true;
}

5. Переходим к работе с диалогом, для этого создаем диалог со свободным ID, дальше добавляем PVar'ы, точнее присваиваем к переменным:

case id: //у вас возможно будет if(dialogid == id диалога)
{
new playerd = GetPVarInt(playerid, "TicketPlayer");
new price = GetPVarInt(playerid, "TicketPrice"); 

Дальше делаем действие на правую кнопку, то есть, если он нажмет "Да".

6. Для начала делаем проверку, есть ли данная сумма для оплаты у игрока:

if(response)
{
if(Player[playerid][pMoney] < price)
{
SCM(playerd, COLOR_GREY, "У игрока недостаточно денег!");
SCM(playerid, COLOR_GREY, "У вас недостаточно денег!");
return true;
}

7. Теперь, если у игрока есть деньги, отнимем у него данную сумму, а нам отдадим:

Player[playerd][pMoney] += price;
Player[playerid][pMoney] -= price;
Player[playerid][pTicket_op] += 1;//можете её пока удалить, это у игрока появляется уже +1 оплаченный штраф, позже сделаю урок

8. Теперь сам текст:

static const fmt_str[] = "%s оплатил штраф в размере %d рублей.";
new string[sizeof(fmt_str)+2+MAX_PLAYER_NAME-2+5];
format(string, sizeof(string), fmt_str, GN(playerid), price);
SCM(playerd, COLOR_GREEN, string);
static const fmt_str_2[] = "Вы оплатили штраф в размере %d рублей.";
new string_2[sizeof(fmt_str_2)-2+5];
format(string_2, sizeof(string_2), fmt_str_2, price);
SCM(playerid, COLOR_GREEN, string_2);
}

9. Теперь делаем действие на левую кнопку мыши, если игрок нажал "Нет":

else
{
SCM(playerd, COLOR_RED, "Игрок отказался оплачивать штраф.");
SCM(playerid, COLOR_RED, "Вы отказались оплачивать штраф.");
Player[playerid][pTicket_no] += 1;//можете пока удалить, это +1 неоплаченный штраф
DeletePVar(playerid, "TicketPlayer"), DeletePVar(playerid, "TicketPrice");
}

То есть, вывели текст, прибавили неоплаченный штраф и удалили PVar'ы

10. В итоге у нас получается так:

case id:
{
new playerd = GetPVarInt(playerid, "TicketPlayer");
new price = GetPVarInt(playerid, "TicketPrice");
if(response)
{
if(Player[playerid][pMoney] < price)
{
SCM(playerd, COLOR_GREY, "У игрока недостаточно денег!");
SCM(playerid, COLOR_GREY, "У вас недостаточно денег!");
return true;
}
Player[playerd][pMoney] += price;
Player[playerid][pMoney] -= price;
Player[playerid][pTicket_op] += 1;
static const fmt_str[] = "%s оплатил штраф в размере %d рублей.";
new string[sizeof(fmt_str)+2+MAX_PLAYER_NAME-2+5];
format(string, sizeof(string), fmt_str, GN(playerid), price);
SCM(playerd, COLOR_GREEN, string);
static const fmt_str_2[] = "Вы оплатили штраф в размере %d рублей.";
new string_2[sizeof(fmt_str_2)-2+5];
format(string_2, sizeof(string_2), fmt_str_2, price);
SCM(playerid, COLOR_GREEN, string_2);
}
else
{
SCM(playerd, COLOR_RED, "Игрок отказался оплачивать штраф.");
SCM(playerid, COLOR_RED, "Вы отказались оплачивать штраф.");
Player[playerid][pTicket_no] += 1;
DeletePVar(playerid, "TicketPlayer"), DeletePVar(playerid, "TicketPrice");
}
}

Ну вот и все, в следующем уроке сделаем штрафы оплаченные и неоплаченные.

 

Автор: SCRIPTMAN

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.