Spoiler
/* 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.pl rr_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 <amxmodx> #include <cstrike> new tt, ct, plimit, pchange, prestart, pinforma; new SayText, SyncHudObj; new tag[] = "!g[Manager]"; public plugin_init() { register_plugin("DD2", "1.6", "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!y Wygrali Terrorysci !g%d !y/ !g%d", tag, tt, ct); else msg(0, "%s!y Wygrali Anty Terrorysci !g%d !y/ !g%d", tag, ct, tt); if(get_pcvar_num(prestart)) WymusRes(50); ct = tt = 0; } else { msg(0, "%s!y Restart mapy za !g%d !yrund%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!y 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!y Najlepszym graczem jest !g%s (%d !y/ !g%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(); } }
Plugin przerzuca przy zmianie HLTV do CT. Niby dodałem ifa, ale nie działało, więc usunąłem.