Witam, jak w temacie.
Zrobiłem dwie naprawdę mocno amatorskie klasy od poziomu.
Problem jest taki, że klasy Cheester której sma zamiszczę poniżej mogę używać już od pierwszego Lv.
Natomiast obie mają tendencję do zostawiania swoich umiejętności ponieważ miało to być zrobione tak iż jeśli mamy na klasie przykładowo LosT. 161 poziom - to wchodzimy pierwsze na te klasę, a następnie dopiero na klasę Cheester dostępną od 161 poziomu.
Pierwszy problem co zauważyłem przy drugiej klasie (Kamikadze) od 261 poziomu jest taki, że zaczynamy z poziomem 261 a nie 1'szym. Oraz pozostają nam umiejętności z starej klasy co nie powinno mieć miejsca.
Prosiłbym o zobaczenie na obie klasy najlepiej wytknięcie co było źle zrobione (na przyszłość) oraz poprawienie.
Zamieszczam klasy:
Cheester 161
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <codmod> #include <engine> #include <hamsandwich> #include <fakemeta> #include <colorchat> #define MAX 32 #define x 0 #define y 1 #define z 2 new sprite; new ilosc_blyskawic[33],poprzednia_blyskawica[33]; new const gszSound[] = "LosT_CodMod_Sounds/thunder_clap.wav"; new const nazwa[] = "Cheester(161 lv)"; new const opis[] = "Posiada 2 błyskawice(+inteligencja),1/3 z HE,2x Multijump." new const bronie = 1<<CSW_M4A1 | 1<<CSW_AK47 | 1<<CSW_DEAGLE | 1<<CSW_HEGRENADE; new const zdrowie = 40; new const kondycja = 15; new const inteligencja = 15; new const wytrzymalosc = 10; new ma_klase[33] new skoki[33]; public plugin_init() { register_plugin(nazwa, "1.0", "LosT."); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_forward(FM_CmdStart, "fwCmdStart_MultiJump"); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); register_event("ResetHUD", "ResetHUD", "abe"); } public plugin_precache() { sprite = precache_model("sprites/LosT_CodMod_Sprites/lgtning.spr"); precache_sound(gszSound); } public cod_class_enabled(id) { new dostepna = 161; new level = cod_get_user_level(id); if(level < 161) ColorChat(id, GREEN, "^x01[Menu_Klas] ^x04 [%s]Klasa dostepna od %i poziomu.", nazwa, dostepna) ColorChat(id, GREEN, "^x01[Menu_Klas] ^x04 Klasa Stworzona Przez LosT'a.") ilosc_blyskawic[id] = 10; ma_klase[id] = 1; return COD_CONTINUE; } public cod_class_disabled(id) { ilosc_blyskawic[id] = 0; ma_klase[id] = 0; } public cod_class_skill_used(id) { if(!is_user_alive(id)) return PLUGIN_HANDLED; if(!ilosc_blyskawic[id]) { return PLUGIN_HANDLED; } new target = Find_Best_Angle(id,600.0,false) if (!is_valid_ent(target)) { client_print(id,print_center,"Brak Celu W Zasiegu 600 m") return PLUGIN_CONTINUE } if(is_user_alive(target)){ if(get_user_team(target) == get_user_team(id)) { return PLUGIN_HANDLED; } if(poprzednia_blyskawica[id]+10.0>get_gametime()) { client_print(id,print_chat,"Blyskawicy Mozesz Uzyc Raz Na 10 Sekund"); return PLUGIN_HANDLED; } poprzednia_blyskawica[id] = floatround(get_gametime()); ilosc_blyskawic[id]--; puscBlyskawice(id, target); } return PLUGIN_HANDLED; } stock Create_TE_BEAMENTS(startEntity, endEntity, iSprite, startFrame, frameRate, life, width, noise, red, green, blue, alpha, speed) { message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_BEAMENTS ) write_short( startEntity ) // start entity write_short( endEntity ) // end entity write_short( iSprite ) // model write_byte( startFrame ) // starting frame write_byte( frameRate ) // frame rate write_byte( life ) // life write_byte( width ) // line width write_byte( noise ) // noise amplitude write_byte( red ) // red write_byte( green ) // green write_byte( blue ) // blue write_byte( alpha ) // brightness write_byte( speed ) // scroll speed message_end() } puscBlyskawice(id, target){ //Obrazenia new ent = create_entity("info_target"); ExecuteHam(Ham_TakeDamage, target, id, id, 60.0+cod_get_user_intelligence(id)/2, 1); remove_entity(ent); //Piorun Create_TE_BEAMENTS(id, target, sprite, 0, 10, 10, 150, 5, 212, 212, 0, 230, 20); //Dzwiek emit_sound(id, CHAN_WEAPON, gszSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); emit_sound(target, CHAN_WEAPON, gszSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); } public ResetHUD(id) { if(ma_klase[id] == 1) { ilosc_blyskawic[id] = 10; } } stock Find_Best_Angle(id,Float:dist, same_team = false) { new Float:bestangle = 0.0 new winner = -1 for (new i=0; i < MAX; i++) { if (!is_user_alive(i) || i == id || (get_user_team(i) == get_user_team(id) && !same_team)) continue if (get_user_team(i) != get_user_team(id) && same_team) continue //User has spell immunity, don't target new Float:c_angle = Find_Angle(id,i,dist) if (c_angle > bestangle && Can_Trace_Line(id,i)) { winner = i bestangle = c_angle } } return winner } stock Float:Find_Angle(Core,Target,Float:dist) { new Float:vec2LOS[2] new Float:flDot new Float:CoreOrigin[3] new Float:TargetOrigin[3] new Float:CoreAngles[3] pev(Core,pev_origin,CoreOrigin) pev(Target,pev_origin,TargetOrigin) if (get_distance_f(CoreOrigin,TargetOrigin) > dist) return 0.0 pev(Core,pev_angles, CoreAngles) for ( new i = 0; i < 2; i++ ) vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i] new Float:veclength = Vec2DLength(vec2LOS) //Normalize V2LOS if (veclength <= 0.0) { vec2LOS[x] = 0.0 vec2LOS[y] = 0.0 } else { new Float:flLen = 1.0 / veclength; vec2LOS[x] = vec2LOS[x]*flLen vec2LOS[y] = vec2LOS[y]*flLen } //Do a makevector to make v_forward right engfunc(EngFunc_MakeVectors,CoreAngles) new Float:v_forward[3] new Float:v_forward2D[2] get_global_vector(GL_v_forward, v_forward) v_forward2D[x] = v_forward[x] v_forward2D[y] = v_forward[y] flDot = vec2LOS[x]*v_forward2D[x]+vec2LOS[y]*v_forward2D[y] if ( flDot > 0.5 ) { return flDot } return 0.0 } stock Float:Vec2DLength( Float:Vec[2] ) { return floatsqroot(Vec[x]*Vec[x] + Vec[y]*Vec[y] ) } stock bool:Can_Trace_Line(id, target) { for (new i=-35; i < 60; i+=35) { new Float:Origin_Id[3] new Float:Origin_Target[3] new Float:Origin_Return[3] pev(id,pev_origin,Origin_Id) pev(target,pev_origin,Origin_Target) Origin_Id[z] = Origin_Id[z] + i Origin_Target[z] = Origin_Target[z] + i trace_line(-1, Origin_Id, Origin_Target, Origin_Return) if (get_distance_f(Origin_Return,Origin_Target) < 25.0) return true } return false } public fwCmdStart_MultiJump(id, uc_handle) { if(!is_user_alive(id) || !ma_klase[id]) return FMRES_IGNORED; new flags = pev(id, pev_flags); if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id]) { skoki[id]--; new Float:velocity[3]; pev(id, pev_velocity,velocity); velocity[2] = random_float(265.0,285.0); set_pev(id, pev_velocity,velocity); } else if(flags & FL_ONGROUND) skoki[id] = 2; return FMRES_IGNORED; } public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_klase[idattacker]) return HAM_IGNORED; if(damagebits & DMG_BULLET) { new weapon = get_user_weapon(idattacker); if(weapon == CSW_HEGRENADE && damage > 20.0 && random_num(1,3) == 1) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits); } return HAM_IGNORED; }
Kamikadze 261
#include <amxmodx> #include <amxmisc> #include <codmod> #include <engine> #include <fakemeta> #include <hamsandwich> #include <colorchat> #define DMG_BULLET (1<<1) new const nazwa[] = "Kamikadze(261 lv)"; new const opis[] = "Posiada z M4A1 i AK47 + 10 dmg,Na nożu niewidka(1/255),AutoBH)."; new const bronie = (1<<CSW_M4A1)|(1<<CSW_DEAGLE)|(1<<CSW_AK47); new const zdrowie = 40; new const kondycja = 25; new const inteligencja = 25; new const wytrzymalosc = 20; new bool:ma_klase[33]; public plugin_init() { register_plugin(nazwa, "1.0", "LosT."); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_event("CurWeapon", "eventKnife_Niewidzialnosc", "be", "1=1"); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); register_forward(FM_PlayerPreThink, "fwPrethink_AutoBH"); } public cod_class_enabled(id) { new dostepna = 261; new level = cod_get_user_level(id); if(level < 261) { ColorChat(id, GREEN, "^x01[Menu_Klas] ^x04 [%s]Klasa Dostepna Od %i Poziomu.", nazwa, dostepna) ColorChat(id, GREEN, "^x01[Menu_Klas] ^x04 Klasa Stworzona Przez LosT'a.") return COD_STOP; } ma_klase[id] = true; return COD_CONTINUE; } public cod_class_disabled(id) { set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255); ma_klase[id] = false; } public eventKnife_Niewidzialnosc(id) { if(!ma_klase[id]) return; if( read_data(2) == CSW_KNIFE ) { set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 1); } else { set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255); } } public fwPrethink_AutoBH(id) { if(!ma_klase[id]) return PLUGIN_CONTINUE if (pev(id, pev_button) & IN_JUMP) { new flags = pev(id, pev_flags) if (flags & FL_WATERJUMP) return FMRES_IGNORED; if ( pev(id, pev_waterlevel) >= 2 ) return FMRES_IGNORED; if ( !(flags & FL_ONGROUND) ) return FMRES_IGNORED; new Float:velocity[3]; pev(id, pev_velocity, velocity); velocity[2] += 250.0; set_pev(id, pev_velocity, velocity); set_pev(id, pev_gaitsequence, 6); } return FMRES_IGNORED; } public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_klase[idattacker]) return HAM_IGNORED; if(damagebits & DMG_BULLET) { new weapon = get_user_weapon(idattacker); if(weapon == CSW_M4A1) cod_inflict_damage(idattacker, this, 5.0, 0.5, idinflictor, damagebits); if(weapon == CSW_AK47) cod_inflict_damage(idattacker, this, 5.0, 0.5, idinflictor, damagebits); } return HAM_IGNORED; }
Pozdrawiam i dziękuję .