Raised This Month: $51 Target: $400
 12% 

Biohazard Smoker class


Post New Thread Reply   
 
Thread Tools Display Modes
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 12-07-2014 , 11:35   Re: Biohazard Smoker class
Reply With Quote #11

Man, I love you ! it worked perfectly ! 3 years had this problem, Thank you very much !
You're the only one who helped me, the 2nd time. If you spend your holiday in Romania, i take you to the most beautiful clubs ;)
alexclaudiu2003 is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 12-07-2014 , 12:02   Re: Biohazard Smoker class
Reply With Quote #12

LOL, 3 years.

By the way, I glad if I can help you. ;)
zmd94 is offline
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 10-05-2015 , 08:46   Re: Biohazard Smoker class
Reply With Quote #13

Hello again I found a bug, If i drag a human and someone make them zombie before me, the drag does not stop, zombie drag zombie )
alexclaudiu2003 is offline
Krtola
Veteran Member
Join Date: Oct 2013
Location: Serbia
Old 10-05-2015 , 09:04   Re: Biohazard Smoker class
Reply With Quote #14

Try this:
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(victimattacker)
{
    if(
get_user_class(victim) == g_class)
    {
        
g_hooksLeft[victim] = get_pcvar_num(cvar_maxdrags)
    }

    if(
is_user_zombie(victim) && g_hooked[victim]
    {
        
drag_end(victim)
    }
}

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()

Krtola is offline
Send a message via Skype™ to Krtola
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 10-05-2015 , 09:15   Re: Biohazard Smoker class
Reply With Quote #15

//// smokerv2.sma
// C:\Users\Public\servers\HLDS\cstrike\addons\a mxmodx\scripting\smokerv2.sma(85
) : error 001: expected token: ")", but found "{"
//
// 1 Error.
// Could not locate output file compiled\smokerv2.amx (compile failed).
//
// Compilation Time: 0,42 sec
// ----------------------------------------
Press enter to exit ...
alexclaudiu2003 is offline
Krtola
Veteran Member
Join Date: Oct 2013
Location: Serbia
Old 10-05-2015 , 09:25   Re: Biohazard Smoker class
Reply With Quote #16

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(victimattacker

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

    if(
is_user_zombie(victim) && g_hooked[victim])
    { 
        
drag_end(victim
    } 


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 
             
            
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] = 
    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] = 
            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() 

Krtola is offline
Send a message via Skype™ to Krtola
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 10-05-2015 , 10:08   Re: Biohazard Smoker class
Reply With Quote #17

only beam disappear, drag continue
alexclaudiu2003 is offline
Krtola
Veteran Member
Join Date: Oct 2013
Location: Serbia
Old 10-05-2015 , 10:25   Re: Biohazard Smoker class
Reply With Quote #18

This should work fine:
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(victimattacker

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

    if(
is_user_zombie(victim) && g_hooked[victim])
    { 
        
drag_end(victim
    } 


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 
             
            
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) || is_user_zombie(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] = 
    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] = 
            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() 

Krtola is offline
Send a message via Skype™ to Krtola
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 10-05-2015 , 12:22   Re: Biohazard Smoker class
Reply With Quote #19

Yes, yes, it works ! Thank you ;)
alexclaudiu2003 is offline
alexclaudiu2003
Senior Member
Join Date: Aug 2011
Location: Romania
Old 12-29-2016 , 17:31   Re: Biohazard Smoker class
Reply With Quote #20

It's possble to put a distance to drag ?
alexclaudiu2003 is offline
Reply



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 17:50.


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