AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Biohazard Smoker class (https://forums.alliedmods.net/showthread.php?t=252663)

alexclaudiu2003 12-07-2014 05:16

Biohazard Smoker class
 
Hello,
i want to drag humans with USE BUTTON (E)

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 bool: g_bind_use[33] = false, bool: g_bind_or_not[33] = false, bool: g_drag_i[33] = false
//Cvars
new cvar_maxdrags, cvar_dragspeed, cvar_cooldown, cvar_dmg2stop, cvar_mates, cvar_unb2move
//Menu keys
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3
new g_class
new gmsgIcon
public plugin_precache( )
{
 precache_sound(g_sndDrag)
 precache_sound(g_sndMiss)
 g_Line = precache_model("sprites/zbeam4.spr")
 
 for (new i = 0; i < sizeof generic_models; i++)
 precache_model(generic_models[i])
}
public plugin_init()
{
 gmsgIcon = get_user_msgid("StatusIcon")
 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_PlayerPreThink, "fw_PlayerPreThink")
 RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
 register_clcmd("+drag","drag_start", ADMIN_USER, "bind ^"key^" ^"+drag^"")
 register_clcmd("-drag","drag_end")
 register_menucmd(register_menuid("bind q +drag?"), keys, "bind_q_key")
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        g_class = register_class("Smoker (trage oamenii)", "pe Q")
 if(g_class != -1)
 {
 set_class_data(g_class, DATA_HEALTH, 500.0)
 set_class_data(g_class, DATA_SPEED, 290.0)
 set_class_data(g_class, DATA_GRAVITY, 1.0)
 set_class_data(g_class, DATA_DEFENCE, 0.087)
 set_class_data(g_class, DATA_HITSPEED, 0.95)
 set_class_data(g_class, DATA_HITDELAY, 0.15)
 set_class_data(g_class, DATA_REGENDLY, 0.20)
 set_class_data(g_class, DATA_HITREGENDLY, 2.2)
 set_class_data(g_class, DATA_KNOCKBACK, 0)
 }
}
public event_infect(victim){
        if(get_user_class(victim) == g_class){
 g_hooksLeft[victim] = get_pcvar_num(cvar_maxdrags)
 
 if (!g_bind_or_not[victim])
 {
 message_begin( MSG_ONE, gmsgIcon, {0,0,0}, victim )
 write_byte( ICON_FLASH ) // status
 write_string( "Smoker (trage oamenii)" ) // sprite name
 write_byte( 255 ) // red
 write_byte( 0 ) // green
 write_byte( 0 ) // blue
 message_end()
 return PLUGIN_CONTINUE
 }
 }
 return PLUGIN_CONTINUE
}
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(id, print_chat, "Nu poti trage mort!")
  return PLUGIN_HANDLED
  }
  if (g_hooksLeft[id] <= 0) {
  client_print(id, print_chat, "Nu poti trage!")
  return PLUGIN_HANDLED
  }
  if (get_gametime() - g_lastHook[id] < cdown) {
  client_print(id, print_chat, "Asteapta %.f0 sec.!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))
  return PLUGIN_HANDLED
  }
 
  new hooktarget, body
  get_user_aiming(id, hooktarget, body)
 
  if (is_user_alive(hooktarget)) {
  if (!is_user_zombie(hooktarget))
    {
   
    g_hooked[id] = hooktarget
    emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)
    }
  else
    {
    if (get_pcvar_num(cvar_mates) == 1)
    {
      g_hooked[id] = hooktarget
      emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)
    }
    else
    {
      client_print(id, print_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", id, parm, 2, "b")
  harpoon_target(parm)
 
  g_hooksLeft[id]--
  client_print(id, print_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(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH)
  g_drag_i[id] = true
  g_hooksLeft[id]--
  client_print(id, print_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(victim, vicOrigin)
 get_user_origin(id, idOrigin)
 new distance = get_distance(idOrigin, vicOrigin)
 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(victim, EV_VEC_velocity, fl_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(victim, inflictor, attacker, Float: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 fw_PlayerPreThink(id)
{
 if (!is_user_alive(id))
  return FMRES_IGNORED
 
 new button = get_user_button(id)
 new oldbutton = get_user_oldbutton(id)
 
 if (g_bind_use[id] && is_user_zombie(id) && get_user_class(id) == g_class)
 {
  if (!(oldbutton & IN_USE) && (button & IN_USE))
  drag_start(id)
 
  if ((oldbutton & IN_USE) && !(button & 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(id, pev_maxspeed, 1.0)
 }
 
 return PLUGIN_CONTINUE
}
public harpoon_target(parm[]) // set beam (ex. tongue:) if target is player
{
 new id = parm[0]
 new hooktarget = parm[1]
 message_begin(MSG_BROADCAST, SVC_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 bind_q_key(id, keys)
{
 g_bind_or_not[id] = true
 switch(keys)
 {
  case 0:
  client_cmd(id, "bind q ^"+drag^"")
 
  case 1:
  client_print(id, print_chat, "Pentru a trage (bind ^'^'key^'^' ^'^'+drag^'^') hold binded key")
  default:
  g_bind_or_not[id] = false
 }
 
 return PLUGIN_HANDLED
}
public noTarget(id) // set beam if target isn't player
{
 new endorigin[3]
 get_user_origin(id, endorigin, 3)
 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
 write_byte( TE_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_BROADCAST, SVC_TEMPENTITY)
 write_byte(99) //TE_KILLBEAM
 write_short(id) //entity
 message_end()
}


zmd94 12-07-2014 05:44

Re: Biohazard Smoker class
 
That code already has the feature to use the ability with IN_USE button:
Code:

public fw_PlayerPreThink(id)
{
    if (!is_user_alive(id))
        return FMRES_IGNORED
   
    new button = get_user_button(id)
    new oldbutton = get_user_oldbutton(id)
   
    if (g_bind_use[id] && is_user_zombie(id) && get_user_class(id) == g_class)
    {
        if (!(oldbutton & IN_USE) && (button & IN_USE))
            drag_start(id)
       
        if ((oldbutton & IN_USE) && !(button & 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(id, pev_maxspeed, 1.0)
    }
   
    return PLUGIN_CONTINUE
}


alexclaudiu2003 12-07-2014 06:30

Re: Biohazard Smoker class
 
It has but don't work :(. Work only if manualy bind q +drag

zmd94 12-07-2014 06:41

Re: Biohazard Smoker class
 
So, do you want to completely remove the bind feature?

alexclaudiu2003 12-07-2014 06:52

Re: Biohazard Smoker class
 
Yes, bind is not ok, use button it perfect

zmd94 12-07-2014 08:33

Re: Biohazard Smoker class
 
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()



alexclaudiu2003 12-07-2014 09:12

Re: Biohazard Smoker class
 
Can't compile :(
http://www.image-share.com/upload/2779/89.jpg

zmd94 12-07-2014 10:00

Re: Biohazard Smoker class
 
I have updated the code. ;)

alexclaudiu2003 12-07-2014 10:17

Re: Biohazard Smoker class
 
Almost done, only 2 errors, fail to compile.

http://www.image-share.com/upload/2779/99.jpg

zmd94 12-07-2014 10:38

Re: Biohazard Smoker class
 
Alright. I have updated again the code. ;)


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

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