Clase Zombie Spitter
#1
Código PHP:
#include <amxmodx>
#include <zombieapocalypse>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>

/*                      L4D Tank Zombie
                by x[L]eoNNN
    
    #Description :
    
        this is a Zombie Class of Famous Game, "L4d" with the ability to throw rocks at enemies,
        either killing him, infecting taking life, etc. (controlled by a cvar)
    
    #Cvars :
    
        zp_tank_rockspeed 700 // Rock Speed Launched by Tank
        zp_tank_rockdamage 70 // damage done by the rock
        zp_tank_rockreward 1 // Ammo Pack's Reward by touching the enemy with the rock
        zp_tank_rockmode 1 // Rock Mode :
                    1 = Take Damage
                    2 = Killing
                    3 = Infect
                    4 = Bad Aim
        zp_tank_rock_energynesesary 20 // energy nesesary to launch a rock

    #Changelog :
    
        v1.0: public release
        v1.1: print messages changed to hudmessages (for spam), fix time reload bug,add effect touching rock
        v1.2: fix a survivor bugs', To break an entity "func_breakable" when the rock touches the entity, 
              fix a problem with logs : native error : get_user_origin.
*/
new const zclass_name[] = { "Zombie Spitter" 
new const 
zclass_info[] = { "Lanza Acido" 
new const 
zclass_model[] = { "SpitterL4D2" 
new const 
zclass_clawmodel[] = { "spitter.mdl" 
const 
zclass_level 
const zclass_health 2000 
const zclass_speed 260
const Float:zclass_gravity 0.90 
const Float:zclass_knockback 1.0  

new g_L4dTank

new g_trailSpriterockmodel
new g_trail[] = "sprites/laserbeam.spr"
new const rock_model[] = "models/spit.mdl"
new const rock_model2[] = "models/spit.mdl"
new tank_rocklaunch[] = "zombie_plague/spitter_vomit1.wav"
new Float:g_stealth_cooldown_standart 10.0 //cooldown time

new g_power[33]
new 
g_cooldown[33]
new 
i_cooldown_time[33]
new 
g_maxplayers

new cvar_rock_damagecvar_rock_rewardcvar_rockmodecvar_rockEnergyNesesarycvar_rock_speedcvar_reloadpower

public plugin_init()
{
    
register_plugin("[ZP] Zombie Class: L4D Tank Zombie""1.2""x[L]eoNNN"
 
    
cvar_rock_speed register_cvar("za_spitter_acidspeed""700")
    
cvar_rock_damage register_cvar("za_spitter_aciddamage""50")
    
cvar_rock_reward register_cvar("za_spitter_acidreward""0")
    
cvar_rockmode register_cvar("za_spitter_acidmode""1")
    
cvar_rockEnergyNesesary register_cvar("za_spitter_acid_energynesesary""20")
    
cvar_reloadpower register_cvar("za_spitter_reload_power""1")
    
register_touch("acid_ent","*","AcidTouch")
    
register_forward(FM_CmdStart"CmdStart" )
    
register_logevent("roundStart"2"1=Round_Start")
    
g_maxplayers get_maxplayers()


public 
plugin_precache()
{
    
g_L4dTank za_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_levelzclass_healthzclass_speedzclass_gravityzclass_knockback
    
g_trailSprite precache_model(g_trail)
    
engfunc(EngFunc_PrecacheModelrock_model)
    
precache_sound(tank_rocklaunch)
}

public 
roundStart()
{
    for (new 
1<= g_maxplayersi++)
    {
        
i_cooldown_time[i] = floatround(g_stealth_cooldown_standart)
        
g_cooldown[i] = 0
        remove_task
(i)
    }
}
    
public 
zp_user_humanized_post(id)
{
    for (new 
1<= g_maxplayersi++)
    {
        
i_cooldown_time[i] = floatround(g_stealth_cooldown_standart)
        
g_cooldown[i] = 0
        remove_task
(i)
    }
}    
    
public 
zp_user_infected_post idinfector )
{
             if (
zp_get_user_zombie_class(id) == g_L4dTank && !zp_get_user_nemesis(id) && !za_get_user_alien(id) && !zp_get_user_assassin(id) && !zp_get_user_demon(id))
             {
        
print_chatColor(id"\g[ZE]\t Para usar tu Habilidad presiona :\g [R]")
        
g_power[id] = get_pcvar_num(cvar_rockEnergyNesesary)
        
set_task(get_pcvar_float(cvar_reloadpower), "power1"id__"b")
             }
}  

public 
CmdStart( const id, const uc_handlerandom_seed )
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED;
    
    if(!
zp_get_user_zombie(id) || zp_get_user_nemesis(id) || za_get_user_alien(id) || zp_get_user_assassin(id) || zp_get_user_demon(id))
        return 
FMRES_IGNORED;
        
    new 
button pev(idpev_button)
    new 
oldbutton pev(idpev_oldbuttons)
    
    if (
zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_L4dTank))
        if(
oldbutton IN_RELOAD && !(button IN_RELOAD))
        {
            if(
g_cooldown[id] == 0)
            {
                
MakeRock(id)
                
emit_sound(idCHAN_STREAMtank_rocklaunchVOL_NORMATTN_NORM0PITCH_NORM)
                
set_task(g_stealth_cooldown_standart,"reset_cooldown",id)
                
g_cooldown[id] = 1
            
                     i_cooldown_time
[id] = floatround(g_stealth_cooldown_standart)
            
                     
set_task(1.0"ShowHUD"id__"a",i_cooldown_time[id])
            }
            
        }
            
    return 
FMRES_IGNORED
}

public 
ShowHUD(id)
{
    if(
is_valid_ent(id) && is_user_alive(id))
    {
        
i_cooldown_time[id] = i_cooldown_time[id] - 1;
        
set_hudmessage(01500, -1.00.1701.01.10.00.0, -1)
        
show_hudmessage(id"[Tiempo de Recarga]^n > %d <",i_cooldown_time[id])
    }else{
        
remove_task(id)
    }
}

public 
power1(id)
{
    
g_power[id] += 1
    
    
if( g_power[id] > get_pcvar_num(cvar_rockEnergyNesesary) )
    {
        
g_power[id] = get_pcvar_num(cvar_rockEnergyNesesary)
    }
}

public 
reset_cooldown(id)
{
    if(
is_valid_ent(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !za_get_user_alien(id) && !zp_get_user_assassin(id) && !zp_get_user_demon(id) && zp_get_user_zombie_class(id) == g_L4dTank)
    {
        
g_cooldown[id] = 0
        
        
new text[100]
        
print_chatColor(id"\g[ZE]\t Activa tu Habilidad, presione la tecla :\g [R]")
        
message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id
        
write_byte(id
        
write_string(text
        
message_end()
    }
}

public 
AcidTouchRockEntTouched )
{
    if ( !
pev_valid RockEnt ) )
        return
        
    static Class[ 
32 ]
    
entity_get_stringTouchedEV_SZ_classname, Class, charsmax( Class ) )
    new 
Float:origin[3]
        
    
pev(Touched,pev_origin,origin)
    
    if( 
equal( Class, "player" ) )
        if (
is_user_alive(Touched))
        {
            if(!
zp_get_user_zombie(Touched))
            {
                new 
TankKiller entity_get_edictRockEntEV_ENT_owner )
                
                switch(
get_pcvar_num(cvar_rockmode))
                {
                    case 
1// Health
                    
{
                        new 
iHealth get_user_health(Touched)

                        if( 
iHealth >= && iHealth <= get_pcvar_num(cvar_rock_damage))
                        {
                            
ExecuteHamBHam_KilledTouchedTankKiller)
                            
zp_set_user_ammo_packs(TankKillerzp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
                        }
                        else
                        {
                            
set_user_health(Touchedget_user_health(Touched) - get_pcvar_num(cvar_rock_damage))
                            
zp_set_user_ammo_packs(TankKillerzp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
                        }
                    }
                    case 
2// Kill
                    
{
                        if(
zp_get_user_survivor(Touched))
                            return
                                
                        
ExecuteHamBHam_KilledTouchedTankKiller)
                        
zp_set_user_ammo_packs(TankKillerzp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
                    }
                    case 
3//infect
                    
{
                        if(
zp_get_user_survivor(Touched))
                            return
                            
                        
zp_infect_user(TouchedTankKiller11)
                        
zp_set_user_ammo_packs(TankKillerzp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))

                    }
                    case 
4//BadAim
                    
{
                        new 
Float:vec[3] = {100.0,100.0,100.0}
                        
                        
entity_set_vector(Touched,EV_VEC_punchangle,vec)  
                        
entity_set_vector(Touched,EV_VEC_punchangle,vec)
                        
entity_set_vector(Touched,EV_VEC_punchangle,vec
                        
                        
zp_set_user_ammo_packs(TankKillerzp_get_user_ammo_packs(TankKiller) + get_pcvar_num(cvar_rock_reward))
                        
set_task(1.50"EndVictimAim"Touched)
                    }
                }
            }
        }
        
    if(
equal(Class, "func_breakable") && entity_get_int(TouchedEV_INT_solid) != SOLID_NOT)
        
force_use(RockEntTouched)
        
    
remove_entity(RockEnt)
    
    if(!
is_user_alive(Touched))
        return
        
    static 
origin1[3]
    
get_user_origin(Touchedorigin1)
    
    
message_begin(MSG_BROADCAST,SVC_TEMPENTITYorigin1);
    
write_byte(TE_BREAKMODEL); 
    
write_coord(origin1[0]);  
    
write_coord(origin1[1]);
    
write_coord(origin1[2] + 24); 
    
write_coord(16); 
    
write_coord(16); 
    
write_coord(16); 
    
write_coord(random_num(-50,50)); 
    
write_coord(random_num(-50,50)); 
    
write_coord(25);
    
write_byte(10); 
    
write_short(rockmodel); 
    
write_byte(10); 
    
write_byte(25);
    
write_byte(0x01); 
    
message_end();
}

public 
EndVictimAim(Touched)
{
    new 
Float:vec[3] = {-100.0,-100.0,-100.0}
    
entity_set_vector(Touched,EV_VEC_punchangle,vec)  
    
entity_set_vector(Touched,EV_VEC_punchangle,vec)
    
entity_set_vector(Touched,EV_VEC_punchangle,vec)
}

public 
MakeRock(id)
{
            
    new 
Float:Origin[3]
    new 
Float:Velocity[3]
    new 
Float:vAngle[3]

    new 
RockSpeed get_pcvar_num(cvar_rock_speed)

    
entity_get_vector(idEV_VEC_origin Origin)
    
entity_get_vector(idEV_VEC_v_anglevAngle)

    new 
NewEnt create_entity("info_target")

    
entity_set_string(NewEntEV_SZ_classname"acid_ent")

    
entity_set_model(NewEntrock_model2)

    
entity_set_size(NewEntFloat:{-1.5, -1.5, -1.5}, Float:{1.51.51.5})

    
entity_set_origin(NewEntOrigin)
    
entity_set_vector(NewEntEV_VEC_anglesvAngle)
    
entity_set_int(NewEntEV_INT_solid2)

    
entity_set_int(NewEntEV_INT_rendermode5)
    
entity_set_float(NewEntEV_FL_renderamt200.0)
    
entity_set_float(NewEntEV_FL_scale1.00)

    
entity_set_int(NewEntEV_INT_movetype5)
    
entity_set_edict(NewEntEV_ENT_ownerid)

    
velocity_by_aim(idRockSpeed  Velocity)
    
entity_set_vector(NewEntEV_VEC_velocity ,Velocity)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(NewEnt// entity
    
write_short(g_trailSprite// sprite
    
write_byte(5// life
    
write_byte(6// width
    
write_byte(0// r
    
write_byte(255// g
    
write_byte(0// b
    
write_byte(255// brightness
    
message_end()
    
    return 
PLUGIN_HANDLED
}

stock print_chatColor(const id,const input[], any:...)
{
    new 
msg[191], players[32], count 1;
    
vformat(msg,190,input,3);
    
replace_all(msg,190,"\g","^4");// green
    
replace_all(msg,190,"\n","^1");// normal
    
replace_all(msg,190,"\t","^3");// team
    
    
if (idplayers[0] = id; else get_players(players,count,"ch");
    for (new 
i=0;i<count;i++)
    if (
is_user_connected(players[i]))
    {
        
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
        
write_byte(players[i]);
        
write_string(msg);
        
message_end();
    }

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3082\\ f0\\ fs16 \n\\ par }
*/ 

Estoy usando esta clase. El poison funciona con bots, pero no funciona en el multijugador(server).Alguien me puede ayudar? Gracias.
[Zombie Escape] My Maps

ze_ATIX_panic_s2{100%}
Responder
#2
Pasa una captura de los logs consola

Plugins Y Mods En Venta Nothingdohere
Mods Process¡
Mod Capture The Flag Halo / 2019 [70%]
Mod Christmas Level + Weapons Special / 2019 [20%]
Deathrun Levels + Saw / 2017 [100%]
Mod Surf Levels >Free Link< [100%]

Zombie Giant Test [10%]
Boss Project¡
Boss CSO For Cs 1.6 [On Sale] [Videos]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)