PDA

Просмотр полной версии : [CMD] /coin



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
Копирование на других ресурсах без указания автора запрещено.

Dimon_Fanat
22.12.2014, 15:08
хм прикольно.

-WorcOut-
22.12.2014, 19:21
Мне интересно для такой команды зачем параметры задаёшь , если их вообще нету!!!

L0ndl3m
22.12.2014, 20:44
Мне интересно для такой команды зачем параметры задаёшь , если их вообще нету!!!
Простите, что?

$continue$
22.12.2014, 22:33
Поражает твой уровень кодинга.

-WorcOut-
23.12.2014, 18:08
Простите, что?
Emae as they say professionals

Privies
23.12.2014, 18:20
Emae as they say professionals

Как они сказать профессионалы

Молодец, выпендрился

-WorcOut-
23.12.2014, 18:24
Ты мне соска ?

Spectrum
25.12.2014, 23:04
Ты мне соска ?

штоблять? гугл себе свой в жопу затолкай, professional

Adrenalin :3
06.12.2015, 22:32
После того как смотришь на этот код, понимаешь какой же ты быдло-скриптер

A N D R E Y
07.12.2015, 00:57
После того как смотришь на этот код, понимаешь какой же ты быдло-скриптер
Предложи лучше, и мне и остальным будет пример. Ну надоело уже это пустословство.

L0ndl3m
07.12.2015, 17:28
Предложи лучше, и мне и остальным будет пример. Ну надоело уже это пустословство.
Он критиковал себя, а не ТС.

Glant
23.01.2016, 00:48
do while с GetMaxPlayers до только для разнообразия, или данный способ будет лучше остальных циклов в данном случае?

$continue$
23.01.2016, 03:37
do while с GetMaxPlayers до только для разнообразия, или данный способ будет лучше остальных циклов в данном случае?

Redirected (http://cppstudio.com/post/6458/)

vovandolg
29.01.2016, 01:21
Ещё бы можно было запилить анимацию и перенести более половины кода в таймер,
будет выглядеть реалистичнее, как он подбросит монетку и она в чате не сразу загорится, а так скажем через секунды две..

wAx
29.01.2016, 13:11
Ещё бы можно было запилить анимацию и перенести более половины кода в таймер,
будет выглядеть реалистичнее, как он подбросит монетку и она в чате не сразу загорится, а так скажем через секунды две..

будет абсолютно лишним делать все это... эта команда используется далеко не для каких-либо показательных действий персонажа (к примеру таких как курение сигареты или употребление пива), команда используется для разрешения спорных ситуаций которые могут возникнуть в рп процессе. К примеру:
- wAx набросившись на человека попробовал сбить его с ног.
... и дальше, если не было отыгровки параметров тела персонажа или его физических качеств, то бросается монетка (предварительно выбрав стороны). В общем вот как-то так.

vovandolg
31.01.2016, 20:21
Это всё понятно, но я о атмосфере игры, или вам по нраву когда кругом ходячие мертвецы которые ели шевелятся или не шевелятся,
не ну я не понимаю такие моды где нету хотя бы чуточку атмосферы, когда игрок что то делает должен идти звук или шевелится что(кто) то:dntknw:

wAx
31.01.2016, 21:54
Это всё понятно, но я о атмосфере игры, или вам по нраву когда кругом ходячие мертвецы которые ели шевелятся или не шевелятся,
не ну я не понимаю такие моды где нету хотя бы чуточку атмосферы, когда игрок что то делает должен идти звук или шевелится что(кто) то:dntknw:

повторюсь, /coin - не та команда, добавив анимацию к которой можно улучшить атмосферу. Это просто монетка...

DeimoS
01.02.2016, 00:55
Смысл устраивать полемику? Вы просто описываете разные вариации использования команды. Что с анимацией, что без анимации - всё приемлемо. Зависит лишь от ситуации