Little Help to FIX My Mod
So i started Writing a mod yesterday, and im good-going, only problem is i have several bugs :S
PHP Code:
/* Item Shop: 0% Hero Shop: 40% Odabir Heroja: 60% Imena Heroja: 0% Talent Points & Talent System: 60% Honor Points & Honor System: 0% Leveling: 70% Respawn: 0% [|||\\\\\\\] */
#include <amxmodx> #include <fun> #include <hamsandwich> #include <nvault>
#define PLUGIN "Multi Hero Mod" #define VERSION "0.3" #define AUTHOR "MiloS -.-"
enum { Nema = 0, hero_Garex, hero_Zero_Beam, hero_OvidiuS, hero_Nocturne }
new const imena_heroja[][] = { "Nema", "Garex", "Zero-Beam", "OvidiuS", "Nocturne" }
new const shop_imena_heroja[][] = { "Nema", "\yOvidiuS \r[\wCena: \d13645 \wHonor Poena\r]", "\yNocturne \r[\wCena: \d17555 \wHonor Poena\r]" }
new const iskustvo_levelu[] = { 70, 280, 630, 1120, 1750, 2520, 3430, 4480, 5670, 7000, 8470, 10080, 11830, 13720, 15750, 17920, 20230, 22680, 25270, 28000, 30870, 33880, 37030, 40320, 43750, 47320, 51030, 54880, 58870, 63000, 67270, 71680, 76230, 80920, 85750, 90720, 95830, 101080, 106470, 112000, 117670, 123480, 129430, 135520, 141750, 148120, 154630, 161280, 168070, 175000 }
new honor_poeni_igraca[33] new talent_poeni_igraca[33] new personal_level_igraca[33] new personal_iskustvo_igraca[33] new iskustvo_igraca[33] new level_igraca[33] new heroj_igraca[33]
new talent_prosireni_um[33] new talent_inteligentni_napad[33] new talent_dobrodusni_duh[33]
new bool:OvidiuS[33] = false new bool:Nocturne[33] = false
new g_Vault
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) g_Vault = nvault_open("MultiHero") register_clcmd("say /heroj", "cmdChooseHero") register_clcmd("say /shop", "cmdShop") register_clcmd("say /stats", "cmdStats") register_clcmd("say /talents", "cmdTalents") RegisterHam(Ham_Killed, "player", "Death", 1) RegisterHam(Ham_Spawn, "player", "Spawn", 1) }
public client_putinserver(id) { set_task(0.1, "ShowStats", id + 100) }
public cmdChooseHero(id) { new cb = menu_makecallback("ChooseHero_CallBack") new menu = menu_create("\rIzaberi Heroja", "ChooseHero_Handle") for(new i = 1; i < sizeof imena_heroja; i++) { menu_additem(menu, imena_heroja[i], _, _, cb) } menu_display(id, menu) } public ChooseHero_CallBack(id, menu, item) { if(!OvidiuS[id] && item == 2 || !Nocturne[id] && item == 3) { return ITEM_DISABLED } else { return ITEM_ENABLED } return PLUGIN_CONTINUE } public ChooseHero_Handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } heroj_igraca[id] = item + 1 Spawn(id) return PLUGIN_CONTINUE }
public cmdShop(id) { new menu = menu_create("\rShop:", "Shop_Handle") menu_additem(menu, "Hero Shop") menu_additem(menu, "Item Shop [Under Development]") menu_setprop(menu, MPROP_EXITNAME, "Izlaz") menu_display(id, menu) }
public Shop_Handle(id, menu, item) { switch(item) { case MENU_EXIT: { menu_destroy(menu) return PLUGIN_HANDLED } case 0: { OpenHeroShop(id) } case 1: { OpenItemShop(id) } } return PLUGIN_CONTINUE }
public OpenHeroShop(id) { new menu = menu_create("Hero Shop:", "HeroShop_Handle") for(new i = 1; i < sizeof shop_imena_heroja; i++) { menu_additem(menu, shop_imena_heroja[i]) } menu_display(id, menu) } public HeroShop_Handle(id, menu, item) { switch(item) { case MENU_EXIT: { menu_destroy(menu) } case 0: { if(honor_poeni_igraca[id] < 5000) { client_print(id, print_chat, "[Multi Hero] Nemas dovoljno poena da kupis ovog heroja") } if(personal_level_igraca[id] < 10) { client_print(id, print_chat, "[Multi Hero] Tvoj personal Level nije dovoljno visok da bi kupio ovog heroja") } else { OvidiuS[id] = true honor_poeni_igraca[id] -= 5000 client_print(id, print_chat, "[Multi Hero] Kupio si Ime 3. Heroja!") } } case 1: { if(honor_poeni_igraca[id] < 5000) { client_print(id, print_chat, "[Multi Hero] Nemas dovoljno poena da kupis ovog heroja") } if(personal_level_igraca[id] < 15) { client_print(id, print_chat, "[Multi Hero] Tvoj personal Level nije dovoljno visok da bi kupio ovog heroja") } else { Nocturne[id] = true honor_poeni_igraca[id] -= 5000 client_print(id, print_chat, "[Multi Hero] Kupio si Ime 4. Heroja!") } } } menu_display(id, menu) } public OpenItemShop(id) { cmdShop(id) }
/* /=======================================================================================\ / Ova KOMANDA otvara klijentu MOTD Prozor. U njemu klijent vidi statistike svog \ / Heroja, Level, Talent Points, Honor Points... MOTD Mozete menjati po zelji, \ / ali nemojte to radeti ako neznate nista o HTML-u \ /=======================================================================================\ */ public cmdStats(id) { new szTextAdd[1024] new Add = sizeof(szTextAdd) - 1 format(szTextAdd, Add, "<font color='#00ffff' face='Comic Sans MS' size='4'><body bgcolor='#000000'>") format(szTextAdd, Add, "%s Heroj: %s<br>Level: %d<br>", szTextAdd, imena_heroja[heroj_igraca[id]], level_igraca[id]) format(szTextAdd, Add, "%s Personal Level: %d<br>Personal Iskustvo: %d<br>", szTextAdd, personal_level_igraca[id], personal_iskustvo_igraca[id]) format(szTextAdd, Add, "%s Honor Points: %d<br>", szTextAdd, honor_poeni_igraca[id]) format(szTextAdd, Add, "%s </font></body>", szTextAdd) show_motd(id, szTextAdd) }
public cmdTalents(id) { new prosireni_um[128], inteligentni_napad[128], dobrodusni_duh[128] format(prosireni_um, charsmax(prosireni_um), "\yProsireni Um \r[\d+3 \wHP\r] [\d%d \w/ \d3\r]", talent_prosireni_um[id]) format(inteligentni_napad, charsmax(inteligentni_napad), "\yInteligentni Napad \r[\d+5 \wXP (KILL)\r] [\d%d \w/ \d3\r]", talent_inteligentni_napad[id]) format(dobrodusni_duh, charsmax(dobrodusni_duh), "\yDobrodusni Duh \r[\d-2 \wSec (DEATH RECALL)\r] [\d0 \w/ \d5\r]") new menu = menu_create("\rTalents:", "Talents_Handle") menu_additem(menu, prosireni_um) menu_additem(menu, inteligentni_napad) menu_additem(menu, dobrodusni_duh) menu_setprop(menu, MPROP_EXITNAME, "Izlaz") menu_display(id, menu) } public Talents_Handle(id, menu, item) { switch(item) { case MENU_EXIT: { menu_destroy(menu) } case 0: { if(talent_prosireni_um[id] >= 3) { client_print(id, print_chat, "[Multi Hero] Maximalni Level talenta Dostignut!") } if(talent_poeni_igraca[id] < 1) { client_print(id, print_chat, "[Multi Hero] Nemas dovoljno Talent Poena da bi naucio ovo!") } else { talent_prosireni_um[id] ++ client_print(id, print_chat, "[Multi Hero] Talent Naucen") cmdTalents(id) } } case 1: { if(talent_inteligentni_napad[id] >= 3) { client_print(id, print_chat, "[Multi Hero] Maximalni Level talenta Dostignut!") } if(talent_poeni_igraca[id] < 1) { client_print(id, print_chat, "[Multi Hero] Nemas dovoljno Talent Poena da bi naucio ovo!") } else { talent_inteligentni_napad[id] ++ client_print(id, print_chat, "[Multi Hero] Talent Naucen") cmdTalents(id) } } case 2: { if(talent_dobrodusni_duh[id] >= 3) { client_print(id, print_chat, "[Multi Hero] Maximalni Level talenta Dostignut!") } if(talent_poeni_igraca[id] < 1) { client_print(id, print_chat, "[Multi Hero] Nemas dovoljno Talent Poena da bi naucio ovo!") } else { talent_dobrodusni_duh[id] ++ client_print(id, print_chat, "[Multi Hero] Talent Naucen") cmdTalents(id) } } } menu_display(id, menu) }
public ShowStats(id) { id -= 100 set_hudmessage(0, 255, 255, -1.0, 0.05, 0, 6.0, 0.1) show_hudmessage(id, "[Heroj: %s][Level Heroja: %d][Iskustvo: %d / %d]", imena_heroja[heroj_igraca[id]], level_igraca[id], iskustvo_igraca[id], iskustvo_levelu[level_igraca[id]]) set_task(0.1, "ShowStats", id + 100) }
/* /=======================================================================================\ / Ovaj EVENT koristimo da detektujemo Smrt igraca. Sve sto dole vidite \ / se desava nakon sto igrac umre, ili jedan igrac ubije drugog... \ / \ /=======================================================================================\ */ public Death(napadac, zrtva) { // Sta se desava ako Napadac (vi) ubije zrtvu (protivnik) if(zrtva != napadac) { // Ako jeste, povecavamo mu Honor Poene i Iskustvo, zatim Proveravamo Iskustvo honor_poeni_igraca[napadac] += 25 iskustvo_igraca[napadac] += 15 ProveriIskustvo(napadac) } ExecuteHamB(Ham_CS_RoundRespawn, zrtva) }
/* /=======================================================================================\ / Ovaj EVENT koristimo da detektujemo Spawn igraca. Sve sto dole vidite \ / se desava nakon sto se igrac Spawnuje \ / \ /=======================================================================================\ */ public Spawn(id) { // Proveravamo da li je igrac ziv if(!is_user_alive(id)) { // Ako nije ziv, obustavljamo svu dalju akciju plugina return PLUGIN_HANDLED } // Proveravamo da li je igrac izabrao Heroja if(!heroj_igraca[id]) { // Ako nije izbacujemo mu meni da izabere Novog Heroja cmdChooseHero(id) } switch(heroj_igraca[id]) { case hero_Garex: { give_item(id, "weapon_ak47") } case hero_Zero_Beam: { give_item(id, "weapon_m4a1") } case hero_OvidiuS: { give_item(id, "weapon_mp5navy") } case hero_Nocturne: { give_item(id, "weapon_awp") } } return PLUGIN_CONTINUE }
/* /=======================================================================================\ / Ovaj PUBLIC Koristimo da proverimo da li je igrac dobio doboljno Iskustva \ / Ako jeste povecavamo mu level. Ovaj PUBLIC Treba pozivati kada stavljate \ / igracu Iskustvo! U koliko ne pozovete, igrac nece dobiti level, samo iskustvo \ /=======================================================================================\ */ public ProveriIskustvo(id) { while(iskustvo_igraca[id] >= iskustvo_levelu[level_igraca[id]]) { level_igraca[id] ++ talent_poeni_igraca[id] ++ honor_poeni_igraca[id] += 50 personal_iskustvo_igraca[id] += 25 ProveriPersonalIskustvo(id) SacuvajPodatke(id) client_print(id, print_chat, "[Multi Hero] Dobrodosao na Level %d", level_igraca[id]) } } public ProveriPersonalIskustvo(id) { while(personal_iskustvo_igraca[id] >= iskustvo_levelu[personal_level_igraca[id]]) { personal_level_igraca[id] ++ SacuvajPodatke(id) client_print(id, print_chat, "[Multi Hero] Dobrodosao na Personal Level %d", level_igraca[id]) } }
/*======================================================================// // Nvault - Cuva podatke igracu, level, iskustvo // // Nemojte menjati nista ovde ako nemate osnovno znanje iz nvaulta // //======================================================================*/ public SacuvajPodatke(id) { new vaultkey[64], vaultdata[256], ID_igraca[64] get_user_authid(id, ID_igraca, charsmax(ID_igraca)) format(vaultkey, 63, "%s-%i-mh", ID_igraca[id]) format(vaultdata, 255, "%i#%i#%i#%i#%i", honor_poeni_igraca[id], iskustvo_igraca[id], level_igraca[id], personal_level_igraca[id], personal_iskustvo_igraca[id]) nvault_set(g_Vault, vaultkey, vaultdata) } public UcitajPodatke(id, heroj) { new vaultkey[64], vaultdata[256], ID_igraca[64] get_user_authid(id, ID_igraca, charsmax(ID_igraca)) format(vaultkey,63, "%s-%i-mh", ID_igraca[id], heroj) format(vaultdata,255, "%i#%i#%i#%i#%i", honor_poeni_igraca[id], iskustvo_igraca[id], level_igraca[id], personal_level_igraca[id], personal_iskustvo_igraca[id]) nvault_get(g_Vault,vaultkey, vaultdata, 255) replace_all(vaultdata, 255, "#", " ") new honorpoeniigraca[32], iskustvoigraca[32], leveligraca[32], personalleveligraca[32], personaliskustvoigraca[32] parse(vaultdata, honorpoeniigraca, 31, iskustvoigraca, 31, leveligraca, 31, personalleveligraca, 31, personaliskustvoigraca, 31) honor_poeni_igraca[id] = str_to_num(honorpoeniigraca) iskustvo_igraca[id] = str_to_num(iskustvoigraca) level_igraca[id] = str_to_num(leveligraca) personal_level_igraca[id] = str_to_num(personalleveligraca) personal_iskustvo_igraca[id] = str_to_num(personaliskustvoigraca) }
I know its such a Mess, but its good...
I want to fix this:
When player dies, his Death Meter Starts counting, and it depends on its level: if he is level 10 Death Meter will be 10... And so, every second death meter lowers by 1
After 10 Seconds, player is respawned...
Help?
And also, what can i use to detect user buttons?
|