#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <nvault>
new const SERVERISMI[] = "KaoS Gaming";
new const defaultMap[] = "de_dust2";
// Gece 00:00 'dan "map_saatkactaBaslasin" cvarinda ayarladiginiz saate kadar bu map acik kalir !
// Ayrica 'map_kisiSiniri' cvarini 0 dan farkli girdiyseniz, oyuncu sayisi degerin altinda kalirsa bu map acilir!
new const ctmenu_koruma[] = "ctmenum/oylama.wav";
new const file[] = "addons/amxmodx/configs/maps.ini"; // maps.ini 'de en az 7 tane map yazili olmasi gerekir !!!
enum _: g_Data { MapNum, Mapisim[32], Oylamanum };
new maplar[4][g_Data], bool:oylamakontrol[MAX_CLIENTS+1], sonuc[32], oylamasure, map[32], Dosya, g_Cvars[3], iSyncObj;
const manualOylama_Yetkisi = ADMIN_RCON;
public plugin_init() {
register_plugin("Jailbreak Map Oylama Sistemi", "v1.0", "n.dgn");
register_clcmd("say /mapoyla", "mapseckontrol"); // Manual Oylama
RegisterHookChain(RG_CSGameRules_RestartRound, "restartRound", true);
bind_pcvar_num(create_cvar("map_saatkactaBaslasin", "12"), g_Cvars[0]);
// Saat kactan - 00:00 'a kadar map oylama sistemi aktif olsun?
// 0 Yaparsaniz map oylama sistemi surekli aktif olur !
// [default : 12] > Sabah 12 - Aksam 12
bind_pcvar_num(create_cvar("map_gunRestart", "25"), g_Cvars[1]);
// Gun Kacta Map Oylamasi Yapilsin ?
// Gece Map degisikligi olmazsa bu cvardan 1 gun sonra restart atilir!
bind_pcvar_num(create_cvar("map_kisiSiniri", "25"), g_Cvars[2]);
// Oyuncu sayisi bu sayinin altindaysa otomatik 'defaultMap' acilir.
// 0 yaparsaniz bu ozellik kapanir!
get_mapname(map, charsmax(map));
iSyncObj = CreateHudSyncObj();
}
public restartRound() {
new days = get_member_game(m_iNumCTWins) + get_member_game(m_iNumTerroristWins) + 1;
if(days == g_Cvars[1]) {
new saat[4];
get_time("%H", saat, charsmax(saat));
if(str_to_num(saat) >= g_Cvars[0] && get_playersnum() >= g_Cvars[2]) {
set_task(5.0, "mapsec");
}
else if(!equal(map, defaultMap)) {
new iMvp = GetMvpPlayer();
freezeAll();
set_task(5.0, "ChangeToDefault");
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Oyuncu sayisi az oldugu icin %s mapi aciliyor!", SERVERISMI, defaultMap);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Mvp oyuncu: %s!", SERVERISMI, iMvp);
set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.20, 0, 0.0, 10.0);
ShowSyncHudMsg(0, iSyncObj, "Oyuncu sayisi az oldugu icin %s mapi aciliyor!", defaultMap);
}
} else if(days > g_Cvars[1]) {
rg_swap_all_players();
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Takimlar yer degisti ve restart atiliyor!", SERVERISMI);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Takimlar yer degisti ve restart atiliyor!", SERVERISMI);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Takimlar yer degisti ve restart atiliyor!", SERVERISMI);
set_cvar_num("sv_restartround", 5);
}
}
public GetMvpPlayer() {
new Players[32], iNum;
get_players(Players, iNum, "ch");
SortCustom1D(Players, iNum, "ListPlayers");
return Players[0];
}
/* scuro */
public ListPlayers(iPlayer1, iPlayer2) {
new Player1Frag = get_user_frags(iPlayer1);
new Player2Frag = get_user_frags(iPlayer2);
new Player1Death = get_user_deaths(iPlayer1);
new Player2Death = get_user_deaths(iPlayer2);
if(Player1Frag > Player2Frag) {
return -1;
}
else if(Player1Frag == Player2Frag) {
if(Player1Death > Player2Death) {
return 1;
}
else if(Player1Death == Player2Death) {
return 0;
}
else {
return -1;
}
}
else {
return 1;
}
}
public freezeAll() {
for(new i = 1; i <= MaxClients; i++) {
if(is_user_connected(i) && is_user_alive(i)) {
set_entvar(i, var_flags, get_entvar(i, var_flags) | FL_FROZEN);
}
}
}
public ChangeToDefault() {
server_cmd("changelevel %s", defaultMap);
}
public mapseckontrol(id) {
if(get_user_flags(id) & manualOylama_Yetkisi)
mapsec();
return PLUGIN_HANDLED;
}
public mapsec() {
new maxlines = file_size(file, 1);
if(maxlines > 6) {
new onceki1[32], onceki2[32], i=0;
nvault_get( Dosya , "2OncekiHarita" , onceki1 , charsmax(onceki1) );
nvault_get( Dosya , "1OncekiHarita" , onceki2 , charsmax(onceki2) );
while(i<4) {
maplar[i][MapNum] = random_num(0, maxlines);
switch(i) {
case 1 : if(maplar[i-1][MapNum] == maplar[i][MapNum]) continue;
case 2 : if(maplar[i-1][MapNum] == maplar[i][MapNum] || maplar[i-2][MapNum] == maplar[i][MapNum]) continue;
case 3 : if(maplar[i-1][MapNum] == maplar[i][MapNum] || maplar[i-2][MapNum] == maplar[i][MapNum] || maplar[i-3][MapNum] == maplar[i][MapNum]) continue;
}
read_file(file, maplar[i][MapNum], maplar[i][Mapisim], 31);
if( contain(maplar[i][Mapisim], ";") == -1 && strlen(maplar[i][Mapisim]) > 1 &&
!equal(maplar[i][Mapisim], map) &&
!equal(maplar[i][Mapisim], onceki1) &&
!equal(maplar[i][Mapisim], onceki2) ) {
i++;
}
}
oylama();
}
}
public oylama() {
new players[MAX_PLAYERS], num, ids, i;
get_players_ex(players, num, GetPlayers_ExcludeBots);
for(i=0; i<4; i++)
maplar[i][Oylamanum]=0;
oylamasure=15;
remove_task(1340);
set_task_ex(1.0, "eksilt", 1340, .flags = SetTask_Repeat);
set_task(15.5, "oylamabitir", 1340);
for(i=0; i<num; i++) {
ids=players[i];
oylamakontrol[ids]=false;
remove_task(ids+1340);
oylamamenu(ids+1340);
set_task_ex(1.0, "oylamamenu", ids+1340, .flags = SetTask_Repeat);
}
freezeAll();
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Map oylamasi basladi.^3 15 saniye^4 sonra oylama bitecektir!", SERVERISMI);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Map oylamasi basladi.^3 15 saniye^4 sonra oylama bitecektir!", SERVERISMI);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Map oylamasi basladi.^3 15 saniye^4 sonra oylama bitecektir!", SERVERISMI);
set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.20, 0, 0.0, 10.0);
ShowSyncHudMsg(0, iSyncObj, "Map oylamasi basladi. 15 saniye sonra oylama bitecektir!");
client_cmd(0, "stopsound"), set_task(0.1, "caldir");
}
public caldir()
rg_send_audio(0, ctmenu_koruma);
public oylamamenu(id) {
id=id-1340;
if(oylamasure>0 && is_user_connected(id)) {
new ndmenu[128], nums[4];
formatex(ndmenu, charsmax(ndmenu),"\w%s \d|| \yMap Oylamasi^n\dOylamanin bitmesine son \r%d saniye\d kaldi!", SERVERISMI, oylamasure);
new Menu = menu_create(ndmenu, "korumaoylamamenu2");
for(new i=0; i<4; i++) {
formatex(ndmenu, charsmax(ndmenu), "%s%s \r[ \w%d Oy\r ]",oylamakontrol[id] ? "\d":"\y", maplar[i][Mapisim], maplar[i][Oylamanum]);
if(oylamakontrol[id])
menu_additem(Menu, ndmenu, "5");
else {
num_to_str(i+1, nums, charsmax(nums));
menu_additem(Menu, ndmenu, nums);
}
}
menu_addtext(Menu, "\y^nOylamada Esitlik Olursa Rastgele secilir!");
menu_setprop(Menu, MPROP_EXITNAME, "\wCikis");
menu_display(id, Menu);
} else remove_task(id+1340), show_menu(id, 0, "");
}
public korumaoylamamenu2(id, menu, item) {
if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
new data[6], key;
menu_item_getinfo(menu, item, _, data, charsmax(data));
key = str_to_num(data);
if(key != 5) {
maplar[key-1][Oylamanum]++;
oylamakontrol[id]=true;
} else
client_print_color(id, id, "^1[^3%s^1]^4 Siz oy verdiniz!", SERVERISMI);
oylamamenu(id+1340);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public oylamabitir() {
remove_task(1340);
new max=maplar[0][Oylamanum];
formatex(sonuc, charsmax(sonuc), "%s", maplar[0][Mapisim]);
for(new i=1; i<4; i++) {
if((maplar[i][Oylamanum] > max) || (maplar[i][Oylamanum] == max && random_num(1, 2) == 1)) {
max = maplar[i][Oylamanum];
formatex(sonuc, charsmax(sonuc), "%s", maplar[i][Mapisim]);
}
}
set_task(4.0, "mapdegis");
new iMvp = GetMvpPlayer();
for(new i=0; i<5; i++)
client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Oylamada ^3[^1%s^3]^4 Kazandi! ^1Harita degistiriliyor^3...", SERVERISMI, sonuc);
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Mvp oyuncu: %s!", SERVERISMI, iMvp);
}
public mapdegis() {
if(is_map_valid(sonuc))
server_cmd("changelevel %s", sonuc);
else {
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Map yuklu degil. ^1Oylama tekrar ^3yapiliyor^4...", SERVERISMI);
set_task(5.0, "mapsec");
}
}
public eksilt()
oylamasure--;
public plugin_precache()
precache_sound(ctmenu_koruma);
public plugin_cfg() {
Dosya = nvault_open("gecmismaplar");
if(Dosya == INVALID_HANDLE)
set_fail_state( "Vault Dosyasi Acilamadi !" );
else {
new onceki1[32], onceki2[32];
nvault_get( Dosya , "SuanHarita" , onceki1 , charsmax(onceki1) );
nvault_get( Dosya , "1OncekiHarita" , onceki2 , charsmax(onceki2) );
nvault_set( Dosya , "1OncekiHarita" , onceki1 );
nvault_set( Dosya , "2OncekiHarita" , onceki2 );
nvault_set( Dosya , "SuanHarita" , map );
}
}
public plugin_end()
nvault_close( Dosya );