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ę .


 Forum
 
Forum
 Użytkownicy
 
Użytkownicy
 Kalendarz
 
Kalendarz
 Dodatki SourceMod
 
Dodatki SourceMod



 
	
 Temat jest zamknięty
 Temat jest zamknięty 
					










 
  
		 
		 
		