PDA

Просмотр полной версии : [Вопрос] Как узнать 5-ое убийство?



Иван Бубнов
23.01.2016, 15:08
Всем привет.
Хотел сделать систему серийных убийств (уведомляет всех игроков о серийных убийствах с каждым 5 ой убийствой)
Вот код:


public OnPlayerDeath(playerid, killerid, reason)
{
SeriKill[playerid] = 0;
SeriKill[killerid]++;
if(SeriKill[killerid] == 5) SendClientMessageToAll(-1, "Какой то игрок совершил серию из 5 убийств!");
if(SeriKill[killerid] == 10) SendClientMessageToAll(-1, "Какой то игрок совершил серию из 10 убийств!");
if(SeriKill[killerid] == 15) SendClientMessageToAll(-1, "Какой то игрок совершил серию из 15 убийств!");
if(SeriKill[killerid] == 20) SendClientMessageToAll(-1, "Какой то игрок совершил серию из 20 убийств!");
//бесконечность
return 1;
}


Собственно вопрос, как можно сделать код по проще? Незнаю может там можно вычислить по какой то формуле)
serialid = SerialKill[killerid] % 5 что ли хз. подскажите
SendClientMessageToAll(-1, "Игрок %s[%d] совершил серию из %d убийств!", pName, killerid, serialid); типо

Argument
23.01.2016, 15:25
public OnPlayerDeath(playerid, killerid, reason)
{
SeriKill[playerid] = 0;
SeriKill[killerid]++;

if(SeriKill[killerid] && !(SeriKill[killerid] % 5)) // если не 0 и кратно 5
{
new str[128], name[24]; //если переменная для строки и ника есть - не создавай еще раз
GetPlayerName(killerid,name,24);
format(str,sizeof(str),"Игрок %s[%d] совершил серию из %d убийств!",name,killerid,SeriKill[killerid]);
SendClientMessageToAll(-1, str);
}
return 1;
}

L0ndl3m
23.01.2016, 19:09
Argument, что насчёт того, что killerid может и не быть на сервере?

DeimoS
23.01.2016, 19:30
А вот за такое пора бы уже устраивать показательные казни

new str[128], name[24];
GetPlayerName(killerid,name,24);
:shout:

public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
SeriKill[playerid] = 0;
SeriKill[killerid]++;

if(SeriKill[killerid] && !(SeriKill[killerid] % 5)) // если не 0 и кратно 5
{
new string[36+MAX_PLAYER_NAME+1+3+11];
GetPlayerName(killerid, string, MAX_PLAYER_NAME+1);
format(string, sizeof(string), "Игрок %s[%d] совершил серию из %d убийств!", string, killerid, SeriKill[killerid]);
SendClientMessageToAll(-1, string);
}
}
return 1;
}

L0ndl3m
23.01.2016, 19:31
GetPlayerName(killerid, string, MAX_PLAYER_NAME);

И за такое тоже казни можно устраивать. Причём, уже давно...

DeimoS
23.01.2016, 19:39
И за такое тоже казни можно устраивать. Причём, уже давно...

Ну-ка, поясни :don-t_mention: Если ты говоришь о нуль-символе, то давно ли ты встречал сервера, где игрокам устанавливаются какие-либо подписи к никам (AFK и т.п.)? Ну чтоб длина была именно 24 символа ровно. Я вот уже как года два таких серверов не видел. Да и даже если подобное у автора есть, максимум, что может случится, это последний символ в нике потеряется и всё. Короч, не актуально это сейчас, имхо :с
Но код я подправлю. Доля правды в твоих словах есть, если ты вообще об этом

L0ndl3m
23.01.2016, 22:39
Ну-ка, поясни :don-t_mention: Если ты говоришь о нуль-символе
Именно о нём. Всё же, остались такие сервера, где приписывают префикс к никнеймам. И этих серверов довольно-таки не мало.

Иван Бубнов
23.01.2016, 23:01
http://i.imgur.com/Tlm46a8.png

Close