/* Script generated by Pawn Studio */ #include <amxmodx> #include <amxmisc> #include <nvault> #include <cstrike> #include <colorchat> #include <engine> #include <hamsandwich> #include <fun> #include <fakemeta> #define PLUGIN "BB Skill Mod" #define AUTHOR "DarkGL" #define VERSION "0.1a by nevp Bermud.pl" new player_xp[33]; new player_xp_all[33]; new level[33]; new rangi[][256]={ "Szeregowy", "Starszy szeregowy", "Kapral", "Starszy kapral", "Plutonowy", "Sierzant", "Starszy sierzant", "Podporucznik", "Porucznik", "Kapitan", "Major", "General brygady", "General dywizji", "General broni", "General", "Marszalek" } new exp[]={ 1000, 2000, 4000, 7000, 9000, 11000, 13000, 15000, 17000, 19000, 23000, 26000, 29000, 33000, 37000, 41000, 45000, } new zapis; new msgtext; new pcvar_exp_round,pcvar_exp_kill_ct,pcvar_exp_kill_tt,pcvar_exp_level,pcvar_exp_hs,pcvar_hud; new dmg_level[33]; new health[33]; new shot_time_level[33],Weapons[33][2]; new magazynek[33]; new ile_dodac_magazynek[33] new stare_id_broni[33] new stare_ammo[33]; new const Float:gfCSSpeeds[]={ 000.0, 250.0, 000.0, 260.0, 250.0, 240.0, 250.0, 250.0, 240.0, 250.0, 250.0, 250.0, 250.0, 210.0, 240.0, 240.0, 250.0, 250.0, 210.0, 250.0, 220.0, 230.0, 230.0, 250.0, 210.0, 250.0, 250.0, 235.0, 221.0, 250.0, 245.0 }; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_logevent("Koniec_Rundy", 2, "1=Round_End") register_concmd("add_exp","addexp",ADMIN_BAN,"dodaje expa nick i ile") register_event("DeathMsg", "DeathMsg", "a") pcvar_exp_round = register_cvar("bb_exp_round","50"); pcvar_exp_kill_ct = register_cvar("bb_exp_kill_ct","20"); pcvar_exp_kill_tt = register_cvar("bb_exp_kill_tt","10"); pcvar_exp_level = register_cvar("bb_exp_level","40"); pcvar_exp_hs = register_cvar("bb_exp_hs","5"); pcvar_hud = register_cvar("bb_hud","0"); zapis = nvault_open("exp") register_event("ResetHUD","ShowHUD", "b"); register_event("CurWeapon","Event_CurWeapon", "b") msgtext = get_user_msgid("StatusText"); register_clcmd("say /skille","skille_menu"); register_clcmd("say /sk","skille_menu"); register_clcmd("say /staty","staty"); register_clcmd("say /st","staty"); register_clcmd("say /reset","reset"); register_clcmd("say /r","reset"); RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage", 0); RegisterHam(Ham_Spawn,"player","spawned",1) register_event("CurWeapon","CurWeapon","be", "1=1") register_clcmd("say","sayhandle"); set_task(120.0,"pomoc",40) } public plugin_precache(){ precache_sound("darkgl/bb/gained_level.wav"); } public plugin_end(){ nvault_close(zapis); } public sayhandle(id){ new text[192] read_argv(1,text,191) if(equal(text,"")){ return PLUGIN_HANDLED; } new name[128]; get_user_name(id,name,127) ColorChat(0,GREEN,"[%s] ^x03%s^x01: %s",rangi[level[id]],name,text) return PLUGIN_HANDLED; } public CurWeapon(id) { new wid = read_data(2) // Id broni if(wid == CSW_XM1014 || wid == CSW_C4 || wid == CSW_FLASHBANG || wid == CSW_HEGRENADE || wid == CSW_KNIFE || wid == CSW_SMOKEGRENADE){ return PLUGIN_CONTINUE; } if(wid != stare_id_broni[id]){ ile_dodac_magazynek[id] = magazynek[id]/2; stare_id_broni[id] = wid; return PLUGIN_CONTINUE; } new ammo = read_data(3) // liczba naboi w magazynku if(ammo > stare_ammo[id]){ ile_dodac_magazynek[id] = magazynek[id]/2; stare_ammo[id] = ammo; return PLUGIN_CONTINUE; } if(ile_dodac_magazynek[id] == 0){ return PLUGIN_CONTINUE; } new ent = fm_get_user_weapon_entity(id); if(ent){ cs_set_weapon_ammo(ent, ammo+1); ile_dodac_magazynek[id]--; } return PLUGIN_CONTINUE; } public skille_menu(id){ new menu = menu_create("Skill menu","skille_menu_handle"); new formats[128]; format(formats,charsmax(formats),"Wieksze DMG [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1),dmg_level[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Wiecej zycia [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(health[id]+1),health[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Szybsze strzelanie [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1),shot_time_level[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Wiekszy magazynek [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1),magazynek[id]) menu_additem(menu,formats) menu_setprop(menu,MPROP_EXIT,MEXIT_ALL); menu_setprop(menu,MPROP_NUMBER_COLOR,"\r"); menu_display(id, menu,0); return PLUGIN_HANDLED; } skille_menu2(id,page=0){ new menu = menu_create("Skill menu","skille_menu_handle2"); new formats[128]; format(formats,charsmax(formats),"Wieksze DMG [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1),dmg_level[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Wiecej zycia [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(health[id]+1),health[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Szybsze strzelanie [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1),shot_time_level[id]) menu_additem(menu,formats) format(formats,charsmax(formats),"Wiekszy magazynek [%d Exp] Aktualny level: \r%d",get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1),magazynek[id]) menu_additem(menu,formats) menu_setprop(menu,MPROP_EXIT,MEXIT_ALL); menu_setprop(menu,MPROP_NUMBER_COLOR,"\r"); menu_display(id, menu,page); return PLUGIN_HANDLED; } public skille_menu_handle(id, menu, item){ if(item == MENU_EXIT){ menu_destroy(menu); return PLUGIN_HANDLED; } item++; switch(item){ case 1:{ if((get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1); dmg_level[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 2:{ if((get_pcvar_num(pcvar_exp_level)*(health[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(health[id]+1); health[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 3: { if((get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1); shot_time_level[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 4: { if((get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } ile_dodac_magazynek[id] = magazynek[id]/2 player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1); magazynek[id]++; skille_menu2(id,1); menu_destroy(menu); return PLUGIN_HANDLED; } } menu_destroy(menu); return PLUGIN_HANDLED; } public skille_menu_handle2(id, menu, item){ if(item == MENU_EXIT){ menu_destroy(menu); return PLUGIN_HANDLED; } item++; switch(item){ case 1:{ if((get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(dmg_level[id]+1); dmg_level[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 2:{ if((get_pcvar_num(pcvar_exp_level)*(health[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(health[id]+1); health[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 3: { if((get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(shot_time_level[id]+1); shot_time_level[id]++; skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } case 4: { if((get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1)) > player_xp[id]){ skille_menu2(id); menu_destroy(menu); return PLUGIN_HANDLED; } ile_dodac_magazynek[id] = magazynek[id]/2 player_xp[id]-=get_pcvar_num(pcvar_exp_level)*(magazynek[id]+1); magazynek[id]++; skille_menu2(id,1); menu_destroy(menu); return PLUGIN_HANDLED; } } menu_destroy(menu); return PLUGIN_HANDLED; } public reset(id){ new exp = 0; new exp2 =get_pcvar_num(pcvar_exp_level); for(new i =1;i<=dmg_level[id];i++){ exp+=exp2*i } dmg_level[id] = 0; for(new i =1;i<=health[id];i++){ exp+=exp2*i } health[id] = 0; for(new i =1;i<=shot_time_level[id];i++){ exp+=exp2*i } shot_time_level[id] = 0; for(new i =1;i<=magazynek[id];i++){ exp+=exp2*i } magazynek[id] = 0; player_xp[id] += exp; skille_menu(id); } public staty(id){ new path_to_file[128] new amxbasedir[64] get_basedir(amxbasedir,63) format(path_to_file,127,"%s/base/stats.txt",amxbasedir) if(file_exists(path_to_file)){ delete_file(path_to_file) } new Data[1025]; format(Data,1024,"<html><head><title>Informacje o skillach</title></head>") write_file(path_to_file,Data,-1) format(Data,1024,"<body text=white bgcolor=black></body>") write_file(path_to_file,Data,-1) format(Data,1024,"<b>Ranga: %s</b><br />",rangi[level[id]]) write_file(path_to_file,Data,-1) format(Data,1024,"<b>Aktualny Exp: %d | Caly exp: %d</b><br />",player_xp[id],player_xp_all[id]) write_file(path_to_file,Data,-1) if(level[id]== sizeof(rangi)-1){ format(Data,1024,"<b>Ranga : %s | Nastepna ranga : Jestes najlepszy !/b><br />",rangi[level[id]]) write_file(path_to_file,Data,-1) } else { format(Data,1024,"<b>Ranga : %s | Nastepna ranga : %s (%d)</b><br />",rangi[level[id]],rangi[level[id]+1],exp[level[id]]) write_file(path_to_file,Data,-1) } format(Data,1024,"<b>Dmg wiekszy o %d %%</b><br />",dmg_level[id]) write_file(path_to_file,Data,-1) format(Data,1024,"<b>Plus %d do hp</b><br />",health[id]*4) write_file(path_to_file,Data,-1) format(Data,1024,"<b>Szybsze strzelanie o %d %%</b><br />",shot_time_level[id]) write_file(path_to_file,Data,-1) format(Data,1024,"<b>Wiekszy magazynek o %d %%</b><br />",magazynek[id]/2) write_file(path_to_file,Data,-1) format(Data,1024,"</html>") write_file(path_to_file,Data,-1) show_motd(id, path_to_file, "Informacje o postaci") return PLUGIN_HANDLED } public pomoc(){ ColorChat(0,GREEN,"Chcesz polepszyć swoje statystyki napisz na czacie /skille"); set_task(120.0,"pomoc2",36) } public pomoc2(){ ColorChat(0,GREEN,"Zobacz statystyki swoich skilli wpisujac na czacie /staty"); set_task(120.0,"pomoc3",37) } public pomoc3(){ ColorChat(0,GREEN,"Zresetuj swoje statystyki poprzez /reset"); set_task(120.0,"pomoc",35) } public Koniec_Rundy(){ for(new i = 1;i<33;i++){ if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT){ DajExp(i,get_pcvar_num(pcvar_exp_round)); ColorChat(i,GREEN,"^x03 Dostales %d expa za przezycie",get_pcvar_num(pcvar_exp_round)); set_hudmessage(random_num(0,227), random_num(0,184),random_num(0,036), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1) show_hudmessage(i,"Dostales %d expa za przezycie",get_pcvar_num(pcvar_exp_round)); } } } public addexp(id, level, cid){ if(!cmd_access(id, level, cid, 3)){ return PLUGIN_HANDLED; } new arg1[33]; new arg2[10]; read_argv(1,arg1,32); read_argv(2,arg2,9); new player = cmd_target(id, arg1, 0); remove_quotes(arg2); new exp = str_to_num(arg2); if(exp != 0 && exp < 0 ){ OdejmijExp(player,exp); } else if(exp != 0 && exp > 0 ){ DajExp(player,exp); } return PLUGIN_HANDLED; } public OdejmijExp(id,ile){ player_xp[id]-=ile; player_xp_all[id]-=ile; level[id]=0; while(true){ if(player_xp_all[id] >= exp[level[id]]){ level[id]++; //set_hudmessage(random_num(0,227), random_num(0,184),random_num(0,036), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1) //show_hudmessage(id,"Awansowales na kolejny level (%s)",rangi[level[id]]); //ColorChat(0,GREEN,"^x03 Awansowal do rangi ^x01 %s gratki <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />",rangi[level[id]]); } else { break; } } } public DajExp(id,ile){ player_xp[id]+=ile; player_xp_all[id]+=ile; new name[64]; get_user_name(id,name,63); while(true){ if(player_xp_all[id] >= exp[level[id]] && sizeof(rangi) > level[id]){ level[id]++; set_hudmessage(random_num(0,227), random_num(0,184),random_num(0,036), -1.0, -1.0, 0, 6.0, 5.0, 0.0, 0.0, -1) show_hudmessage(id,"Awansowales na kolejny level (%s)",rangi[level[id]]); ColorChat(0,GREEN,"^x03%s awansowal do rangi ^x01 %s ^x03gratki <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />",name,rangi[level[id]]); emit_sound(id,CHAN_VOICE,"darkgl/bb/gained_level.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } else { break; } } } public client_connect(id){ health[id] = 0; dmg_level[id] = 0; level[id] = 0; player_xp[id] = 0; player_xp_all[id] = 0; shot_time_level[id] = 0; magazynek[id] = 0; stare_id_broni[id] = 0; ile_dodac_magazynek[id] = 0; wczytaj_exp(id); } public client_disconnect(id){ zapisz_exp(id); } public wczytaj_exp(id){ new vaultkey[64],vaultdata[512]; new authid[64]; get_user_authid(id,authid,63); format(vaultkey,63,"%s",authid); nvault_get(zapis,vaultkey,vaultdata,511); replace_all(vaultdata,256,"#"," "); new jeden[100],dwa[100],trzy[100],cztery[100],piec[100],szesc[100],siedem[100],osiem[100],dziew[100],dzies[100],jedenascie[100],dwanascie[100] parse(vaultdata,jeden,99,dwa,99,trzy,99,cztery,99,piec,99,szesc,99,siedem,99,osiem,99,dziew,99,dzies,99,jedenascie,99,dwanascie,99) player_xp[id] = str_to_num(jeden); player_xp_all[id] = str_to_num(dwa); dmg_level[id] = str_to_num(trzy); health[id] = str_to_num(cztery); shot_time_level[id] = str_to_num(piec); magazynek[id] = str_to_num(szesc); while(true){ if(player_xp_all[id] >= exp[level[id]] && sizeof(rangi) > level[id]){ level[id]++; } else { break; } } } public zapisz_exp(id){ new vaultkey[64],vaultdata[512]; new authid[64]; get_user_authid(id,authid,63); format(vaultkey,63,"%s",authid); format(vaultdata,511,"%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d",player_xp[id],player_xp_all[id],dmg_level[id],health[id],shot_time_level[id],magazynek[id]); nvault_set(zapis,vaultkey,vaultdata) } public ShowHUD(id) { if(is_user_alive(id)){ new HUD[128]; format(HUD, 127,"[%s] Aktualny Exp: %d | Caly exp: %d",rangi[level[id]],player_xp[id],player_xp_all[id]); if(get_pcvar_num(pcvar_hud) == 0 ){ message_begin(MSG_ONE, msgtext, {0,0,0}, id); write_byte(0); write_string(HUD); message_end(); return PLUGIN_CONTINUE; } else { set_hudmessage(227, 184, 036, 0.02, 0.63, 0, 6.0, 15.0) show_hudmessage(id, "%s",HUD) } } return PLUGIN_CONTINUE; } public client_PreThink(id){ if(!is_user_alive(id)){ return PLUGIN_CONTINUE; } if(is_user_alive(id) && !is_user_bot(id)){ new asd,aim get_user_aiming(id,aim,asd); if(is_user_alive(aim)){ ShowHUD(id); } } return PLUGIN_CONTINUE; } public DeathMsg() { new kid = read_data(1) //zabojca new vid = read_data(2) // ofiara new hs = read_data(3) // ofiara if(cs_get_user_team(kid)==CS_TEAM_CT && cs_get_user_team(vid)==CS_TEAM_T){ DajExp(kid,get_pcvar_num(pcvar_exp_kill_tt)); set_user_health(kid,get_user_health(kid)); new name[64]; get_user_name(vid,name,charsmax(name)); ColorChat(kid,TEAM_COLOR,"Zdobyles %d expa za zabicie %s",get_pcvar_num(pcvar_exp_kill_tt),name) if(hs == 1){ DajExp(kid,get_pcvar_num(pcvar_exp_hs)); ColorChat(kid,TEAM_COLOR,"Zdobyles %d expa za hs'a",get_pcvar_num(pcvar_exp_hs)) } } else if(cs_get_user_team(kid)==CS_TEAM_T && cs_get_user_team(vid)==CS_TEAM_CT){ DajExp(kid,get_pcvar_num(pcvar_exp_kill_ct)); set_user_health(kid,get_user_health(kid)); new name[64]; get_user_name(vid,name,charsmax(name)); ColorChat(kid,TEAM_COLOR,"Zdobyles %d expa za zabicie %s",get_pcvar_num(pcvar_exp_kill_ct),name) if(hs == 1){ DajExp(kid,get_pcvar_num(pcvar_exp_hs)); ColorChat(kid,TEAM_COLOR,"Zdobyles %d expa za hs'a",get_pcvar_num(pcvar_exp_hs)) } } } public fwTakeDamage(this, idinflictor, idattacker,Float:damage, damagebits){ SetHamParamFloat(4,damage+(damage*(dmg_level[idattacker]*0.01))); return HAM_HANDLED; } public spawned(id){ if(is_user_alive(id)){ set_user_health(id,get_user_health(id)+(health[id]*4)) } } public Event_CurWeapon(id) { if(!is_user_alive(id)){ return PLUGIN_CONTINUE } new bron=read_data(2) //set_user_maxspeed(id,gfCSSpeeds[bron]+(gfCSSpeeds[bron]*0.02)); ShowHUD(id); new Gun = read_data(2) if(Gun==0 || Gun==6 || Gun==29 || Gun>30) return PLUGIN_CONTINUE new Ammo = read_data(3) if(Weapons[id][0] == Gun && Weapons[id][1] <= Ammo) { Weapons[id][1] = Ammo return PLUGIN_CONTINUE } Weapons[id][0] = Gun Weapons[id][1] = Ammo new weapon[32] get_weaponname(Gun,weapon,31) new Ent = fm_find_ent_by_owner(-1,weapon,id) if(Ent) { new Float:Delay = get_pdata_float( Ent, 46, 4) * (1.0-(shot_time_level[id]*0.01)); if (Delay > 0.0){ set_pdata_float( Ent, 46, Delay, 4) } else { set_pdata_float( Ent, 46, 0.01, 4) } } return PLUGIN_CONTINUE } //Frome Fakemeta utility stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0) { new strtype[11] = "classname", ent = index switch (jghgtype) { case 1: strtype = "target" case 2: strtype = "targetname" } while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {} return ent } stock fm_get_user_weapon_entity(id, wid = 0) { new weap = wid, clip, ammo if (!weap && !(weap = get_user_weapon(id, clip, ammo))) return 0 new class[32] get_weaponname(weap, class, sizeof class - 1) return fm_find_ent_by_owner(-1, class, id) }
Użytkownik blaher edytował ten post 27.04.2012 18:00