/*
Changelog:
1.0 - pierwsze wydanie pluginu.
1.1 - poprawione zaliczanie punktu za wybuch C4
1.2 - dodana opcja zamiany druzyn
1.3 - dodanie rozgrzewki (pierwsza runda)
1.4 - lekkie bugfixy
1.5 - dodanie najlepszego gracza
1.6 - poprawione bledy
http://amxx-dev.plrr_limit - ilość granych rund
rr_change 0/1 - zamiana druzyn po ukończeniu rund
rr_restart 0/1 - czy 1 runda to rozgrzewka
rr_plainfo 0/1 - czy pokazywac info o najlepszym graczu
*/
#include
#include
new tt, ct, plimit, pchange, prestart, pinforma;
new SayText, SyncHudObj;
new tag[] = "!t[
DD2 ]";
public plugin_init() {
register_plugin("
DD2", "1.5", "byQQ");
register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0");
register_message(get_user_msgid("TextMsg"), "message_TextMsg");
plimit = register_cvar("rr_limit", "20");
pchange = register_cvar("rr_change", "1");
prestart = register_cvar("rr_restart", "1");
pinforma = register_cvar("rr_plainfo", "1");
SyncHudObj = CreateHudSyncObj();
SayText = get_user_msgid("SayText");
if(get_pcvar_num(prestart))
WymusRes(60);
}
public WymusRes(czas) {
new param[1]; param[0] = czas;
set_task(1.0, "WyswietlRes", _, param, 1);
}
public event_RoundStart() {
new limit = get_pcvar_num(plimit);
new sumka = ct+tt;
new pozos = limit - (ct+tt);
if(sumka >= limit) {
if(ct == tt) {
msg(0, "%s!g Mamy remis, runda rozstrzygajaca", tag);
return;
}
if(get_pcvar_num(pchange)) ZamianaTeam();
set_cvar_num("sv_restart", 3);
set_cvar_num("amx_reloadadmins", 1);
if(tt > ct) msg(0, "%s!g Wygrali Terrorysci %d/%d", tag, tt, ct);
else msg(0, "%s!g Wygrali Anty Terrorysci %d/%d", tag, ct, tt);
if(get_pcvar_num(prestart)) WymusRes(50);
ct = tt = 0;
} else {
msg(0, "%s!g Restart mapy za %d rund%s", tag, pozos, (pozos == 1) ? "e" : (pozos < 5) ? "y" : "");
if(get_pcvar_num(pinforma)) ZwrocNajlepszego();
}
}
public message_TextMsg(const MsgId, const MsgDest, const MsgEntity) {
static message[32]; get_msg_arg_string(2, message, charsmax(message));
if(equal(message, "#Game_will_restart_in")) { Wyzeruj(); }
else if(equal(message, "#Terrorists_Win") || equal(message, "#Target_Bombed")) { tt++; }
else if(equal(message, "#CTs_Win")) { ct++; }
}
public ZamianaTeam() {
new players[32], num;
get_players(players, num);
for(new i = 0; i < num; i++) {
cs_set_user_team(players[i], cs_get_user_team(players[i]) == CS_TEAM_CT ? CS_TEAM_T : CS_TEAM_CT);
}
msg(0, "%s!g Zamieniam druzyny!", tag);
}
public Wyzeruj() ct = tt = 0;
public ZwrocNajlepszego() {
new players[32], num;
get_players(players, num);
new fragi, dedy, top[4];
for(new i = 0; i < num; i++) {
new id = players[i];
if(!is_user_connected(id) || is_user_hltv(id)) continue;
fragi = get_user_frags(id);
dedy = get_user_deaths(id);
new suma = fragi*2 - dedy;
if(suma > top[3]) {
top[0] = fragi; // Fragi najlepszego
top[1] = dedy; // Dedy najlepszego
top[2] = id; // ID najlepszego
top[3] = top[0]*2 - top[1]; // Bilans do dalszego porownania
}
}
if(!top[2]) return;
new name[33]; get_user_name(top[2], name, 32);
msg(0, "%s!g Najlpeszym graczem jest !t%s (%d/%d)", tag, name, top[0], top[1]);
}
public WyswietlRes(param[])
{
set_hudmessage(0, 255, 0, 0.65, 0.75, 0, 0.0, 1.0, 0.0, 0.0);
ShowSyncHudMsg(0, SyncHudObj, "=== Rozgrzewka ===^n[Pozostaly czas: %d]", param[0]);
param[0]--;
if(param[0] >= 0) { set_task(1.0, "WyswietlRes", _, param, 1); }
else {
set_cvar_num("sv_restartround", 1);
Wyzeruj();
}
}
stock msg(const id, const string[], {Float, Sql, Resul,_}:...) {
new msgs[191], players[32], count = 1;
vformat(msgs, sizeof msgs - 1, string, 3);
replace_all(msgs,190,"!g","^4");
replace_all(msgs,190,"!y","^1");
replace_all(msgs,190,"!t","^3");
if(id) players[0] = id;
else get_players(players,count,"ch");
new index;
for (new i = 0 ; i < count ; i++)
{
index = players[i];
message_begin(MSG_ONE_UNRELIABLE, SayText, _, index);
write_byte(index);
write_string(msgs);
message_end();
}
}