PDA

Просмотр полной версии : [CMD] Команда /hw (happiness windows)



DoMoBoy
19.03.2017, 12:06
Happiness windows - что значит "Окно счастья"
[DC_CMD]

Часто ли было такое, что во время мероприятия, какой нибудь игрок срывал мероприятие или просто был очень непослушным игроком. В этом случае, такие игроки наказывались, киком или администрация отправляла его в тюрьму. Ну, у каждого было по разному. Но зачем его кикать, если можно наказать немного по другому, более интересным способом.

пойдём в public OnDialogResponse и добавим:


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(GetPVarType(playerid, "DialogBoxOfHappiness") != PLAYER_VARTYPE_NONE)
return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Окно счастья", "{00ff00}Привет. Я окно счастья:)\n{ffffff}Попробуй закрой меня!;)", "Закрыть", "Закрыть");

//Остальной код

return 1;
}



Ну и в конце отправляемся в конец мода, где обычно вписываются команды и там вставляем следующее:


CMD:hw(playerid, params[])
{
new giveplayerid;
if(sscanf(params, "u", giveplayerid))
return SendClientMessage(playerid, -1, "Используй: /hw ID");

if(giveplayerid == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, "Указанный игрок не найден на сервере");

if(GetPVarType(giveplayerid, "DialogBoxOfHappiness") == PLAYER_VARTYPE_NONE)
{
ShowPlayerDialog(giveplayerid, 0, DIALOG_STYLE_MSGBOX, "Окно счастья", "{00ff00}Привет. Я окно счастья:)\n{ffffff}Попробуй закрой меня!;)", "Закрыть", "Закрыть");
SendClientMessage (giveplayerid, 0X00FF00FF, "Администратор подарил вам Окно счастья;)");
SetPVarInt(giveplayerid, "DialogBoxOfHappiness", 1);
}
else
{
ShowPlayerDialog(giveplayerid, -1, DIALOG_STYLE_MSGBOX, ".", ".", ".", ".");
DeletePVar(giveplayerid, "DialogBoxOfHappiness");
}
return 1;
}


Ну, собственно как то так...


Спасибо за исправление: DeimoS

DeimoS
19.03.2017, 12:18
Ты перепутал OnPlayerRequestClass и OnDialogResponse.
+ такой диалог легко закрыть с помощью собейта или любого другого чита/клео, позволяющего с диалогами работать.
Да и без читов можно нажать на "F6" и в чат писать спокойно

DoMoBoy
19.03.2017, 12:26
Ты перепутал OnPlayerRequestClass и OnDialogResponse.
+ такой диалог легко закрыть с помощью собейта или любого другого чита/клео, позволяющего с диалогами работать.
Да и без читов можно нажать на "F6" и в чат писать спокойно

Насчёт чит-программ не предусмотрел. Спасибо за исправление.
Писать то можно, но из-за данного окна, двигаться то будет не возможно. И да, заморозить игрока, слишком просто.)

DeimoS
19.03.2017, 12:29
Да и код команды у тебя кривой: начиная от построения условий и заканчивая ошибками, а-ля "params" вместо "params[0]"


CMD:hw(playerid, params[])
{
new giveplayerid;
if(sscanf(params, "u", giveplayerid))
return SendClientMessage(playerid, -1, "Используй: /hw ID");

if(giveplayerid == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, "Указанный игрок не найден на сервере");

if(GetPVarType(giveplayerid, "DialogBoxOfHappiness") == PLAYER_VARTYPE_NONE)
{
ShowPlayerDialog(giveplayerid, 0, DIALOG_STYLE_MSGBOX, "Окно счастья", "{00ff00}Привет. Я окно счастья:)\n{ffffff}Попробуй закрой меня!;)", "Закрыть", "Закрыть");
SendClientMessage (giveplayerid, 0X00FF00FF, "Администратор подарил вам Окно счастья;)");
SetPVarInt(giveplayerid, "DialogBoxOfHappiness", 1);
}
else
{
ShowPlayerDialog(giveplayerid, -1, DIALOG_STYLE_MSGBOX, ".", ".", ".", ".");
DeletePVar(giveplayerid, "DialogBoxOfHappiness");
}
return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(GetPVarType(playerid, "DialogBoxOfHappiness") != PLAYER_VARTYPE_NONE)
return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Окно счастья", "{00ff00}Привет. Я окно счастья:)\n{ffffff}Попробуй закрой меня!;)", "Закрыть", "Закрыть");

//Остальной код

return 1;
}

DoMoBoy
19.03.2017, 12:37
Я тебя понял.

Nexius_Tailer
19.03.2017, 13:18
1.


ShowPlayerDialog(params[0], 0, DIALOG_STYLE_MSGBOX, "Окно счастья","{ffffff}Ладно, теперь можешь меня закрыть;) Пока","Закрыть","");
Иды диалогов желательно объявлять дефайном или через enum, голые цифры путаются при их множестве

2.


CMD:hw(playerid, params[])
{
//...
if (windows[params[0]] == 0)
{
//...
return 0; // <-
}
//...
return 0; // <-
}
Вместо "return 0;" в командах нужно ставить "return 1", ибо команда найдена.
А у тебя даже при её вводе будет показывать "SERVER: Unknown command."

Ну и ещё вот здесь:

if (windows[playerid] != 0) {ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Окнопку счастья","{00ff00}Привет. Я окно счастья:)\n{ffffff}Попробуй закрой меня!;)","Закрыть","Закрыть");}
"Окно счастья", ошибка небольшая)

DeimoS
19.03.2017, 13:52
Иды диалогов желательно объявлять дефайном или через enum, голые цифры путаются при их множестве

В данном случае ID диалога не важен, ибо при выдаче такого "окна счастья" любой диалог не будет работать из-за проверки в OnDialogResponse

DoMoBoy
19.03.2017, 21:33
Вместо "return 0;" в командах нужно ставить "return 1", ибо команда найдена.
А у тебя даже при её вводе будет показывать "SERVER: Unknown command."


А разве функционал не будетолько повторяться постоянно? И ведь если поставить в первом return единицу, то по идее же функция продолжится, а так как там стоит ещё одна проверка после выдачи окна, окно сразу же можно будет закрыть, или я не прав?


Насчёт ошибки, я писал с планшета, а у него немного проблема с набором текста.

Nexius_Tailer
19.03.2017, 21:36
А разве функционал не будетолько повторяться постоянно? И ведь если поставить в первом return единицу, то по идее же функция продолжится, а так как там стоит ещё одна проверка после выдачи окна, окно сразу же можно будет закрыть, или я не прав?
Нет, return обрывает действие независимо от возвращаемого им значения