Команда сделана в 2 версиях: обычная и для zcmd (также подойдёт и для других обработчиков команд типа lifecmd, tcmd и т.п.)
Подойдёт практически для любого мода.
Оптимизация и комментарии к коду прилагаются.
Обычная:
Код
if(0 == strcmp(cmd, "/coin", true))
{
// если денег нет - отсечка
if(playerinfo[playerid][pmoney] <= 0)
return sendclientmessage(playerid, 0xb0b0b000, "у вас нет монеток.");
// строки сделаны в константах для автоматического подсчёта длины string
static const coin_str0[] = " подбросил монетку, выпал",
coin_str1[] = "а \"решка\".", coin_str2[] = " \"орёл\".";
// ячеек будет выделено ровно столько, сколько нужно
new string[max_player_name+(sizeof(coin_str0)-1)+(sizeof(coin_str1)-1)+1];
// переменные для сравнения местоположений игроков
new i = getmaxplayers(),
inter = getplayerinterior(playerid),
world = getplayervirtualworld(playerid),
float:x, float:y, float:z;
// составление строки сообщения
getplayername(playerid, string, sizeof(string));
strcat(string, coin_str0);
strcat(string, (random(2)) ? (coin_str1) : (coin_str2));
// показ сообщения игрокам
getplayerpos(playerid, x, y, z);
do{
if(isplayerconnected(--i) == 0
|| getplayervirtualworld(i) != world
|| getplayerinterior(i) != inter
|| isplayerinrangeofpoint(i, 8.0, x, y, z) == 0) continue;
sendclientmessage(i, 0xc8a8e000, string);
}while(i);
return 1;
}
Zcmd:
Код
CMD:coin(playerid, params[])
{
// если денег нет - отсечка
if(PlayerInfo[playerid][pMoney] <= 0)
return SendClientMessage(playerid, 0xB0B0B000, "У вас нет ни одной монеты.");
// строки сделаны в константах для автомагического подсчёта длины string
static const coin_str0[] = " подбросил монетку, выпал",
coin_str1[] = "а \"решка\".", coin_str2[] = " \"орёл\".";
// автоматический подсчёт необходимой длины строки
new string[MAX_PLAYER_NAME+(sizeof(coin_str0)-1)+(sizeof(coin_str1)-1)+1];
// переменные для сравнения местоположений игроков
new i = GetMaxPlayers(),
inter = GetPlayerInterior(playerid),
world = GetPlayerVirtualWorld(playerid),
Float:x, Float:y, Float:z;
// составление строки сообщения
GetPlayerName(playerid, string, sizeof(string));
strcat(string, coin_str0);
strcat(string, (random(2)) ? (coin_str1) : (coin_str2));
// показ сообщения игрокам
GetPlayerPos(playerid, x, y, z);
do{
if(IsPlayerConnected(--i) == 0
|| GetPlayerVirtualWorld(i) != world
|| GetPlayerInterior(i) != inter
|| IsPlayerInRangeOfPoint(i, 8.0, x, y, z) == 0) continue;
SendClientMessage(i, 0xC8A8E000, string);
}while(i);
return 1;
}
Скриншоты из игры:
Когда нет денег
Орёл/решка
Автор: Daniel_Cortez