Исправления 1.0.1
- Табуляция кода
- Экономия памяти
- Читабельность (спасибо Untonyst)
Мелкий fix 1.0.1f
- Убран GN(playerid), пришёл GetPlayerName :)
Мелкий fix 1.0.2f
- Немного другой вариант strcat
Мелкий fix 1.0.3f
- Убраны Warnings + Errors
Версия 1.0.3f
Данный мануал добавит на ваш сервер команду /shout(крик):
- Вызвать на помощь (крикнуть и оповестить других зомби о помощи)
- Прийти на помощь (с помощью телепорта помочь страдальцу)
А теперь добавим это все в мод. Приступим:
- Добавим ко всем переменным:
PHP код:
#include <dc_cmd>
#include <sscanf2>
#include <foreach>
#define DLG_GET_HELP 2780//ид диалога для вызова
#define DLG_HELP_ZOMBIE 2781//ид диалога чтоб помочь
new bool:PlayerZombie[MAX_PLAYERS char],//игрок зомби
TeleportLock[MAX_PLAYERS char],//запрёт телепорта
ZombieHelp,//зомби которому нужна помощь
bool:ZombieCall,//проверка крика (можно вызвать, нельзя вызвать)
bool:ShoutZombie,//крик зомби
ShoutTimer;//таймер для обнуления крика
#define PlayAudioStreamForAll(%0); foreach(new i:Player) PlayAudioStreamForPlayer(playerid,%0);//аудиострим для всех
- Добавим ко всем командам:
PHP код:
ALTX:shout("/крик");
CMD:shout(playerid, params[])
{
if(PlayerZombie{playerid} == false)
{
return SendClientMessage(
playerid,0xAFAFAFAA,
"Вы не зомби"
);
}
if(ZombieCall == false)
{
return ShowPlayerDialog(
playerid, DLG_GET_HELP, DIALOG_STYLE_MSGBOX,
"Крик",
"Вы хотите позвать на помощь? (30 силы)",
"Да", "Нет"
);
}
else
return ShowPlayerDialog(
playerid, DLG_HELP_ZOMBIE, DIALOG_STYLE_MSGBOX,
"Крик", "Вы хотите помочь? (10 силы)",
"Да", "Нет"
);
}
- Добавим в OnPlayerDisconnect:
PHP код:
if(ZombieHelp == playerid)//если зомби которому нужна помощь это ИГРОК то...
{
KillTimer(ShoutTimer);//убиваем таймер
ShoutZombie = false;//крик снова доступен (вызвать на помощь)
ZombieCall = false;//теперь можно использовать
foreach(new i:Player) TeleportLock{i} = 0;//запрёт снимаем
}
- Добавим в OnDialogResponse:
PHP код:
switch(dialogid)
{
case DLG_GET_HELP:
{
if(!response) return 1;
if(response)
{
static const help_str[] = " просит помощи, введите /крик";
new helpmes[MAX_PLAYER_NAME+sizeof(help_str)-1],//выделяем ячейки для сообщения
Float:Power;//и для получения "силы"
GetPlayerArmour(playerid, Power);//получаем "силу"
if(ShoutZombie == false)//если крик доступен то...
{
if(Power < 30)//если у игрока нет "силы" то...
{
return SendClientMessage(
playerid,0xAFAFAFAA,
"Не хватает силы"
);
}
ZombieHelp = playerid;//зомби которому нужна помощь это игрок
ZombieCall = true;//крик не доступен (больше никто не может позвать)
ShoutZombie = true;//теперь его нельзя использовать
GetPlayerName(playerid, helpmes, sizeof(helpmes));//получаем имя
strcat(helpmes, help_str);//делаем сообщение
foreach(new i:Player)//проверяем всех игроков
{
if(PlayerZombie{i} == true)//если кто-то зомби то...
{
return SendClientMessage(
i,0x99CC00FF,
helpmes
);//отсылаем ему сообщение о помощи
}
}
PlayAudioStreamForAll("http://stalkeronly.my1.ru/zombie_cal.mp3");//проигрываем аудио
SendClientMessageToAll(
0xB22222FF,
"Где-то кричит мутант"
);//посылаем текст всем
SetPlayerArmour(playerid, Power - 30.0);//отнимаем "силы"
ShoutTimer = SetTimer("OffShout", 20000, false);//вызываем таймер на новый крик
}
return 1;
}
}
case DLG_HELP_ZOMBIE:
{
if(!response) return 1;
if(response)
{
new Float:Power,//для получение "силы"
Float:X,//
Float:Y,//для получения координат
Float:Z;//
GetPlayerArmour(playerid, Power);//получаем "силу"
if(ShoutZombie == true)//если кто-то крикнул то...
{
if(TeleportLock{playerid} == 1)//если игрок уже телепортировался то...
{
return SendClientMessage(
playerid,0xAFAFAFAA,
"Вы уже телепортировались"
);
}
if(ZombieHelp == playerid)//если зомби которому нужна помощь это тот же игрок то...
{
SendClientMessage(
playerid,0xAFAFAFAA,
"Вы не можете к самому себе"
);
TeleportLock{playerid} = 1;
}
if(Power < 10)//если у игрока нет "силы" то...
{
return SendClientMessage(
playerid,0xAFAFAFAA,
"Не хватает силы"
);
}
GetPlayerPos(ZombieHelp, X, Y, Z);//узнаем позицию зомби которому нужна помощь
SetPlayerPos(playerid, X, Y, Z);//и посылаем туда нашего игрока
SetPlayerArmour(playerid, Power - 10.0);//отнимаем "силы"
TeleportLock{playerid} = 1;//блокируем телепорт
}
return 1;
}
}
}
- В конец мода или ко всем функциям:
Автор: Miroslav LepichevPHP код:
forward OffShout();
public OffShout()
{
ShoutZombie = false;//крик снова доступен (вызвать на помощь)
ZombieCall = false;//теперь можно использовать
foreach(new i:Player) TeleportLock{i} = 0;//запрёт снимаем
return 1;
}
Запрещено размещать на другие порталы :rtfm: