Daniel_Cortez
15.04.2013, 17:48
Однажды увидел на одном из серверов команду бросания кубиков (/dice) и в голову пришла идея создания того же самого, но с подбрасыванием монетки.
Команда сделана в 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;
}
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;
}
Скриншоты из игры:
Когда нет денег
http://s6.hostingkartinok.com/uploads/images/2013/04/3c327ff34896c6052ec238df4a598334.png
Орёл/решка
http://s6.hostingkartinok.com/uploads/images/2013/04/458d7aca27ba996ba126c8866567a55c.png
Автор: Daniel_Cortez
Копирование на других ресурсах без указания автора запрещено.
Команда сделана в 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;
}
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;
}
Скриншоты из игры:
Когда нет денег
http://s6.hostingkartinok.com/uploads/images/2013/04/3c327ff34896c6052ec238df4a598334.png
Орёл/решка
http://s6.hostingkartinok.com/uploads/images/2013/04/458d7aca27ba996ba126c8866567a55c.png
Автор: Daniel_Cortez
Копирование на других ресурсах без указания автора запрещено.