#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <nvault>
new const SERVERISMI[] = "CAKAL [T]R";
new const defaultMap[] = "ze_jurassicpark4";
// 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 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];
const manualOylama_Yetkisi = ADMIN_IMMUNITY;
new Float: tutucu
new control = 0,mapdegissin=0
#define kac_dakika_kala 4 * 60
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", "0"), 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", "99999"), g_Cvars[1]); // 99999 yaparak bu yontemi devre disi biraktik.
// Gun Kacta Map Oylamasi Yapilsin ?
// Gece Map degisikligi olmazsa bu cvardan 1 gun sonra restart atilir!
bind_pcvar_num(create_cvar("map_kisiSiniri", "1"), g_Cvars[2]);
// Oyuncu sayisi bu sayinin altindaysa otomatik 'defaultMap' acilir.
// 0 yaparsaniz bu ozellik kapanir!
get_mapname(map, charsmax(map));
set_task(0.9,"kontrol",1,_,_,"b");
tutucu = get_cvar_float("mp_timelimit") * 60
register_clcmd("say /dene","asd")
control = 0
mapdegissin = 0
register_logevent("eRoundEnd",2,"1=Round_End");
}
public eRoundEnd(){
if(is_map_valid(sonuc) && mapdegissin == 1)
server_cmd("changelevel %s", sonuc);
}
public asd(){
renkli_yazi(0,"!gSu kadar saniye sonra baslar: %f",(tutucu - kac_dakika_kala))
renkli_yazi(0,"!gTutucu:: %f",tutucu )
}
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))
server_cmd("changelevel %s", defaultMap);
} else if(days > g_Cvars[1])
set_cvar_num("sv_restartround", 5);
}
public kontrol(){
if( control== 1) return
else if((tutucu - kac_dakika_kala) > (0 + kac_dakika_kala) ) {
tutucu--;
}
else if((tutucu - kac_dakika_kala) == 0 ) {
control=1;
mapsec()
}
return;
}
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);
}
client_print_color(0, print_team_grey, "^1[^3%s^1]^4 Map oylamasi basladi.^3 15 saniye^4 sonra oylama bitecektir!", SERVERISMI);
}
public oylamamenu(id) {
id=id-1340;
if(oylamasure>0 && is_user_connected(id)) {
new ndmenu[128], nums[4];
formatex(ndmenu, charsmax(ndmenu),"\y%s \r• \wMap 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, "^n\r• \yOylamada 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]);
}
}
mapdegissin = 1
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);
}
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_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 );
stock renkli_yazi(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!n", "^x01");
replace_all(msg, 190, "!g", "^x04");
replace_all(msg, 190, "!t", "^x03");
if (id) players[0] = id; else get_players(players, count, "ch");{
for (new i = 0; i < count; i++) {
if (is_user_connected(players[i])){
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}