View Single Post
DON KHAN 1
Senior Member
Join Date: Mar 2019
Location: Pakistan
Old 08-08-2019 , 13:29   Re: code optimization
Reply With Quote #2

Try This

PHP Code:
/*********************************** Includes ************************************/

#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <zombieplague>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define Red print_team_red
#endif
/*********************************** Defines ************************************/

//pickup weapon
#define NormalAmmo      pev_iuser1
#define IceAmmo         pev_iuser2
#define ExplodeAmmo     pev_iuser3
#define FireAmmo        pev_iuser4

// drop weapons
#define PRIMARY_WEAPONS_BIT_SUM ((1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90))

/*********************************** Weapon/Arrow/Models/Sounds/Sprites ************************************/

new const P_MODEL[]= "models/bow/p_Shina_by_Oxigen.mdl"
new const V_MODEL[]= "models/bow/v_Shina_by_Oxigen.mdl"
new const W_MODEL[]= "models/bow/w_Shina_by_Oxigen.mdl"
new const ARROW_MODEL[]= "models/bow/arrow.mdl"


new const ARROW_SHOOT[]= "bow_shoot.wav"
new const ARROW_SWITCH[]= "bow_switch.wav"

new const BURN_CLASSNAME[]= "flame"
new const BURN_MODEL[]= "sprites/bow/flame_burn01.spr"

/*********************************** Cvars ************************************/

new BOW_ONE_ROUND BASE_SPEED BOUNS_SPEED BURN_LIFE BURN_PERIOD BURN_DAMAGE NORMAL_DAMAGE SPEED_LOW_ICE SLOW_ICE_TIME EXPLODE_DAMAGE EXPLODE_HITRADIUS NORMAL_AMMO FIRE_AMMO ICE_AMMO EXPLODE_AMMO NEXT_SHOT_TIME

/*********************************** Global Variables ************************************/

new g_exp_sprid

new Float:g_start_time[33], Float:g_finish_time[33]

new 
Float:g_Burn[33]

new 
g_slowed[33], g_pressed[33], Float:g_old_speed[33]
//Global Variables related to weapon ammo
new g_ammo[33], g_normal_ammo[33], g_fire_ammo[33], g_ice_ammo[33],  g_explode_ammo[33]

// Player variables
new g_HasBow[33// whether player has bow

new g_bow_mode[33], g_dmg_mode[33]

new 
g_MaxPlayers

// Render effects debug
new g_FrozenRenderingFx[33]
new 
Float:g_FrozenRenderingColor[33][3]
new 
g_FrozenRenderingRender[33]
new 
Float:g_FrozenRenderingAmount[33]

// Message ID's
new g_MsgDamageg_msgBarTime

// ITEM
new g_itemid

/*********************************** Bools ************************************/

new bool:bow_hit[33// check if bow hit then allow switching
new bool:draw_wpn[33]

/*********************************** Enums ************************************/

// Weapon animation sequences
enum {
    
anim_bang,
    
anim_idle,
    
anim_shot1,
    
anim_shot2,
    
anim_reload,
    
anim_draw
}

// bow modes
enum
{
    
NORMAL_MODE 1,
    
FIRE_MODE 4,
    
ICE_MODE 3,
    
EXPLODE_MODE 2
}

enum
{
    
dmg_fire 1
}

/*********************************** Precaching Models/Sounds/Sprites ************************************/

public plugin_precache()
{
    
// Models
    
precache_model(P_MODEL)
    
precache_model(V_MODEL)
    
precache_model(W_MODEL)
    
precache_model(ARROW_MODEL)
    
precache_model(BURN_MODEL)
  
    
// Sounds
    
precache_sound(ARROW_SHOOT)
    
precache_sound(ARROW_SWITCH)
    
//precache_sound(GRENADE_DRAW)
    
precache_sound("weapons/357_cock1.wav")

    
g_exp_sprid engfunc(EngFunc_PrecacheModel"sprites/zerogxplode.spr")
}


/*********************************** Registering Plugin ************************************/

public plugin_init()
{
    
register_plugin("[ZP][Extra Item] Bow""1.4""LearninG")
    
    
//Events
    
register_event("CurWeapon""Event_CurrentWeapon""be""1=1")
    
register_event("HLTV""Event_NewRound""a""1=0""2=0");
    
    
//Cvars
    
BOW_ONE_ROUND register_cvar("zp_bow_one_round" "1")
    
BASE_SPEED register_cvar("zp_arrow_base_speed" "650")
    
BOUNS_SPEED register_cvar("zp_arrow_bouns_speed" "950")
    
BURN_LIFE register_cvar("zp_burn_life" "5.0")
    
BURN_PERIOD register_cvar("zp_burn_period" "1.0")
    
BURN_DAMAGE register_cvar("zp_burn_damage" "100")
    
NORMAL_DAMAGE register_cvar("zp_normal_damage" "100")
    
SPEED_LOW_ICE register_cvar("zp_speed_low_ice" "0.3")
    
SLOW_ICE_TIME register_cvar("zp_slow_ice_time" "3.0")
    
EXPLODE_DAMAGE register_cvar("zp_explode_damage" "1700")
    
EXPLODE_HITRADIUS register_cvar("zp_explode_hitradius" "400")
    
NORMAL_AMMO register_cvar("zp_normal_ammo" "500")
    
FIRE_AMMO register_cvar("zp_fire_ammo" "10")
    
ICE_AMMO register_cvar("zp_ice_ammo" "10")
    
EXPLODE_AMMO register_cvar("zp_explode_ammo" "3")
    
NEXT_SHOT_TIME register_cvar("zp_arrow_next_shot_time" "0.97")
  
    
// Forwards
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled")
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_scout""fw_bow_PrimaryAttack")
    
RegisterHam(Ham_Weapon_SecondaryAttack"weapon_scout""fw_bow_SecondaryAttack")
    
RegisterHam(Ham_Weapon_Reload"weapon_scout""fw_bow_Reload")
    
RegisterHam(Ham_Item_Deploy"weapon_scout""fw_bow_Deploy_Post"1)
    
register_think(BURN_CLASSNAME"BurnThink")
    
register_forward(FM_CmdStart"fw_CmdStart")
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)
    
register_clcmd("drop","dropcmd")
    
register_touch("bow""player""bow_Touched")
    
// Messages
    
g_MsgDamage get_user_msgid("Damage")
    
g_msgBarTime get_user_msgid("BarTime")

    
g_itemid zp_register_extra_item("Magical Bow",50ZP_TEAM_HUMAN)

    
g_MaxPlayers get_maxplayers()


}
/*********************************** Public Functions ************************************/

public plugin_cfg()
{
    static 
cfgdir[64]
    
get_localinfo("amxx_configsdir"cfgdir63)
    
    
// Execute custom config file
    
server_cmd("exec %s/bowsettings.cfg"cfgdir)
    
server_exec()
}

public 
zp_user_infected_pre(idinfectornemesis)
{
    if (
g_HasBow[id])
    {
        
dropcmd(id)
    }
    return 
PLUGIN_CONTINUE
}

public 
bow_Touchedentid ){
    if(
1<=id<=32
    {
        if(
allowed_toucher(id))
        {
            
// Pick up weapon
            
give_bow(id)
            
g_normal_ammo[id] = pev(entNormalAmmo)
            
g_ice_ammo[id] = pev(entIceAmmo)
            
g_explode_ammo[id] = pev(entExplodeAmmo)
            
g_fire_ammo[id] = pev(entFireAmmo)
            
remove_entity(ent)   // remove entity after giving player the bow and setting up ammos
            
update_ammo(id)
        }
    }
}

public 
zp_extra_item_selected(playeritemid)
{
    if (
g_HasBow[player])
    {
        
client_print_color(player,print_chat"^4[ZP]^1 You already have a Bow!")
        return 
ZP_PLUGIN_HANDLED
    
}
         else if (
itemid == g_itemid && is_user_alive(player))
    {
        
client_print_color(playerprint_chat"^4[ZP]^1 You bought Bow! [Attack 2 for change mods]")
        
give_bow(player)
    } 
    return 
PLUGIN_CONTINUE
    
}

public 
Event_NewRound()
{
    
//check if any changes happened on cfg file.
    
plugin_cfg()
    static 
players[32], numid
    get_players
(playersnum)
    for (new 
0numi++)
    {
        
id players[i]
        
set_user_rendering(idkRenderFxGlowShell000kRenderNormal25
        
g_Burn[id]=0.0   
        g_slowed
[id] = false
        remove_bow
()
        if (
get_pcvar_num(BOW_ONE_ROUND)==1)
    {
        if (
g_HasBow[id] && user_has_weapon(idCSW_SCOUT))
        {
            
fm_strip_user_gun(idCSW_SCOUT)
            
g_HasBow[id] = false
        
}
    }
    
    }
}
public 
dropcmd(id)
{
    if(
g_HasBow[id] && get_user_weapon(id) == CSW_SCOUT)
    {
        new 
Float:Aim[3],Float:origin[3]
        
VelocityByAim(id64Aim)
        
entity_get_vector(id,EV_VEC_origin,origin)
        
        
origin[0] += Aim[0]
        
origin[1] += Aim[1]
        
        new 
bow create_entity("info_target")
        
entity_set_string(bow,EV_SZ_classname,"bow")
        
entity_set_model(bow,W_MODEL)    
        
        
entity_set_size(bow,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
        
entity_set_int(bow,EV_INT_solid,1)
        
        
set_pevbowNormalAmmog_normal_ammo[id])
        
set_pevbowIceAmmog_ice_ammo[id])
        
set_pevbowExplodeAmmog_explode_ammo[id])
        
set_pevbowFireAmmog_fire_ammo[id])
        
        
        
        
entity_set_int(bow,EV_INT_movetype,6)
        
entity_set_vector(bow,EV_VEC_origin,origin)
        
g_HasBow[id] = false
        remowegun
(id)
        return 
PLUGIN_HANDLED
    

    return 
PLUGIN_CONTINUE
}   

// remove gun  and save all guns
public remowegun(id) {
    new 
wpnList[32]
    new 
number
    get_user_weapons
(id,wpnList,number)
    for (new 
0;number ;i++) {
        if (
wpnList[i] == CSW_SCOUT) {
            
fm_strip_user_gun(idwpnList[i])
        }
    }
}   


// Client connected
public client_putinserver(id)
{
    
// Reset all
    
g_HasBow[id] = false
    g_finish_time
[id] = 0.0
}

// Current weapon player is holding
public Event_CurrentWeapon(id)
{
    if (
is_user_bot(id))
        return

    if (!
g_HasBow[id])
        return

    if(!
is_user_connected(id))
        return
  
    
// Read weapon ID
    
new weaponID read_data(2)
  
    if (
weaponID == CSW_SCOUT)
    {
        if (
g_HasBow[id])
        {
            if(!
draw_wpn[id])
            {
            
                
//playanim(id, anim_draw)
             
UTIL_PlayWeaponAnimation(idanim_draw)
             
update_ammo(id)
                
//emit_sound(id, CHAN_WEAPON, GRENADE_DRAW, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                // View model
             
entity_set_string(idEV_SZ_viewmodelV_MODEL)
              
                
// Player model
             
entity_set_string(idEV_SZ_weaponmodelP_MODEL)
             
draw_wpn[id] = true
            
}
        }
        else
        {
            
// View model
            
entity_set_string(idEV_SZ_viewmodel"models/v_scout.mdl")
          
            
// Player model
            
entity_set_string(idEV_SZ_weaponmodel"models/p_scout.mdl")
        }
    }
    else
    {
        
draw_wpn[id] = false
    
}
}

public 
remove_bow() {
    new 
nextitem find_ent_by_class(-1"bow")
    while ((
nextitem find_ent_by_class(-1"bow")) != 0) {
        
remove_entity(nextitem)
    }
    return 
PLUGIN_CONTINUE
}       

// Player killed
public fw_PlayerKilled(victimattackershouldgib)
{
    if (
g_HasBow[victim])       
    {
        
dropcmd(victim)
        
// Reset all
        
set_user_rendering(victimkRenderFxGlowShell000kRenderNormal25)

        
// Remove screen's bar
        
message_begin(MSG_ONEg_msgBarTime_victim)
        
write_byte(0// time
        
write_byte(0// unknown
        
message_end()
      
        
remowegun(victim)
    }
}

public 
give_bow(id)
{
    
give_weapon(id)
     
    
g_bow_mode[id] = NORMAL_MODE
    g_normal_ammo
[id] = get_pcvar_num(NORMAL_AMMO)
    
g_fire_ammo[id] = get_pcvar_num(FIRE_AMMO)
    
g_ice_ammo[id] = get_pcvar_num(ICE_AMMO)
    
g_explode_ammo[id] = get_pcvar_num(EXPLODE_AMMO)
}

//give weapon
public give_weapon(id){
    
g_HasBow[id] = true

    give_item
(id"weapon_scout")
    
engclient_cmd(id"weapon_scout")
    
engclient_cmd(id"weapon_scout")
    
entity_set_string(idEV_SZ_viewmodelV_MODEL)   
    
entity_set_string(idEV_SZ_weaponmodelP_MODEL)
    
update_ammo(id)
}

public 
fw_bow_PrimaryAttack(Weapon)
{
    new 
Player get_pdata_cbase(Weapon414)
  
    if (
g_HasBow[Player])
        return 
HAM_SUPERCEDE

    
return HAM_IGNORED
}

public 
fw_bow_SecondaryAttack(Weapon)
{
    new 
Player get_pdata_cbase(Weapon414)
  
    if (
g_HasBow[Player])
        return 
HAM_SUPERCEDE

    
return HAM_IGNORED
}

public 
fw_bow_Reload(Weapon)
{
    new 
Player get_pdata_cbase(Weapon414)
  
    if (
g_HasBow[Player])
        return 
HAM_SUPERCEDE

    
return HAM_IGNORED
}

public 
fw_bow_Deploy_Post(Weapon)
{
    new 
Player get_pdata_cbase(Weapon414)
  
    
update_ammo(Player)
}

// Command start
public fw_CmdStart(idUC_HandleSeed)
{
    if(!
g_HasBow[id] || !is_user_alive(id))
        return 
FMRES_IGNORED

    
static CurButtonOldButton
  
    CurButton 
get_uc(UC_HandleUC_Buttons)
    
OldButton = (pev(idpev_oldbuttons) & IN_ATTACK)
  
    if(
get_gametime() - g_finish_time[id] > get_pcvar_float(NEXT_SHOT_TIME))
    {
        
// Attack1 button pressed
        
if(CurButton IN_ATTACK && !OldButton)
        {
            if(
get_user_weapon(id) != CSW_SCOUT)
                return 
FMRES_IGNORED

            
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
                return 
FMRES_IGNORED

            g_start_time
[id] = get_gametime()
      

            
//A bar appears in his screen
            
message_begin(MSG_ONE_UNRELIABLEg_msgBarTime_id)
            
write_byte(2// time
            
write_byte(0// unknown
            
message_end()

            
g_pressed[id] = true
        
}

        if(
CurButton IN_ATTACK && OldButton)
        {
            if((
g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
                return 
FMRES_IGNORED

            
if(!g_pressed[id])
                return 
FMRES_IGNORED
      
            
if(get_user_weapon(id) != CSW_SCOUT)
            {
                
g_finish_time[id] = get_gametime()
      
                
FireArrow(id)

                
// Remove screen's bar
                
message_begin(MSG_ONEg_msgBarTime_id)
                
write_byte(0// time
                
write_byte(0// unknown
                
message_end()

                
g_pressed[id] = false
            
}
        }

        if(!(
CurButton IN_ATTACK) && OldButton)
        {           
            if(
get_user_weapon(id) != CSW_SCOUT)
                return 
FMRES_IGNORED

            
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
                return 
FMRES_IGNORED

            
if(!g_pressed[id])
                return 
FMRES_IGNORED

            g_finish_time
[id] = get_gametime()
      
            
FireArrow(id)

            
// Remove screen's bar
            
message_begin(MSG_ONEg_msgBarTime_id)
            
write_byte(0// time
            
write_byte(0// unknown
            
message_end()

            
g_pressed[id] = false
        
}
    }

    if((
CurButton IN_ATTACK2) && !(pev(idpev_oldbuttons) & IN_ATTACK2))
    {       
        if(
get_user_weapon(id) != CSW_SCOUT)
            return 
FMRES_IGNORED

        
if(bow_hit[id])
            return 
FMRES_IGNORED

        
if(!g_pressed[id])
        {
            if(!
is_user_alive(id))
                return 
FMRES_IGNORED

            
switch(g_bow_mode[id])
            {
                case 
1:
                {
                    
g_bow_mode[id]= 4
                    emit_sound
(idCHAN_WEAPON,ARROW_SWITCHVOL_NORMATTN_NORM0PITCH_NORM)
                    
client_print(id,print_center,"Fire Mode")
                    
update_ammo(id)
                }
                case 
2:
                {
                    
g_bow_mode[id]= 1
                    emit_sound
(idCHAN_WEAPON,ARROW_SWITCHVOL_NORMATTN_NORM0PITCH_NORM)
                    
client_print(id,print_center,"Normal Mode")
                    
update_ammo(id)                 
                }
                case 
3:
                {
                    
g_bow_mode[id]= 2
                    emit_sound
(idCHAN_WEAPON,ARROW_SWITCHVOL_NORMATTN_NORM0PITCH_NORM)
                    
client_print(id,print_center,"Explode Mode")
                    
update_ammo(id)       
                }
                case 
4:
                {
                    
g_bow_mode[id]= 3
                    emit_sound
(idCHAN_WEAPON,ARROW_SWITCHVOL_NORMATTN_NORM0PITCH_NORM)
                    
client_print(id,print_center,"Ice Mode")
                    
update_ammo(id)
        }        
         }
      }
    }      return 
FMRES_IGNORED
}

//block anim standard wpn
public fw_UpdateClientData_Post(idsendweaponscd_handle)
{   
    if (!
is_user_alive(id))
        return 
FMRES_IGNORED

    
// Block default sounds   
    
if (get_user_weapon(id) == CSW_SCOUT && g_HasBow[id])
    {
        
set_cd(cd_handleCD_flNextAttackhalflife_time() + 0.001 );
    }

    return 
FMRES_HANDLED
}

// Fire gremade
public FireArrow(id)
{
    
// Set animation
    
UTIL_PlayWeaponAnimation(idanim_shot1)


    
bow_hit[id] = true

    
// Get origin. angle and velocity
    
new velocity[33]
    new 
Float:fAngle[3], Float:fVelocity[3]
    
pev(idpev_v_anglefAngle)
  
    
// Create ent
    
new arrow create_entity("info_target")
  
    
// Not grenade
    
if (!arrow) return PLUGIN_HANDLED

    
// Classname
    
entity_set_string(arrowEV_SZ_classname"bow_arrow")
  
    
// Model
    
entity_set_model(arrowARROW_MODEL)

    if(
g_bow_mode[id] == NORMAL_MODE)
    {
        
set_rendering(arrowkRenderFxGlowShell255255255kRenderNormal70)
        
g_normal_ammo[id]--
    }
    else if(
g_bow_mode[id] == FIRE_MODE)
    {
        
set_rendering(arrowkRenderFxGlowShell25500kRenderNormal70)
        
g_fire_ammo[id]--
    }
    else if(
g_bow_mode[id] == ICE_MODE)
    {
        
set_rendering(arrowkRenderFxGlowShell00255kRenderNormal70)
        
g_ice_ammo[id]--
    }
    else if(
g_bow_mode[id] == EXPLODE_MODE)
    {
        
set_rendering(arrowkRenderFxGlowShell1501050kRenderNormal70)
        
g_explode_ammo[id]--
    }

    
update_ammo(id)

    new 
Float:vOrigin[3],Float:vUp[3]
    
pev(idpev_originvOrigin)
  
    
global_get(glb_v_upvUp)
    new 
up 17
    vOrigin
[0] = vOrigin[0] + vUp[0] * up
    vOrigin
[1] = vOrigin[1] + vUp[1] * up
    vOrigin
[2] = vOrigin[2] + vUp[2] * up
  
    
// Origin
    
entity_set_origin(arrowvOrigin)
  
    
// Angles
    
entity_set_vector(arrowEV_VEC_anglesfAngle)
  
    
// Size
    
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new 
Float:MaxBox[3] = {1.01.01.0}
    
entity_set_vector(arrowEV_VEC_minsMinBox)
    
entity_set_vector(arrowEV_VEC_maxsMaxBox)
  
    
// Interaction
    
entity_set_int(arrowEV_INT_solidSOLID_SLIDEBOX)
  
    
// Movetype
    
entity_set_int(arrowEV_INT_movetypeMOVETYPE_TOSS)
  
    
// Owner
    
entity_set_edict(arrowEV_ENT_ownerid)
  
    
// Velocity
    
new Floatholdtime[33]
    new 
Floatmnoji[33]

    
holdtime[id] = g_finish_time[id] - g_start_time[id]

    if(
holdtime[id] < 1.0holdtime[id] = 1.0
    
if(holdtime[id] > 3.0holdtime[id] = 3.0

  
    mnoji
[id] = get_pcvar_num(BASE_SPEED) + holdtime[id] * get_pcvar_num(BOUNS_SPEED)
    
velocity[id] = floatround(mnoji[id],floatround_round)
    
VelocityByAim(idvelocity[id], fVelocity)
  
    
entity_set_vector(arrowEV_VEC_velocityfVelocity)
  
    
// Launch sound
    
emit_sound(idCHAN_WEAPONARROW_SHOOTVOL_NORMATTN_NORM0PITCH_NORM)
    

    return 
PLUGIN_CONTINUE
}   

// We hit something!!!
public pfn_touch(ptrptd)
{
    
// If ent is valid
    
if (pev_valid(ptr))
    {  
        
// Get classnames
        
static classname[32], classnameptd[32]
        
pev(ptrpev_classnameclassname31)
      
        
// Our ent
        
if(equal(classname"bow_arrow"))
        {
            
// Get it's origin
            
new Float:Origin[3]
            
pev(ptrpev_originOrigin)

            new 
owner pev(ptrpev_owner)

            
bow_hit[owner] = false

            
if(g_bow_mode[owner] == EXPLODE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
            {
                
// Explosion
                
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0)
                
write_byte(TE_EXPLOSION)
                
engfunc(EngFunc_WriteCoordOrigin[0])
                
engfunc(EngFunc_WriteCoordOrigin[1])
                
engfunc(EngFunc_WriteCoordOrigin[2])
                
write_short(g_exp_sprid)
                
write_byte(40)
                
write_byte(30)
                
write_byte(0)
                
message_end()

                
check_radius_damage(ptrowner)
            }

            if(
is_user_alive(ptd))
            {
                if(
cs_get_user_team(ptd) != cs_get_user_team(owner))
                {
                    
g_old_speed[ptd] = get_user_maxspeed(ptd)

                    if(
g_bow_mode[owner] == NORMAL_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
                    {
                        
ExecuteHamB(Ham_TakeDamageptdptrownerget_pcvar_float(NORMAL_DAMAGE), DMG_BULLET)
                    }
        
                    else if(
g_bow_mode[owner] == FIRE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
                    {
                        if (!
g_Burn[ptd])
                        {
                                
g_dmg_mode[ptd] = dmg_fire
                                CreateBurn
(ptdowner)
                        }
                      
                    }
                    else if(
g_bow_mode[owner] == ICE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
                    {
                        if (!
g_slowed[ptd])
                        {

                            
g_FrozenRenderingFx[ptd] = pev(ptdpev_renderfx)
                            
pev(ptdpev_rendercolorg_FrozenRenderingColor[ptd])
                            
g_FrozenRenderingRender[ptd] = pev(ptdpev_rendermode)
                            
pev(ptdpev_renderamtg_FrozenRenderingAmount[ptd])

                            
set_user_rendering(ptdkRenderFxGlowShell0100200kRenderNormal25)
                            
set_user_maxspeed(ptdget_user_maxspeed(ptd) * get_pcvar_float(SPEED_LOW_ICE))
                            
g_slowed[ptd] = true
                            set_task
(get_pcvar_float(SLOW_ICE_TIME), "make_speed"ptd__"a"1)
              
                            
message_begin(MSG_ONE_UNRELIABLEg_MsgDamage_ptd)
                            
write_byte(0// damage save
                            
write_byte(0// damage take
                            
write_long(DMG_DROWN// damage type - DMG_FREEZE
                            
write_coord(0// x
                            
write_coord(0// y
                            
write_coord(0// z
                            
message_end()
                        }
                                        }
                }
            }
            
// We hit breakable
            
if(pev_valid(ptd))
            {
                
pev(ptdpev_classnameclassnameptd31)
                if (
equali(classnameptd"func_breakable"))
                {
                    
// Destroy it
                    //force_use(ptr,ptd)
                
}
            }
            
set_pev(ptrpev_flagsFL_KILLME)
        }
    }   
  
}   

public 
CreateBurn(idattacker)
{
    if(
g_Burn[id])
        return

    if(
g_dmg_mode[id] == dmg_fire)
    {
        new 
ent=CreateAnimationSprite(attackerBURN_CLASSNAMEBURN_MODEL1.010.0)
  
        
set_pev(entpev_solidSOLID_NOT)
        
set_pev(entpev_movetypeMOVETYPE_FOLLOW)
  
        
set_pev(entpev_aimentid)
  
        
set_pev(entpev_fuser2get_gametime()+get_pcvar_float(BURN_LIFE))
  
        
g_Burn[id]=get_gametime()+get_pcvar_float(BURN_PERIOD)
    }
}

public 
BurnThink(ent)
{
    if(!
pev_valid(ent))
        return
      
    static 
Float:lifeaim_ent
  
    pev
(ent,pev_fuser2life)
  
    
aim_ent=pev(entpev_aiment)

    if(
g_dmg_mode[aim_ent] == dmg_fire)
    {   
        if(
get_gametime()>life||!is_user_alive(aim_ent) ||!zp_get_user_zombie(aim_ent))
        {
            
g_Burn[aim_ent]=0.0   
      
            fm_remove_entity
(ent)
      
            return
        }
  
        if(
get_gametime()>g_Burn[aim_ent])
        {
            
ExecuteHamB(Ham_TakeDamageaim_ent ent ,pev(entpev_owner), get_pcvar_float(BURN_DAMAGE), DMG_BURN)
      
            
g_Burn[aim_ent]=get_gametime()+get_pcvar_float(BURN_PERIOD)
        }
    }
}


public 
make_speed(id)
{
    if(
is_user_alive(id) && g_slowed[id])
    {
        
g_slowed[id] = false
        set_user_maxspeed
(idg_old_speed[id])
        
fm_set_rendering_float(idg_FrozenRenderingFx[id], g_FrozenRenderingColor[id], g_FrozenRenderingRender[id], g_FrozenRenderingAmount[id])
    }
}

public 
check_radius_damage(entattacker)
{
    for(new 
0g_MaxPlayersi++)
    {
        if(!
is_user_alive(i))
            continue
        if(
cs_get_user_team(attacker) == cs_get_user_team(i))
            continue
        if(
entity_range(enti) > get_pcvar_num(EXPLODE_HITRADIUS))
            continue
          
        
Do_TakeDamage(entiattackercan_see_fm(enti))
    }
}

public 
Do_TakeDamage(EntVictimAttackercan_see)
{
    static 
Float:DamageFloat:CurrentDis
  
    CurrentDis 
entity_range(EntVictim)
    
Damage get_pcvar_num(EXPLODE_DAMAGE) - ((CurrentDis get_pcvar_num(EXPLODE_HITRADIUS)) * get_pcvar_num(EXPLODE_DAMAGE))
  
    if(
Damage 0)
    {
        static 
WeaponEnt
        WeaponEnt 
fm_get_user_weapon_entity(AttackerCSW_HEGRENADE)
      
        if(!
pev_valid(WeaponEnt))
            
WeaponEnt 0

        
if(!can_see)
            
Damage /= 2
          
        ExecuteHamB
(Ham_TakeDamageVictimWeaponEntAttackerDamageDMG_BULLET)
    }   
}

public 
update_ammo(id)
{
    if(!
is_user_alive(id))
        return
    if(!
g_HasBow[id])
        return
    if(
g_bow_mode[id] == NORMAL_MODE)
    {
        
g_ammo[id] = g_normal_ammo[id]
    }
    else if(
g_bow_mode[id] == FIRE_MODE)
    {
        
g_ammo[id] = g_fire_ammo[id]
    }
    else if(
g_bow_mode[id] == ICE_MODE)
    {
        
g_ammo[id] = g_ice_ammo[id]
    }
    else if(
g_bow_mode[id] == EXPLODE_MODE)
    {
        
g_ammo[id] = g_explode_ammo[id]
    }
  
    static 
weapon_entweapon_ent fm_find_ent_by_owner(-1"weapon_scout"id)
    if(
pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent1)   
  
    
cs_set_user_bpammo(idCSW_SCOUTg_ammo[id])
  
    
engfunc(EngFunc_MessageBeginMSG_ONE_UNRELIABLEget_user_msgid("CurWeapon"), {000}, id)
    
write_byte(1)
    
write_byte(CSW_SCOUT)
    
write_byte(-1)
    
message_end()

    
set_task(0.1"hud_debug"id)
}

public 
hud_debug(id)
{
    
engfunc(EngFunc_MessageBeginMSG_ONE_UNRELIABLEget_user_msgid("CurWeapon"), {000}, id)
    
write_byte(1)
    
write_byte(CSW_SCOUT)
    
write_byte(-1)
    
message_end()
}

public 
can_see_fm(entindex1entindex2)
{
    if (!
entindex1 || !entindex2)
        return 
false

    
if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new 
flags pev(entindex1pev_flags)
        if (
flags EF_NODRAW || flags FL_NOTARGET)
        {
            return 
0
        
}

        new 
Float:lookerOrig[3]
        new 
Float:targetBaseOrig[3]
        new 
Float:targetOrig[3]
        new 
Float:temp[3]

        
pev(entindex1pev_originlookerOrig)
        
pev(entindex1pev_view_ofstemp)
        
lookerOrig[0] += temp[0]
        
lookerOrig[1] += temp[1]
        
lookerOrig[2] += temp[2]

        
pev(entindex2pev_origintargetBaseOrig)
        
pev(entindex2pev_view_ofstemp)
        
targetOrig[0] = targetBaseOrig [0] + temp[0]
        
targetOrig[1] = targetBaseOrig [1] + temp[1]
        
targetOrig[2] = targetBaseOrig [2] + temp[2]

        
engfunc(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the had of seen player
        
if (get_tr2(0TraceResult:TR_InOpen) && get_tr2(0TraceResult:TR_InWater))
        {
            return 
0
        
}
        else
        {
            new 
Float:flFraction
            get_tr2
(0TraceResult:TR_flFractionflFraction)
            if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
            {
                return 
1
            
}
            else
            {
                
targetOrig[0] = targetBaseOrig [0]
                
targetOrig[1] = targetBaseOrig [1]
                
targetOrig[2] = targetBaseOrig [2]
                
engfunc(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the body of seen player
                
get_tr2(0TraceResult:TR_flFractionflFraction)
                if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
                {
                    return 
1
                
}
                else
                {
                    
targetOrig[0] = targetBaseOrig [0]
                    
targetOrig[1] = targetBaseOrig [1]
                    
targetOrig[2] = targetBaseOrig [2] - 17.0
                    engfunc
(EngFunc_TraceLinelookerOrigtargetOrig0entindex10//  checks the legs of seen player
                    
get_tr2(0TraceResult:TR_flFractionflFraction)
                    if (
flFraction == 1.0 || (get_tr2(0TraceResult:TR_pHit) == entindex2))
                    {
                        return 
1
                    
}
                }
            }
        }
    }
    return 
0
}

/*********************************** Stocks ************************************/

// Allowed toucher
stock allowed_toucher(player)
{
    if (
g_HasBow[player] || zp_get_user_zombie(player) || zp_get_user_nemesis(player) || zp_get_user_survivor(player))
        return 
false
  
    
return true
}
 

stock CreateAnimationSprite(owner, const classname[], const model[], Float:scaleFloat:framerate)
{
    new 
ent=fm_create_entity("env_sprite")

    
set_pev(entpev_framerateframerate)
    
set_pev(entpev_modelmodel)

    
dllfunc(DLLFunc_Spawnent)

    
set_pev(entpev_classnameclassname)
    
set_pev(entpev_ownerowner)

    
fm_entity_set_model(entmodel)
    
fm_set_rendering(entkRenderFxNoDissipation255255255kRenderGlow255)

    
set_pev(entpev_framerateframerate)
    
set_pev(entpev_scalescale)

    return 
ent
}

stock fm_set_rendering_float(entityfx kRenderFxNoneFloat:color[3], render kRenderNormalFloat:amount 16.0)
{
    
set_pev(entitypev_renderfxfx)
    
set_pev(entitypev_rendercolorcolor)
    
set_pev(entitypev_rendermoderender)
    
set_pev(entitypev_renderamtamount)
}

stock drop(id
{
    new 
weapons[32], num
    get_user_weapons
(idweaponsnum)
    for (new 
0numi++) {
        if (
PRIMARY_WEAPONS_BIT_SUM & (1<<weapons[i])) 
        {
            static 
wname[32]
            
get_weaponname(weapons[i], wnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
       }
      }
}

//play anim
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
    
set_pev(Playerpev_weaponanimSequence);
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player);
    
write_byte(Sequence);
    
write_byte(pev(Playerpev_body));
    
message_end();
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/ 
BTW there was the indentation loosing problem but it doesn't harm ur plugin anyways i have fixed this and there was a problem

PHP Code:
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1065\\ f0\\ fs16 \n\\ par }
*/ 
Fixed It

enjoy
__________________
Facebook
My YouTube
Ro{Y}aL WarLanD CommuniTy
Selling Zombie CSO 4.3 Money System Mod
DON KHAN 1 is offline