#include #include #include #include #define PLUGIN "Mario Oyunu" #define VERSION "1.0" #define AUTHOR "Swezy" new const serverTAG[] = "RholTClan"; // Natives native Hard_KomutAc(); native Hard_KomutKapat(); native CHard_KomutAc(); native CHard_KomutKapat(); new bool:marioOyunuKontrol; new bool:g_bOtoKomutlaBaslatildi; new semiclip; new g_iKalanKisiSayisi = 1; // Kaç kişi kalınca oyun bitsin new g_iGravityDegeri = 400; // Seçilen gravity değeri (400, 500, 600, 800) new g_iHavaDegeri = 0; // 0=Normal, 1=Karanlık, 2=Tam Karanlık new g_iGlowDegeri[MAX_CLIENTS+1]; // 0=Yok, 1=Yeşil, 2=Kırmızı, 3=Mor, 4=Mavi public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /mario", "marioKomut"); register_clcmd("say_team /mario", "marioKomut"); register_srvcmd("mario_oyunu_otomatik_baslat", "cmdMarioOtomatikBaslat"); register_srvcmd("mario_oyunu_otomatik_bitir", "cmdMarioOtomatikBitir"); register_touch("player", "player", "touch_player"); RegisterHookChain(RG_CSGameRules_RestartRound, "OnRestartRound", .post = true); RegisterHookChain(RG_CBasePlayer_Killed, "OnPlayerKilled", .post = true); semiclip = get_cvar_pointer("semiclip"); } public plugin_natives() { register_native("mario_oyunu_baslat", "native_mario_baslat", 1); register_native("mario_oyunu_bitir", "native_mario_bitir", 1); register_native("mario_oyunu_aktif", "native_mario_aktif", 1); } public native_mario_baslat(id) { marioOyunuBaslat(id, false); } public native_mario_bitir() { marioOyunuBitir(); } public bool:native_mario_aktif() { return marioOyunuKontrol; } public marioKomut(id) { if(get_member(id, m_iTeam) != TEAM_CT) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Bu komutu sadece ^1gardiyanlar^4 kullanabilir!", serverTAG); return PLUGIN_HANDLED; } if(!is_user_alive(id)) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Bu komutu kullanmak icin ^1canli^4 olmaniz gerekir!", serverTAG); return PLUGIN_HANDLED; } marioMenu(id); return PLUGIN_HANDLED; } public marioMenu(id) { new ndmenu[128]; formatex(ndmenu, charsmax(ndmenu), "\r[RholTClan] \wMario Oyunu^n\dIc ice gecme kapali! Ustune cikan kazanir!"); new Menu = menu_create(ndmenu, "marioMenuHandler"); if(marioOyunuKontrol) { new players[MAX_PLAYERS], num; get_players(players, num, "ae", "TERRORIST"); menu_additem(Menu, fmt("\yOyunu Erken Bitir \r[%d Mahkum Kaldi]", num), "2"); menu_additem(Menu, "\dOyunu Baslat \r[AKTIF]", "1"); } else { menu_additem(Menu, "\yOyunu Baslat", "1"); menu_additem(Menu, "\dOyunu Erken Bitir \r[KAPALI]", "2"); } menu_additem(Menu, fmt("\yKac Kisi Kalinca Bitsin: \r%d", g_iKalanKisiSayisi), "3"); menu_additem(Menu, fmt("\yGravity Secimi: \r%d", g_iGravityDegeri), "4"); // Hava ayarları new havaText[64]; switch(g_iHavaDegeri) { case 0: formatex(havaText, charsmax(havaText), "\yHava Ayari: \rNormal"); case 1: formatex(havaText, charsmax(havaText), "\yHava Ayari: \rKaranlik"); case 2: formatex(havaText, charsmax(havaText), "\yHava Ayari: \rTam Karanlik"); default: formatex(havaText, charsmax(havaText), "\yHava Ayari: \rNormal"); } menu_additem(Menu, havaText, "5"); // Glow ayarları menu_additem(Menu, "\yGlow Ayarla \r[T Oyuncularina]", "6"); menu_additem(Menu, "\wGeri", "0"); menu_setprop(Menu, MPROP_EXITNAME, "\wCikis"); menu_display(id, Menu); } public marioMenuHandler(id, menu, item) { if(item == MENU_EXIT || get_member(id, m_iTeam) != TEAM_CT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], key; menu_item_getinfo(menu, item, _, data, charsmax(data)); key = str_to_num(data); switch(key) { case 0: { // Geri - ctmenu'ye dön client_cmd(id, "say /ctmenu"); } case 1: { // Oyunu başlat if(marioOyunuKontrol) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Oyun zaten aktif!", serverTAG); marioMenu(id); } else { marioOyunuBaslat(id, false); } } case 2: { // Oyunu erken bitir if(marioOyunuKontrol) { marioOyunuBitir(); client_print_color(0, id, "^1[^3%s^1]^4 %n ^1Mario Oyunu^4'nu erken bitirdi!", serverTAG, id); } else { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Oyun aktif degil!", serverTAG); marioMenu(id); } } case 3: { // Kaç kişi kalınca bitsin g_iKalanKisiSayisi++; if(g_iKalanKisiSayisi > 10) { g_iKalanKisiSayisi = 1; } marioMenu(id); } case 4: { // Gravity seçimi: 400 -> 500 -> 600 -> 800 -> 400 switch(g_iGravityDegeri) { case 400: g_iGravityDegeri = 500; case 500: g_iGravityDegeri = 600; case 600: g_iGravityDegeri = 800; case 800: g_iGravityDegeri = 400; default: g_iGravityDegeri = 500; } marioMenu(id); } case 5: { // Hava ayarı: Normal -> Karanlık -> Tam Karanlık -> Normal g_iHavaDegeri++; if(g_iHavaDegeri > 2) { g_iHavaDegeri = 0; } // Hava ayarını uygula switch(g_iHavaDegeri) { case 0: { set_lights("m"); // Normal (gündüz) client_print_color(0, id, "^1[^3%s^1]^4 %n ^1havayi normal^4 yapti!", serverTAG, id); } case 1: { set_lights("d"); // Karanlık (akşam) client_print_color(0, id, "^1[^3%s^1]^4 %n ^1havayi karanlik^4 yapti!", serverTAG, id); } case 2: { set_lights("a"); // Tam karanlık client_print_color(0, id, "^1[^3%s^1]^4 %n ^1havayi tam karanlik^4 yapti!", serverTAG, id); } } marioMenu(id); } case 6: { // Tüm T takımına glow renk seçim menüsü glowRenkSecMenu(id); } } menu_destroy(menu); return PLUGIN_HANDLED; } public glowRenkSecMenu(id) { new ndmenu[128]; formatex(ndmenu, charsmax(ndmenu), "\r[RholTClan] \wGlow Renk Sec^n\dTum T takimina uygulanacak!"); new Menu = menu_create(ndmenu, "glowRenkSecHandler"); menu_additem(Menu, "\wGlow Kaldir", "0"); menu_additem(Menu, "\yYesil Glow", "1"); menu_additem(Menu, "\rKirmizi Glow", "2"); menu_additem(Menu, "\mMor Glow", "3"); menu_additem(Menu, "\bMavi Glow", "4"); menu_additem(Menu, "\wGeri", "9"); menu_setprop(Menu, MPROP_EXITNAME, "\wCikis"); menu_display(id, Menu); } public glowRenkSecHandler(id, menu, item) { if(item == MENU_EXIT || get_member(id, m_iTeam) != TEAM_CT) { menu_destroy(menu); if(item != MENU_EXIT) { marioMenu(id); } return PLUGIN_HANDLED; } new data[3]; menu_item_getinfo(menu, item, _, data, charsmax(data)); new glowRenk = str_to_num(data); // Tüm T oyuncularını al new players[MAX_PLAYERS], num; get_players(players, num, "ae", "TERRORIST"); if(num == 0) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Canli mahkum bulunamadi!", serverTAG); menu_destroy(menu); marioMenu(id); return PLUGIN_HANDLED; } // Tüm T oyuncularına glow uygula switch(glowRenk) { case 0: { // Glow yok - tüm T oyuncularından kaldır for(new i = 0; i < num; i++) { new target = players[i]; g_iGlowDegeri[target] = 0; glowla(target, 0, 0, 0); } client_print_color(0, id, "^1[^3%s^1]^4 %n ^1tum T takiminin glow'unu kaldirdi!", serverTAG, id); } case 1: { // Yeşil - tüm T oyuncularına ver for(new i = 0; i < num; i++) { new target = players[i]; g_iGlowDegeri[target] = 1; glowla(target, 0, 255, 0); } client_print_color(0, id, "^1[^3%s^1]^4 %n ^1tum T takimina ^1yesil glow^4 verdi!", serverTAG, id); } case 2: { // Kırmızı - tüm T oyuncularına ver for(new i = 0; i < num; i++) { new target = players[i]; g_iGlowDegeri[target] = 2; glowla(target, 255, 0, 0); } client_print_color(0, id, "^1[^3%s^1]^4 %n ^1tum T takimina ^1kirmizi glow^4 verdi!", serverTAG, id); } case 3: { // Mor - tüm T oyuncularına ver for(new i = 0; i < num; i++) { new target = players[i]; g_iGlowDegeri[target] = 3; glowla(target, 128, 0, 128); } client_print_color(0, id, "^1[^3%s^1]^4 %n ^1tum T takimina ^1mor glow^4 verdi!", serverTAG, id); } case 4: { // Mavi - tüm T oyuncularına ver for(new i = 0; i < num; i++) { new target = players[i]; g_iGlowDegeri[target] = 4; glowla(target, 0, 0, 255); } client_print_color(0, id, "^1[^3%s^1]^4 %n ^1tum T takimina ^1mavi glow^4 verdi!", serverTAG, id); } case 9: { // Geri butonu menu_destroy(menu); marioMenu(id); return PLUGIN_HANDLED; } default: { menu_destroy(menu); marioMenu(id); return PLUGIN_HANDLED; } } menu_destroy(menu); glowRenkSecMenu(id); return PLUGIN_HANDLED; } public cmdMarioOtomatikBaslat() { g_iKalanKisiSayisi = 1; marioOyunuBaslat(0, true); g_bOtoKomutlaBaslatildi = marioOyunuKontrol; return PLUGIN_HANDLED; } public cmdMarioOtomatikBitir() { marioOyunuBitir(); return PLUGIN_HANDLED; } public marioOyunuBaslat(id, bool:otomatik) { if(marioOyunuKontrol) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Mario Oyunu zaten aktif!", serverTAG); return; } new players[MAX_PLAYERS], num; get_players(players, num, "ae", "TERRORIST"); if(num < 2) { client_print_color(id, print_team_blue, "^1[^3%s^1]^4 Mario Oyunu icin en az ^1 2 mahkum^4 gereklidir!", serverTAG); return; } // Semiclip kapat server_cmd("amx_cvar semiclip 0"); // BH enabled kapat server_cmd("amx_cvar bh_enabled 0"); // Gravity ayarla (menüden seçilen değer) server_cmd("sv_gravity %d", g_iGravityDegeri); // Hard komut aç (bunny falan kapansın) Hard_KomutAc(); CHard_KomutAc(); marioOyunuKontrol = true; if(otomatik) { client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Oto Komut Mario Oyununu baslatti! Tek kisi kalinca oyun bitecek.", serverTAG); } else { client_print_color(0, id, "^1[^3%s^1]^4 %n ^1Mario Oyunu^4 baslatti!", serverTAG, id); } client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Birbirinizin ustune cikin, alttaki olecek!", serverTAG); client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Gravity: ^1%d^4 | Oyun ^1%d kisi^4 kalinca bitecek!", serverTAG, g_iGravityDegeri, g_iKalanKisiSayisi); } public marioOyunuBitir() { if(!marioOyunuKontrol) { return; } marioOyunuKontrol = false; g_bOtoKomutlaBaslatildi = false; // Semiclip aç if(semiclip) { set_pcvar_num(semiclip, 1); } // Gravity eski haline döndür server_cmd("sv_gravity 800"); // Hard komut kapat Hard_KomutKapat(); CHard_KomutKapat(); // Işığı normale döndür set_lights("m"); g_iHavaDegeri = 0; // Tüm oyuncuların glow'unu sıfırla new players[MAX_PLAYERS], num; get_players(players, num, "a"); for(new i = 0; i < num; i++) { if(g_iGlowDegeri[players[i]] != 0) { glowla(players[i], 0, 0, 0); g_iGlowDegeri[players[i]] = 0; } } client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Mario Oyunu bitti!", serverTAG); } kill(killer, victim, weapon[]) { user_silentkill(victim); new DeathMsg = get_user_msgid("DeathMsg"); message_begin(MSG_ALL, DeathMsg, {0,0,0}, 0); write_byte(killer); write_byte(victim); write_byte(0); write_string(weapon); message_end(); } public touch_player(ent, id) { // Mario Oyunu - Sadece T takımındaki oyuncular birbirinin üstüne çıkınca alttaki ölür if(marioOyunuKontrol && is_user_alive(ent) && is_user_alive(id) && ent != id) { // Sadece T takımındaki oyuncular için geçerli if(get_member(ent, m_iTeam) != TEAM_TERRORIST || get_member(id, m_iTeam) != TEAM_TERRORIST) { return; // CT'ler etkilenmez } new Float:origin1[3], Float:origin2[3]; get_entvar(ent, var_origin, origin1); get_entvar(id, var_origin, origin2); // Yatay mesafe kontrolü - sadece tam kafasına çıkınca ölsün (çok sıkı kontrol) new Float:horizontal_dist = floatsqroot(floatpower(origin1[0] - origin2[0], 2.0) + floatpower(origin1[1] - origin2[1], 2.0)); if(horizontal_dist > 30.0) { return; // Yatay olarak çok uzaktalar, işlem yapma } // Üstteki oyuncu alttakinden en az 40 birim yukarıdaysa ve tam kafasına çıkmışsa alttaki ölür if(origin1[2] > origin2[2] + 40.0) { // ent üstte, id altta - tam kafasına çıkmış // İsimleri önce al (kill'den önce) new name1[32], name2[32]; get_user_name(ent, name1, 31); get_user_name(id, name2, 31); kill(ent, id, "knife"); // İsimleri kullan, %n formatını kullanma (victim artık geçersiz olabilir) client_print_color(0, print_team_blue, "^1[^3%s^1]^4 %s ^1%s^4'nin kafasina cikti! ^3%s^4 oldu!", serverTAG, name1, name2, name2); } else if(origin2[2] > origin1[2] + 40.0) { // id üstte, ent altta - tam kafasına çıkmış // İsimleri önce al (kill'den önce) new name1[32], name2[32]; get_user_name(id, name1, 31); get_user_name(ent, name2, 31); kill(id, ent, "knife"); // İsimleri kullan, %n formatını kullanma (victim artık geçersiz olabilir) client_print_color(0, print_team_blue, "^1[^3%s^1]^4 %s ^1%s^4'nin kafasina cikti! ^3%s^4 oldu!", serverTAG, name1, name2, name2); } } } public OnRestartRound() { if(marioOyunuKontrol) { // Round başladığında hard komut kapat Hard_KomutKapat(); CHard_KomutKapat(); marioOyunuBitir(); } } public OnPlayerKilled(victim, attacker) { if(!marioOyunuKontrol) { return; } // Sadece T'ler öldüğünde kontrol et if(get_member(victim, m_iTeam) != TEAM_TERRORIST) { return; } // Kaç T kaldı kontrol et new players[MAX_PLAYERS], num; get_players(players, num, "ae", "TERRORIST"); if(num <= g_iKalanKisiSayisi) { new bool:otoKomutOyunu = g_bOtoKomutlaBaslatildi; // Belirlenen kişi sayısına ulaşıldı, oyunu bitir marioOyunuBitir(); if(num > 0) { new name[32]; get_user_name(players[0], name, 31); client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Mario Oyunu bitti! ^3%s^4 kazandi!", serverTAG, name); if(otoKomutOyunu) server_cmd("otokomut_mario_bitti %d", players[0]); } else { client_print_color(0, print_team_blue, "^1[^3%s^1]^4 Mario Oyunu bitti! ^1Hic kimse kalmadi!", serverTAG); if(otoKomutOyunu) server_cmd("otokomut_mario_bitti 0"); } } } // Glow fonksiyonu glowla(const id, const bir=0, const iki=0, const uc=0) { new Float:RenderColor[3]; RenderColor[0]=float(bir); RenderColor[1]=float(iki); RenderColor[2]=float(uc); set_entvar(id, var_renderfx, kRenderFxGlowShell); set_entvar(id, var_rendercolor, RenderColor); set_entvar(id, var_rendermode, kRenderNormal); set_entvar(id, var_renderamt, 30.0); }