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

code optimization


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
LearninG
Senior Member
Join Date: Apr 2019
Location: Iran
Old 08-08-2019 , 13:13   code optimization
Reply With Quote #1

Hi,
All i need is, a high level scripter check this plugin and tell me if it has code problems or it can be done in a better way , thanks.
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\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1065\\ f0\\ fs16 \n\\ par }
*/ 

Last edited by LearninG; 08-08-2019 at 13:15.
LearninG is offline
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
Natsheh
Veteran Member
Join Date: Sep 2012
Old 08-08-2019 , 13:35   Re: code optimization
Reply With Quote #3

DON KHAN 1 are you dumb ? Did you even read what's the whole topic is about?

Answer is to search on how to optimise your code.
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !

Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 08-08-2019 , 22:06   Re: code optimization
Reply With Quote #4

If it works well for you then there is no reason for anybody to randomly look through the code, especially since it appears that you didn't write it.

So, if you have an issue, you need to state that and explain the issue so that someone can look at a specific part of the code. Also, if you're not going to be doing any of the scripting then you should post in the Suggestions/Request section of the forum.
__________________

Last edited by fysiks; 08-08-2019 at 22:08.
fysiks 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 00:04.


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