Raised This Month: $ Target: $400
 0% 

Biohazard Smoker class


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 12-07-2014 , 08:33   Re: Biohazard Smoker class
Reply With Quote #6

New update. ;)
PHP Code:
#include <amxmodx>
#include <biohazard>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#define PLUGIN  "Class: Smoker (trage oamenii)"
#define AUTHOR  "MaHu"
#define VERSION "0.1"

//Main Class, modelT & Sprite Beam
new g_Line

#define ICON_HIDE 0
#define ICON_SHOW 1
#define ICON_FLASH 2

new const generic_models[][] = { "models/alex/gonome/gonome.mdl" 

//Sounds
new g_sndMiss[] = "left4dead/Smoker_TongueHit_miss.wav"
new g_sndDrag[] = "left4dead/Smoker_TongueHit_drag.wav"

//Some vars
new g_hooked[33], g_hooksLeft[33], g_unable2move[33], g_ovr_dmg[33]
new 
Float:g_lastHook[33]
new 
boolg_drag_i[33] = false

//Cvars
new cvar_maxdragscvar_dragspeedcvar_cooldowncvar_dmg2stopcvar_matescvar_unb2move

new g_class

public plugin_precache( )
{
    
precache_sound(g_sndDrag)
    
precache_sound(g_sndMiss)
    
g_Line precache_model("sprites/zbeam4.spr")
    
    for (new 
0sizeof generic_modelsi++)
        
precache_model(generic_models[i])
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
cvar_dragspeed register_cvar("smoker_dragspeed""220")
    
cvar_maxdrags register_cvar("smoker_maxdrags""14")
    
cvar_cooldown register_cvar("smoker_cooldown""1")
    
cvar_dmg2stop register_cvar("smoker_dmg2stop""100")
    
cvar_mates register_cvar("smoker_mates""0")
    
cvar_unb2move register_cvar("smoker_unable_move""1")
    
    
register_event("ResetHUD""newSpawn""b")
    
register_event("DeathMsg""smoker_death""a")
    
    
register_forward(FM_CmdStart"FwdCmdStart");
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
    
g_class register_class("Smoker (trage oamenii)""pe Q")
    if(
g_class != -1)
    {
        
set_class_data(g_classDATA_HEALTH500.0)
        
set_class_data(g_classDATA_SPEED290.0)
        
set_class_data(g_classDATA_GRAVITY1.0)
        
set_class_data(g_classDATA_DEFENCE0.087)
        
set_class_data(g_classDATA_HITSPEED0.95)
        
set_class_data(g_classDATA_HITDELAY0.15)
        
set_class_data(g_classDATA_REGENDLY0.20)
        
set_class_data(g_classDATA_HITREGENDLY2.2)
        
set_class_data(g_classDATA_KNOCKBACK0.0)
    }
}

public 
event_infect(victim)
{
    if(
get_user_class(victim) == g_class)
    {
        
g_hooksLeft[victim] = get_pcvar_num(cvar_maxdrags)
    }
}

public 
newSpawn(id)
{
    if (
g_hooked[id])
        
drag_end(id)
}

public 
drag_start(id// starts drag, checks if player is Smoker, checks cvars
{  
    if (
is_user_zombie(id) && (get_user_class(id) == g_class) && !g_drag_i[id]) {
        
        static 
Float:cdown
        cdown 
get_pcvar_float(cvar_cooldown)
        if (!
is_user_alive(id)) {
            
client_print(idprint_chat"Nu poti trage mort!")
            return 
PLUGIN_HANDLED
        
}
        if (
g_hooksLeft[id] <= 0) {
            
client_print(idprint_chat"Nu poti trage!")
            return 
PLUGIN_HANDLED
        
}
        if (
get_gametime() - g_lastHook[id] < cdown) {
            
client_print(idprint_chat"Asteapta %.f0 sec.!"get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))
            return 
PLUGIN_HANDLED
        
}
        
        new 
hooktargetbody
        get_user_aiming
(idhooktargetbody)
        
        if (
is_user_alive(hooktarget)) {
            if (!
is_user_zombie(hooktarget))
            {
                
                
g_hooked[id] = hooktarget
                emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
            }
            else
            {
                if (
get_pcvar_num(cvar_mates) == 1)
                {
                    
g_hooked[id] = hooktarget
                    emit_sound
(hooktargetCHAN_BODYg_sndDrag1.0ATTN_NORM0PITCH_HIGH)
                }
                else
                {
                    
client_print(idprint_chat"Este coechipier!")
                    return 
PLUGIN_HANDLED
                
}
            }
            if (
get_pcvar_float(cvar_dragspeed) <= 0.0)
                
cvar_dragspeed 1
            
            
new parm[2]
            
parm[0] = id
            parm
[1] = hooktarget
            
            set_task
(0.1"smoker_reelin"idparm2"b")
            
harpoon_target(parm)
            
            
g_hooksLeft[id]--
            
client_print(idprint_chat"Poti trage de %d time%s"g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" "s")
            
g_drag_i[id] = true
            
            
if(get_pcvar_num(cvar_unb2move) == 1)
                
g_unable2move[hooktarget] = true
            
            
if(get_pcvar_num(cvar_unb2move) == 2)
                
g_unable2move[id] = true
            
            
if(get_pcvar_num(cvar_unb2move) == 3)
            {
                
g_unable2move[hooktarget] = true
                g_unable2move
[id] = true
            
}
            } else {
            
g_hooked[id] = 33
            noTarget
(id)
            
emit_sound(hooktargetCHAN_BODYg_sndMiss1.0ATTN_NORM0PITCH_HIGH)
            
g_drag_i[id] = true
            g_hooksLeft
[id]--
            
client_print(idprint_chat"Poti trage de %d time%s"g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" "s")
        }
    }
    else
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
smoker_reelin(parm[]) // dragging player to smoker
{
    new 
id parm[0]
    new 
victim parm[1]
    if (!
g_hooked[id] || !is_user_alive(victim))
    {
        
drag_end(id)
        return
    }
    new 
Float:fl_Velocity[3]
    new 
idOrigin[3], vicOrigin[3]
    
get_user_origin(victimvicOrigin)
    
get_user_origin(ididOrigin)
    new 
distance get_distance(idOriginvicOrigin)
    if (
distance 1) {
        new 
Float:fl_Time distance get_pcvar_float(cvar_dragspeed)
        
fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
        fl_Velocity
[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
        fl_Velocity
[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
        
} else {
        
fl_Velocity[0] = 0.0
        fl_Velocity
[1] = 0.0
        fl_Velocity
[2] = 0.0
    
}
    
entity_set_vector(victimEV_VEC_velocityfl_Velocity//<- rewritten. now uses engine
}

public 
drag_end(id// drags end function
{
    
g_hooked[id] = 0
    beam_remove
(id)
    
remove_task(id)
    
    if (
g_drag_i[id])
        
g_lastHook[id] = get_gametime()
    
    
g_drag_i[id] = false
    g_unable2move
[id] = false
}

public 
smoker_death() // if smoker dies drag off
{
    new 
id read_data(2)
    
    
beam_remove(id)
    
    if (
g_hooked[id])
        
drag_end(id)
}

public 
fw_TakeDamage(victiminflictorattackerFloat:damage// if take damage drag off
{
    if (
is_user_alive(attacker) && (get_pcvar_num(cvar_dmg2stop) > 0))
    {
        
g_ovr_dmg[victim] = g_ovr_dmg[victim] + floatround(damage)
        if (
g_ovr_dmg[victim] >= get_pcvar_num(cvar_dmg2stop))
        {
            
g_ovr_dmg[victim] = 0
            drag_end
(victim)
            return 
HAM_IGNORED;
        }
    }
    return 
HAM_IGNORED;
}

public 
FwdCmdStart(iduc_handle)
{
    if (!
is_user_alive(id) || !is_user_zombie(id))
        return
    
    static 
ButtonOldButtons;
    
Button get_uc(uc_handleUC_Buttons);
    
OldButtons pev(idpev_oldbuttons);
   
    if((
Button IN_USE) && (OldButtons IN_USE))
    {
        
drag_start(id)
    }
    
    if(!(
Button IN_USE) && (OldButtons IN_USE))
    {
        
drag_end(id)
    }
    
    if (!
g_drag_i[id]) 
    {
        
g_unable2move[id] = false
    
}
    
    if (
g_unable2move[id] && get_pcvar_num(cvar_unb2move) > 0)
    {
        
set_pev(idpev_maxspeed1.0)
    }
}

public 
harpoon_target(parm[]) // set beam (ex. tongue:) if target is player
{
    new 
id parm[0]
    new 
hooktarget parm[1]
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(8// TE_BEAMENTS
    
write_short(id)
    
write_short(hooktarget)
    
write_short(g_Line// sprite index
    
write_byte(0// start frame
    
write_byte(0// framerate
    
write_byte(200// life
    
write_byte(8// width
    
write_byte(1// noise
    
write_byte(155// r, g, b
    
write_byte(155// r, g, b
    
write_byte(55// r, g, b
    
write_byte(90// brightness
    
write_byte(10// speed
    
message_end()
}

public 
noTarget(id// set beam if target isn't player
{
    new 
endorigin[3]
    
get_user_origin(idendorigin3)
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byteTE_BEAMENTPOINT ); // TE_BEAMENTPOINT
    
write_short(id)
    
write_coord(endorigin[0])
    
write_coord(endorigin[1])
    
write_coord(endorigin[2])
    
write_short(g_Line// sprite index
    
write_byte(0// start frame
    
write_byte(0// framerate
    
write_byte(200// life
    
write_byte(8// width
    
write_byte(1// noise
    
write_byte(155// r, g, b
    
write_byte(155// r, g, b
    
write_byte(55// r, g, b
    
write_byte(75// brightness
    
write_byte(0// speed
    
message_end()
}

public 
beam_remove(id// remove beam
{
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(99//TE_KILLBEAM
    
write_short(id//entity
    
message_end()


Last edited by zmd94; 12-07-2014 at 10:38.
zmd94 is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:22.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode