mejorar plugins de registro
#1
tengo este plugins de resgistro me pueden ayudar que mejore y no falle

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fakemeta_util>
#include <hamsandwich>

#define CSW_THIGHPACK     0
#define CSW_SHIELD        2
#define CSW_BACKPACK    32

// Offsets
const OFFSET_USE_STOPPED             0;
const 
OFFSET_PDATA                    2;
const 
OFFSET_LINUX_WEAPONS             4;
const 
OFFSET_LINUX                     5;
const 
OFFSET_WEAPON_OWNER            41;
const 
OFFSET_ID                        43;
const 
OFFSET_NEXT_PRIMARY_ATTACK    46;
const 
OFFSET_NEXT_SECONDARY_ATTACK     47;
const 
OFFSET_TIME_WEAPON_IDLE         48;
const 
OFFSET_IN_RELOAD                 54;
const 
OFFSET_IN_SPECIAL_RELOAD         55;
const 
OFFSET_NEXT_ATTACK            83;
const 
OFFSET_FOV                    363;
const 
OFFSET_ACTIVE_ITEM             373;

new const 
g_customization_file_cfg[] = "weapon_modifier.cfg"
new const g_customization_file_ini[] = "weapon_modifier.ini"

new const g_weapon_ent_names[][] = {"""weapon_p228""""weapon_scout""""weapon_xm1014""""weapon_mac10",
"weapon_aug""""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas""weapon_usp""weapon_glock18",
"weapon_awp""weapon_mp5navy""weapon_m249""weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""""weapon_deagle""weapon_sg552",
"weapon_ak47""weapon_knife""weapon_p90""all"};

new const 
g_weapon_ent_names_all[][] = {"weapon_thighpack""weapon_p228""weapon_shield""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4",
"weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas""weapon_usp",
"weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249""weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle",
"weapon_sg552""weapon_ak47""weapon_knife""weapon_p90""w_backpack"};

new const 
g_model_default[][] = {"models/w_thighpack.mdl""models/w_p228.mdl""models/w_shield.mdl""models/w_scout.mdl""models/w_hegrenade.mdl",
"models/w_xm1014.mdl""models/w_c4.mdl""models/w_mac10.mdl""models/w_aug.mdl""models/w_smokegrenade.mdl""models/w_elite.mdl""models/w_fiveseven.mdl",
"models/w_ump45.mdl""models/w_sg550.mdl""models/w_galil.mdl""models/w_famas.mdl""models/w_usp.mdl""models/w_glock18.mdl""models/w_awp.mdl",
"models/w_mp5.mdl""models/w_m249.mdl""models/w_m3.mdl""models/w_m4a1.mdl""models/w_tmp.mdl""models/w_g3sg1.mdl""models/w_flashbang.mdl",
"models/w_deagle.mdl""models/w_sg552.mdl""models/w_ak47.mdl""models/w_knife.mdl""models/w_p90.mdl""models/w_backpack.mdl"};

new const 
g_max_bpammo[] = {-152, -1901321100901120100100909090100120301202003290120902359090, -1100};
new const 
g_max_clip[] = {-113, -110, -17, -13030, -1302025303525122010301008303020, -173030, -150};
new const 
g_ammo_type[][] = {"""357sig""""762nato""""buckshot""""45acp""556nato""""9mm""57mm""45acp""556nato""556nato""556nato""45acp",
"9mm""338magnum""9mm""556natobox""buckshot""556nato""9mm""762nato""""50ae""556nato""762nato""""57mm"};
new const 
g_ammo_weapon[] = {0CSW_AWPCSW_SCOUTCSW_M249CSW_AUGCSW_XM1014CSW_MAC10CSW_FIVESEVENCSW_DEAGLECSW_P228CSW_ELITECSW_FLASHBANG,
CSW_HEGRENADECSW_SMOKEGRENADECSW_C4};
new const 
SECONDARY_WEAPONS_BIT_SUM = (<< CSW_P228)|(<< CSW_ELITE)|(<< CSW_FIVESEVEN)|(<< CSW_USP)|(<< CSW_GLOCK18)|(<< CSW_DEAGLE)
new const 
SHOTGUN_WEAPONS_BIT_SUM = (<< CSW_M3)|(<< CSW_XM1014)
new const 
ALREADY_SECONDARY_ATTACK = (<< CSW_KNIFE)|(<< CSW_USP)|(<< CSW_GLOCK18)|(<< CSW_FAMAS)|(<< CSW_M4A1)

new const 
g_sound_knife_default[][] = {
    
"weapons/knife_deploy1.wav",
    
"weapons/knife_hit1.wav",
    
"weapons/knife_hit2.wav",
    
"weapons/knife_hit3.wav",
    
"weapons/knife_hit4.wav",
    
"weapons/knife_hitwall1.wav",
    
"weapons/knife_slash1.wav",
    
"weapons/knife_slash2.wav",
    
"weapons/knife_stab.wav"
};

enum()
{
    
WEAPON_DAMAGE 0,
    
WEAPON_RECOIL,
    
WEAPON_SPEED,
    
WEAPON_W_GLOW,
    
WEAPON_P_GLOW,
    
WEAPON_UNLIMITED_CLIP,
    
WEAPON_UNLIMITED_BPAMMO,
    
WEAPON_KNOCKBACK,
    
WEAPON_AUTO_FIRE,
    
WEAPON_ZOOM,

    
MAX_WM
};
new 
g_cvar_weapon[CSW_P90+3][MAX_WM];
new 
g_cvar_knockback;
new 
g_cvar_knockback_zvel;
new 
g_cvar_knockback_dist;
new 
g_pcvar_ff;

enum()
{
    
V_ 0,
    
P_,
    
W_,
    
    
ALL_MODELS
};
new 
g_model_weapon[ALL_MODELS][CSW_P90+2][128];
new 
g_sound_weapon[sizeof(g_sound_knife_default)][128];

new 
g_ent_weaponmodel[33];
new 
g_has_ammo[33];
new 
g_weapon[33];

new 
Trie:g_trie_wmodel;

new 
g_msg_curweapon;
new 
g_msg_ammopickup;

new 
g_maxplayers;

#define is_user_valid_connected(%1)    (1 <= %1 <= g_maxplayers && is_user_connected(%1))
public plugin_precache()
{
    
fn_load_customization();
}
public 
plugin_init()
{
    new 
plugin_name[] = "Weapon Modifier";
    new 
plugin_version[] = "v1.56";
    new 
plugin_author[] = "Kiske";
    
    new 
i;
    new 
j;
    new 
buffer[64];
    
    new 
wm_cvars[][] = {"damage""recoil""speed""wglow""pglow""unclip""unbpammo""kb""autofire""zoom"};
    
    
register_plugin(plugin_nameplugin_versionplugin_author);
    
    
register_event("AmmoX""event_AmmoX""be");
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage");
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled");
    
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack");
    
RegisterHam(Ham_AddPlayerItem"player""fw_AddPlayerItem");
    
RegisterHam(Ham_Use"func_tank""fw_UseStationary_Post"1);
    
RegisterHam(Ham_Use"func_tankmortar""fw_UseStationary_Post"1);
    
RegisterHam(Ham_Use"func_tankrocket""fw_UseStationary_Post"1);
    
RegisterHam(Ham_Use"func_tanklaser""fw_UseStationary_Post"1);
    
    
// Register CVARS
    
for(0CSW_P90+2i++)
    {
        
// Get Weapon and Change Models
        
if(!= && != && != 31// weapon_thighpack(0) , weapon_shield (2) and w_backpack(31)
            
RegisterHam(Ham_Item_Deployg_weapon_ent_names_all[i], "fw_Item_Deploy_Post"1);
        
        if(
g_weapon_ent_names[i][0])
        {
            
// Recoil , Speed , Auto Fire Pistol and Zoom
            
if(!= 31// all is 31
            
{
                
RegisterHam(Ham_Weapon_PrimaryAttackg_weapon_ent_names[i], "fw_Weapon_PrimaryAttack_Post"1); // Recoil , Speed and Auto Fire Pistol
                
                // Zoom
                
if(!((<< i) & ALREADY_SECONDARY_ATTACK))
                {
                    
RegisterHam(Ham_Item_PostFrameg_weapon_ent_names[i], "fw_Item_PostFrame");
                    
RegisterHam(Ham_Item_Holsterg_weapon_ent_names[i], "fw_Item_Holster");
                    
RegisterHam(Ham_CS_Item_GetMaxSpeedg_weapon_ent_names[i], "fw_CS_Item_GetMaxSpeed");
                    
RegisterHam(Ham_Weapon_Reloadg_weapon_ent_names[i], ((<< i) & SHOTGUN_WEAPONS_BIT_SUM) ? "fw_Weapon_Shotgun_Reload_Post" "fw_Weapon_Reload_Post"1);
                }
            }
            
            
// Remove weapon_ from the names
            
replace(g_weapon_ent_names[i], 17"weapon_""");
            
            for(
0MAX_WMj++)
            {
                
formatex(buffercharsmax(buffer), "wm_%s_%s"wm_cvars[j], g_weapon_ent_names[i]);
                
                switch(
j)
                {
                    case 
WEAPON_KNOCKBACKg_cvar_weapon[i][j] = register_cvar(buffer"0.00");
                    case 
WEAPON_AUTO_FIRE:
                    {
                        if(
== 31// all is 31
                        
{
                            
g_cvar_weapon[i][j] = register_cvar(buffer"0");
                            continue;
                        }
                        
                        if((
<< i) & SECONDARY_WEAPONS_BIT_SUM)
                            
g_cvar_weapon[i][j] = register_cvar(buffer"0");
                    }
                    case 
WEAPON_ZOOM:
                    {
                        if(!((
<< i) & ALREADY_SECONDARY_ATTACK))
                            
g_cvar_weapon[i][j] = register_cvar(buffer"off");
                    }
                    default: 
g_cvar_weapon[i][j] = register_cvar(buffer"off");
                }
            }
        }
    }
    
    
// Extra Cvars for W_ models glow :)
    
g_cvar_weapon[CSW_THIGHPACK][WEAPON_W_GLOW] = register_cvar("wm_wglow_thighpack""off");
    
g_cvar_weapon[CSW_SHIELD][WEAPON_W_GLOW] = register_cvar("wm_wglow_shield""off");
    
g_cvar_weapon[CSW_HEGRENADE][WEAPON_W_GLOW] = register_cvar("wm_wglow_hegrenade""off");
    
g_cvar_weapon[CSW_C4][WEAPON_W_GLOW] = register_cvar("wm_wglow_c4""off");
    
g_cvar_weapon[CSW_SMOKEGRENADE][WEAPON_W_GLOW] = register_cvar("wm_wglow_smokegrenade""off");
    
g_cvar_weapon[CSW_FLASHBANG][WEAPON_W_GLOW] = register_cvar("wm_wglow_flashbang""off");
    
g_cvar_weapon[CSW_BACKPACK][WEAPON_W_GLOW] = register_cvar("wm_wglow_backpack""off");
    
    
// Extra Cvars for P_ models glow :)
    
g_cvar_weapon[CSW_HEGRENADE][WEAPON_P_GLOW] = register_cvar("wm_pglow_hegrenade""off");
    
g_cvar_weapon[CSW_C4][WEAPON_P_GLOW] = register_cvar("wm_pglow_c4""off");
    
g_cvar_weapon[CSW_SMOKEGRENADE][WEAPON_P_GLOW] = register_cvar("wm_pglow_smokegrenade""off");
    
g_cvar_weapon[CSW_FLASHBANG][WEAPON_P_GLOW] = register_cvar("wm_pglow_flashbang""off");
    
    
// Cvars for knockback
    
g_cvar_knockback register_cvar("wm_knockback""0");
    
g_cvar_knockback_zvel register_cvar("wm_kb_zvel""1");
    
g_cvar_knockback_dist register_cvar("wm_kb_dist""500");
    
g_pcvar_ff get_cvar_pointer("mp_friendlyfire");
    
    new 
wmodels[][] = {"models/w_shield.mdl""models/w_thighpack.mdl""models/w_c4.mdl""models/w_backpack.mdl"};
    
    
g_trie_wmodel TrieCreate();
    
    for(
0sizeof(wmodels); i++)
        
TrieSetCell(g_trie_wmodelwmodels[i], 1);
    
    
register_forward(FM_SetModel"fw_SetModel");
    
register_forward(FM_EmitSound"fw_EmitSound");
    
register_forward(FM_CmdStart"fw_CmdStart");
    
    
g_msg_curweapon get_user_msgid("CurWeapon");
    
g_msg_ammopickup get_user_msgid("AmmoPickup");
    
    
register_message(g_msg_curweapon"message_CurWeapon");
    
    
g_maxplayers get_maxplayers();
}

public 
plugin_cfg()
{
    new 
cfgdir[32];
    
get_configsdir(cfgdircharsmax(cfgdir));
    
    
server_cmd("exec %s/%s"cfgdirg_customization_file_cfg);
}

public 
plugin_end()
{
    
TrieDestroy(g_trie_wmodel);
}

public 
client_disconnect(id)
{
    
g_has_ammo[id] = 0;
    
    
fm_remove_model_ents(id);
}

public 
event_AmmoX(id)
{
    static 
bpammo_cvar[10];
    static 
bpammo_cvar_temp[10];
    static 
bpammo_cvar_int;
    static 
mode;
    
mode 0;
    
    
get_pcvar_string(g_cvar_weapon[g_weapon[id]][WEAPON_UNLIMITED_BPAMMO], bpammo_cvarcharsmax(bpammo_cvar));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_UNLIMITED_BPAMMO], bpammo_cvar_tempcharsmax(bpammo_cvar_temp));
    
    
bpammo_cvar_int str_to_num(bpammo_cvar);
    
    if(!
equali(bpammo_cvar_temp"off") || bpammo_cvar_int)
        
mode 1;
    
    if(!
mode)
        return;
    
    static 
type;
    
type read_data(1);
    
    if(
type >= sizeof(g_ammo_weapon))
        return;
    
    static 
weapon;
    
weapon g_ammo_weapon[type];
    
    if(
g_max_bpammo[weapon] <= 2)
        return;
    
    static 
amount;
    
amount read_data(2);
    
    if(
amount g_max_bpammo[weapon])
    {
        
// The BP Ammo refill code causes the engine to send a message, but we
        // can't have that in this forward or we risk getting some recursion bugs.
        // For more info see: https://bugs.alliedmods.net/show_bug.cgi?id=3664
        
        
static args[1];
        
args[0] = weapon;
        
        
set_task(0.1"fn_refill_bpammo"idargssizeof(args));
    }
}

public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if(
victim == attacker || !is_user_valid_connected(attacker))
        return 
HAM_IGNORED;
    
    static 
dmg_cvar[10];
    static 
dmg_cvar_k[10];
    static 
dmg_cvar_temp[10];
    static 
dmg_cvar_temp_k[10];
    
    
get_pcvar_string(g_cvar_weapon[g_weapon[attacker]][WEAPON_DAMAGE], dmg_cvarcharsmax(dmg_cvar));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_DAMAGE], dmg_cvar_tempcharsmax(dmg_cvar_temp));
    
    
copy(dmg_cvar_kcharsmax(dmg_cvar_k), dmg_cvar);
    
copy(dmg_cvar_temp_kcharsmax(dmg_cvar_temp_k), dmg_cvar_temp);
    
    if(
fn_contain_words(dmg_cvar_k) || fn_contain_words(dmg_cvar_temp_k))
    {
        
fn_replace_words(dmg_cvar_kcharsmax(dmg_cvar_k));
        
fn_replace_words(dmg_cvar_temp_kcharsmax(dmg_cvar_temp_k));
        
        static 
Float:dmg;
        
        if(
equali(dmg_cvar_temp"off")) dmg str_to_float(dmg_cvar_k);
        else 
dmg str_to_float(dmg_cvar_temp_k);
        
        switch((
equali(dmg_cvar_temp"off")) ? dmg_cvar[0] : dmg_cvar_temp[0])
        {
            case 
'+':
            {
                if(
dmg 1.00) return HAM_IGNORED;
                
damage += dmg;
            }
            case 
'-':
            {
                if(
dmg 1.00) return HAM_IGNORED;
                
damage -= dmg;
            }
            case 
'*':
            {
                if(
dmg == 1.00) return HAM_IGNORED;
                
damage *= dmg;
            }
            case 
'/':
            {
                if(
dmg == 0.00) return HAM_IGNORED// Can't divide by 0
                
damage /= dmg;
            }
            case 
'=':
            {
                if(
dmg 1.00) return HAM_IGNORED;
                
damage dmg;
            }
        }
        
        
SetHamParamFloat(4damage);
    }
    
    return 
HAM_IGNORED;
}

public 
fw_PlayerKilled(victimattackershouldgib)
{
    
fm_remove_model_ents(victim);
}

public 
fw_TraceAttack(victimattackerFloat:damageFloat:direction[3], trace_handledamage_type)
{
    if(
victim == attacker || !is_user_valid_connected(attacker))
        return 
HAM_IGNORED;
    
    if(!
get_pcvar_num(g_cvar_knockback))
        return 
HAM_IGNORED;
    
    if(!(
damage_type DMG_BULLET))
        return 
HAM_IGNORED;
    
    if(!
get_pcvar_num(g_pcvar_ff) && (cs_get_user_team(attacker) == cs_get_user_team(victim)))
        return 
HAM_IGNORED;
    
    static 
kb_duck;
    static 
origin1[3];
    static 
origin2[3];
    
    
kb_duck entity_get_int(victimEV_INT_flags) & (FL_DUCKING FL_ONGROUND) == (FL_DUCKING FL_ONGROUND);
    
    
get_user_origin(victimorigin1);
    
get_user_origin(attackerorigin2);
    
    if(
get_distance(origin1origin2) > get_pcvar_num(g_cvar_knockback_dist))
        return 
HAM_IGNORED;
    
    static 
Float:velocity[3];
    
entity_get_vector(victimEV_VEC_velocityvelocity);
    
    
xs_vec_mul_scalar(directiondamagedirection);
    
    static 
Float:kb_cvar;
    
    if(
get_pcvar_float(g_cvar_weapon[31][WEAPON_KNOCKBACK]) == 0.00kb_cvar get_pcvar_float(g_cvar_weapon[g_weapon[attacker]][WEAPON_KNOCKBACK]);
    else 
kb_cvar get_pcvar_float(g_cvar_weapon[31][WEAPON_KNOCKBACK]);
    
    if(
kb_cvar 0.00)
        
xs_vec_mul_scalar(directionkb_cvardirection);
    
    if(
kb_duck)
        
xs_vec_mul_scalar(direction0.2direction);
    
    
xs_vec_add(velocitydirectiondirection);
    
    if(!
get_pcvar_num(g_cvar_knockback_zvel))
        
direction[2] = velocity[2];
    
    
entity_set_vector(victimEV_VEC_velocitydirection);
    
    return 
HAM_IGNORED;
}

public 
fw_AddPlayerItem(idweapon_ent)
{
    static 
extra_ammo;
    
extra_ammo entity_get_int(weapon_entEV_INT_iuser1);
    
    if(
extra_ammo)
    {
        static 
weaponid;
        
weaponid cs_get_weapon_id(weapon_ent);
        
        
ExecuteHamB(Ham_GiveAmmoidextra_ammog_ammo_type[weaponid], g_max_bpammo[weaponid]);
        
entity_set_int(weapon_entEV_INT_iuser10);
    }
}

public 
fw_UseStationary_Post(entitycalleractivatoruse_type)
{
    if(
use_type == OFFSET_USE_STOPPED && is_user_valid_connected(caller))
    {
        
fm_remove_model_ents(caller);
        
fn_replace_weapon_models(callerg_weapon[caller]);
    }
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    if(!
pev_valid(weapon_ent))
        return;
    
    static 
id;
    
id fm_get_weapon_ent_owner(weapon_ent);
    
    if(!
pev_valid(id))
        return;
    
    
fm_remove_model_ents(id);
    
    static 
weaponid;
    
weaponid cs_get_weapon_id(weapon_ent);
    
    if(
weaponid != CSW_C4 && 
    
weaponid != CSW_SHIELD &&
    
weaponid != CSW_HEGRENADE &&
    
weaponid != CSW_FLASHBANG &&
    
weaponid != CSW_SMOKEGRENADE)
        
g_weapon[id] = weaponid;
    
    
// Replace Weapon Models
    
fn_replace_weapon_models(idweaponid);
}

public 
fw_Weapon_PrimaryAttack_Post(weapon_ent// Recoil , Speed and Auto Fire Pistol
{
    if(!
pev_valid(weapon_ent))
        return 
HAM_IGNORED;
    
    static 
id;
    
id fm_get_weapon_ent_owner(weapon_ent);
    
    if(!
pev_valid(id) || cs_get_weapon_ammo(weapon_ent) < 1)
        return 
HAM_IGNORED;
    
    
// Recoil
    
static Float:def_recoil[3];
    
entity_get_vector(idEV_VEC_punchangledef_recoil);
    
    static 
recoil_cvar[10];
    static 
recoil_cvar_k[10];
    static 
recoil_cvar_temp[10];
    static 
recoil_cvar_temp_k[10];
    
    
get_pcvar_string(g_cvar_weapon[g_weapon[id]][WEAPON_RECOIL], recoil_cvarcharsmax(recoil_cvar));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_RECOIL], recoil_cvar_tempcharsmax(recoil_cvar_temp));
    
    
copy(recoil_cvar_kcharsmax(recoil_cvar_k), recoil_cvar);
    
copy(recoil_cvar_temp_kcharsmax(recoil_cvar_temp_k), recoil_cvar_temp);
    
    if(
fn_contain_words(recoil_cvar_k) || fn_contain_words(recoil_cvar_temp_k))
    {
        
fn_replace_words(recoil_cvar_kcharsmax(recoil_cvar_k));
        
fn_replace_words(recoil_cvar_temp_kcharsmax(recoil_cvar_temp_k));
        
        static 
Float:recoil;
        
        if(
equali(recoil_cvar_temp"off")) recoil str_to_float(recoil_cvar_k);
        else 
recoil str_to_float(recoil_cvar_temp_k);
        
        switch((
equali(recoil_cvar_temp"off")) ? recoil_cvar[0] : recoil_cvar_temp[0])
        {
            case 
'+':
            {
                if(
recoil == 0.00) return HAM_IGNORED;
                
def_recoil[0] += recoil;
            }
            case 
'-':
            {
                if(
recoil == 0.00) return HAM_IGNORED;
                
def_recoil[0] -= recoil;
            }
            case 
'*':
            {
                if(
recoil == 1.00) return HAM_IGNORED;
                
def_recoil[0] *= recoil;
            }
            case 
'/':
            {
                if(
recoil == 0.00) return HAM_IGNORED// Can't divide by 0
                
def_recoil[0] /= recoil;
            }
            case 
'=':
            {
                
def_recoil[0] = recoil;
                if(
recoil == 0)
                    
def_recoil[1] = def_recoil[2] = recoil;
            }
        }
        
        
entity_set_vector(idEV_VEC_punchangledef_recoil);
    }
    
    
// Speed
    
static Float:def_speed[3];
    
def_speed[0] = get_pdata_float(weapon_entOFFSET_NEXT_PRIMARY_ATTACKOFFSET_LINUX_WEAPONS);
    
def_speed[1] = get_pdata_float(weapon_entOFFSET_NEXT_SECONDARY_ATTACKOFFSET_LINUX_WEAPONS);
    
def_speed[2] = get_pdata_float(weapon_entOFFSET_TIME_WEAPON_IDLEOFFSET_LINUX_WEAPONS);
    
    static 
speed_cvar[10];
    static 
speed_cvar_k[10];
    static 
speed_cvar_temp[10];
    static 
speed_cvar_temp_k[10];
    
    
get_pcvar_string(g_cvar_weapon[g_weapon[id]][WEAPON_SPEED], speed_cvarcharsmax(speed_cvar));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_SPEED], speed_cvar_tempcharsmax(speed_cvar_temp));
    
    
copy(speed_cvar_kcharsmax(speed_cvar_k), speed_cvar);
    
copy(speed_cvar_temp_kcharsmax(speed_cvar_temp_k), speed_cvar_temp);
    
    if(
fn_contain_words(speed_cvar_k) || fn_contain_words(speed_cvar_temp_k))
    {
        
fn_replace_words(speed_cvar_kcharsmax(speed_cvar_k));
        
fn_replace_words(speed_cvar_temp_kcharsmax(speed_cvar_temp_k));
        
        static 
Float:speed;
        
        if(
equali(speed_cvar_temp"off")) speed str_to_float(speed_cvar_k);
        else 
speed str_to_float(speed_cvar_temp_k);
        
        switch((
equali(speed_cvar_temp"off")) ? speed_cvar[0] : speed_cvar_temp[0])
        {
            case 
'+':
            {
                if(
speed == 0.00) return HAM_IGNORED;
                
def_speed[0] += speed;
                
def_speed[1] += speed;
                
def_speed[2] += speed;
            }
            case 
'-':
            {
                if(
speed == 0.00) return HAM_IGNORED;
                
def_speed[0] -= speed;
                
def_speed[1] -= speed;
                
def_speed[2] -= speed;
            }
            case 
'*':
            {
                if(
speed == 1.00) return HAM_IGNORED;
                
def_speed[0] *= speed;
                
def_speed[1] *= speed;
                
def_speed[2] *= speed;
            }
            case 
'/':
            {
                if(
speed == 0.00) return HAM_IGNORED// Can't divide by 0
                
def_speed[0] /= speed;
                
def_speed[1] /= speed;
                
def_speed[2] /= speed;
            }
            case 
'='def_speed[0] = def_speed[1] = def_speed[2] = speed;
        }
        
        
set_pdata_float(weapon_entOFFSET_NEXT_PRIMARY_ATTACKdef_speed[0], OFFSET_LINUX_WEAPONS)
        
set_pdata_float(weapon_entOFFSET_NEXT_SECONDARY_ATTACKdef_speed[1], OFFSET_LINUX_WEAPONS)
        
set_pdata_float(weapon_entOFFSET_TIME_WEAPON_IDLEdef_speed[2], OFFSET_LINUX_WEAPONS)
    }
    
    
// Auto Fire Pistol
    
if((<< g_weapon[id]) & SECONDARY_WEAPONS_BIT_SUM)
    {
        static 
autofire_cvar;
        
        if(!
get_pcvar_num(g_cvar_weapon[31][WEAPON_AUTO_FIRE])) autofire_cvar get_pcvar_num(g_cvar_weapon[g_weapon[id]][WEAPON_AUTO_FIRE]);
        else 
autofire_cvar 1;
        
        
g_has_ammo[id] = autofire_cvar;
    }
    
    return 
HAM_IGNORED;
}

public 
fw_Item_PostFrame(weapon_ent)
{
    if(!
pev_valid(weapon_ent))
        return 
HAM_IGNORED;
    
    static 
id;
    
id fm_get_weapon_ent_owner(weapon_ent);
    
    if(!
pev_valid(id))
        return 
HAM_IGNORED;
    
    static 
button;
    
button entity_get_int(idEV_INT_button);
    
    if(
button IN_ATTACK2)
    {
        static 
zoom_cvar[32];
        static 
zoom_delay[9];
        static 
zoom_speed[1]; // not interesting here
        
static zoom_1[3];
        static 
zoom_2[3];
        static 
Float:f_zoom_delay;
        static 
i_zoom_1;
        static 
i_zoom_2;
        
        
get_pcvar_string(g_cvar_weapon[31][WEAPON_ZOOM], zoom_cvarcharsmax(zoom_cvar));
        
        if(
equali(zoom_cvar"off"))
        {
            
get_pcvar_string(g_cvar_weapon[g_weapon[id]][WEAPON_ZOOM], zoom_cvarcharsmax(zoom_cvar));
        
            if(
equali(zoom_cvar"off"))
                return 
HAM_IGNORED;
        }
        
        
parse(zoom_cvarzoom_delaycharsmax(zoom_delay), zoom_speedcharsmax(zoom_speed), zoom_1charsmax(zoom_1), zoom_2charsmax(zoom_2));
        
        
f_zoom_delay str_to_float(zoom_delay);
        
i_zoom_1 clamp(str_to_num(zoom_1), 0255);
        
i_zoom_2 clamp(str_to_num(zoom_2), 0255);
        
        static 
fov;
        
fov get_pdata_int(idOFFSET_FOVOFFSET_LINUX);
        
        if(
fov == 90fn_SetFov(idi_zoom_1);
        else if(
fov == i_zoom_1fn_SetFov(idi_zoom_2);
        else 
fn_SetFov(id90);
        
        
ExecuteHamB(Ham_Item_PreFrameid);
        
        
emit_sound(idCHAN_ITEM"weapons/zoom.wav"0.202.400100);
        
set_pdata_float(idOFFSET_NEXT_ATTACKf_zoom_delayOFFSET_LINUX);
        
        return 
HAM_SUPERCEDE;
    }
    
    return 
HAM_IGNORED;
}

public 
fw_Item_Holster(weapon_ent)
{
    if(
pev_valid(weapon_ent))
    {
        if(
ExecuteHamB(Ham_Item_CanHolsterweapon_ent))
            
fn_ResetFov(fm_get_weapon_ent_owner(weapon_ent));
    }
}

public 
fw_CS_Item_GetMaxSpeed(weapon_ent)
{
    if(!
pev_valid(weapon_ent))
        return 
HAM_IGNORED;
    
    static 
id;
    
id fm_get_weapon_ent_owner(weapon_ent);
    
    if(!
pev_valid(id))
        return 
HAM_IGNORED;
    
    if(
get_pdata_int(idOFFSET_FOVOFFSET_LINUX) == 90)
        return 
HAM_IGNORED;
    
    static 
zoom_cvar[32];
    static 
zoom_delay[1]; // not interesting here
    
static zoom_speed[9];
    static 
zoom_1[1]; // not interesting here
    
static zoom_2[1]; // not interesting here
    
static Float:f_zoom_speed;
    
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_ZOOM], zoom_cvarcharsmax(zoom_cvar));
    
    if(
equali(zoom_cvar"off"))
    {
        
get_pcvar_string(g_cvar_weapon[g_weapon[id]][WEAPON_ZOOM], zoom_cvarcharsmax(zoom_cvar));
    
        if(
equali(zoom_cvar"off"))
            return 
HAM_IGNORED;
    }
    
    
parse(zoom_cvarzoom_delaycharsmax(zoom_delay), zoom_speedcharsmax(zoom_speed), zoom_1charsmax(zoom_1), zoom_2charsmax(zoom_2));
    
f_zoom_speed str_to_float(zoom_speed);

    static 
Float:f_MaxSpeed;
    
f_MaxSpeed f_zoom_speed;
    
    if(
f_MaxSpeed 0.00)
    {
        
SetHamReturnFloat(f_MaxSpeed);
        return 
HAM_SUPERCEDE;
    }

    return 
HAM_IGNORED;
}

public 
fw_Weapon_Reload_Post(weapon_ent)
{
    if(
pev_valid(weapon_ent))
    {
        if(
get_pdata_int(weapon_entOFFSET_IN_RELOADOFFSET_LINUX_WEAPONS))
            
fn_ResetFov(fm_get_weapon_ent_owner(weapon_ent))
    }
}

public 
fw_Weapon_Shotgun_Reload_Post(weapon_ent)
{
    if(
pev_valid(weapon_ent))
    {
        if(
get_pdata_int(weapon_entOFFSET_IN_SPECIAL_RELOADOFFSET_LINUX_WEAPONS) == 1)
            
fn_ResetFov(fm_get_weapon_ent_owner(weapon_ent))
    }
}

fn_SetFov(idfov)
{
    
entity_set_float(idEV_FL_fovfloat(fov));
    
set_pdata_int(idOFFSET_FOVfovOFFSET_LINUX);
}

fn_ResetFov(id)
{
    if(
<= get_pdata_int(idOFFSET_FOVOFFSET_LINUX) <= 90)
    {
        
entity_set_float(idEV_FL_fov90.0);
        
set_pdata_int(idOFFSET_FOV90OFFSET_LINUX);
    }
}

public 
fw_SetModel(entity, const model[])
{
    if(
strlen(model) < || model[7] != 'w' || model[8] != '_')
        return 
FMRES_IGNORED;
    
    static 
classname[10];
    static 
color_all[21];
    
    
entity_get_string(entityEV_SZ_classnameclassnamecharsmax(classname));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_W_GLOW], color_allcharsmax(color_all));
    
    if(
equal(classname"weaponbox") ||
    
TrieKeyExists(g_trie_wmodelmodel))
    {
        static 
i;
        static 
color[21];
        static 
p_rgb[3][4];
        static 
i_rgb[3];
        
        for(
0CSW_P90+2i++)
        {
            if(
equali(modelg_model_default[i]))
            {
                
get_pcvar_string(g_cvar_weapon[i][WEAPON_W_GLOW], colorcharsmax(color));
                if(!
equali(color"off") || !equali(color_all"off"))
                {
                    if(
equali(color_all"off")) parse(colorp_rgb[0], charsmax(p_rgb[]), p_rgb[1], charsmax(p_rgb[]), p_rgb[2], charsmax(p_rgb[]));
                    else 
parse(color_allp_rgb[0], charsmax(p_rgb[]), p_rgb[1], charsmax(p_rgb[]), p_rgb[2], charsmax(p_rgb[]));
                    
                    
i_rgb[0] = clamp(str_to_num(p_rgb[0]), 0255);
                    
i_rgb[1] = clamp(str_to_num(p_rgb[1]), 0255);
                    
i_rgb[2] = clamp(str_to_num(p_rgb[2]), 0255);
                    
                    
fm_set_rendering(entitykRenderFxGlowShelli_rgb[0], i_rgb[1], i_rgb[2], kRenderNormal16);
                }
                
                if(
g_model_weapon[W_][i][0])
                {
                    
entity_set_model(entityg_model_weapon[W_][i]);
                    return 
FMRES_SUPERCEDE;
                }
            }
        }
        
        return 
FMRES_IGNORED;
    }
    
    static 
Float:dmg_time;
    
dmg_time entity_get_float(entityEV_FL_dmgtime);
    
    if(
dmg_time == 0.0)
        return 
FMRES_IGNORED;
    
    static 
pg_rgb[3][3][4];
    static 
ig_rgb[3][3];
    if(
equali(color_all"off"))
    {
        static 
color_grenades[3][21];
        
        
get_pcvar_string(g_cvar_weapon[CSW_HEGRENADE][WEAPON_W_GLOW], color_grenades[0], charsmax(color_grenades[]));
        
get_pcvar_string(g_cvar_weapon[CSW_FLASHBANG][WEAPON_W_GLOW], color_grenades[1], charsmax(color_grenades[]));
        
get_pcvar_string(g_cvar_weapon[CSW_SMOKEGRENADE][WEAPON_W_GLOW], color_grenades[2], charsmax(color_grenades[]));
        
        if(!
equali(color_grenades[0], "off"))
        {
            
parse(color_grenades[0], pg_rgb[0][0], charsmax(pg_rgb[][]), pg_rgb[1][0], charsmax(pg_rgb[][]), pg_rgb[2][0], charsmax(pg_rgb[][]));
            
            
ig_rgb[0][0] = clamp(str_to_num(pg_rgb[0][0]), 0255);
            
ig_rgb[1][0] = clamp(str_to_num(pg_rgb[1][0]), 0255);
            
ig_rgb[2][0] = clamp(str_to_num(pg_rgb[2][0]), 0255);
        }
        if(!
equali(color_grenades[1], "off"))
        {
            
parse(color_grenades[1], pg_rgb[0][1], charsmax(pg_rgb[][]), pg_rgb[1][1], charsmax(pg_rgb[][]), pg_rgb[2][1], charsmax(pg_rgb[][]));
            
            
ig_rgb[0][1] = clamp(str_to_num(pg_rgb[0][1]), 0255);
            
ig_rgb[1][1] = clamp(str_to_num(pg_rgb[1][1]), 0255);
            
ig_rgb[2][1] = clamp(str_to_num(pg_rgb[2][1]), 0255);
        }
        if(!
equali(color_grenades[2], "off"))
        {
            
parse(color_grenades[2], pg_rgb[0][2], charsmax(pg_rgb[][]), pg_rgb[1][2], charsmax(pg_rgb[][]), pg_rgb[2][2], charsmax(pg_rgb[][]));
            
            
ig_rgb[0][2] = clamp(str_to_num(pg_rgb[0][2]), 0255);
            
ig_rgb[1][2] = clamp(str_to_num(pg_rgb[1][2]), 0255);
            
ig_rgb[2][2] = clamp(str_to_num(pg_rgb[2][2]), 0255);
        }
    }
    else
    {
        
parse(color_allpg_rgb[0][0], charsmax(pg_rgb[][]), pg_rgb[1][0], charsmax(pg_rgb[][]), pg_rgb[2][0], charsmax(pg_rgb[][]));
        
        
ig_rgb[0][0] = ig_rgb[0][1] = ig_rgb[0][2] = clamp(str_to_num(pg_rgb[0][0]), 0255);
        
ig_rgb[1][0] = ig_rgb[1][1] = ig_rgb[1][2] = clamp(str_to_num(pg_rgb[1][0]), 0255);
        
ig_rgb[2][0] = ig_rgb[2][1] = ig_rgb[2][2] = clamp(str_to_num(pg_rgb[2][0]), 0255);
    }
    
    if(
model[9] == 'h' && model[10] == 'e'// HE Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShellig_rgb[0][0], ig_rgb[1][0], ig_rgb[2][0], kRenderNormal16);
        
        
// Change Model
        
if(g_model_weapon[W_][CSW_HEGRENADE][0])
        {
            
entity_set_model(entityg_model_weapon[W_][CSW_HEGRENADE]);
            return 
FMRES_SUPERCEDE;
        }
    }
    else if(
model[9] == 'f' && model[10] == 'l'// Flash Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShellig_rgb[0][1], ig_rgb[1][1], ig_rgb[2][1], kRenderNormal16);
        
        
// Change Model
        
if(g_model_weapon[W_][CSW_FLASHBANG][0])
        {
            
entity_set_model(entityg_model_weapon[W_][CSW_FLASHBANG]);
            return 
FMRES_SUPERCEDE;
        }
    }
    else if(
model[9] == 's' && model[10] == 'm'// Smoke Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShellig_rgb[0][2], ig_rgb[1][2], ig_rgb[2][2], kRenderNormal16);
        
        
// Change Model
        
if(g_model_weapon[W_][CSW_SMOKEGRENADE][0])
        {
            
entity_set_model(entityg_model_weapon[W_][CSW_SMOKEGRENADE]);
            return 
FMRES_SUPERCEDE;
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
fw_EmitSound(idchannel, const sample[], Float:volumeFloat:attnflagspitch)
{
    if(!
is_user_valid_connected(id))
        return 
FMRES_IGNORED;
    
    new 
i;
    for(
0sizeof(g_sound_knife_default); i++)
    {
        if(
equal(sampleg_sound_knife_default[i]) && g_sound_weapon[i][0])
        {
            
emit_sound(idchannelg_sound_weapon[i], volumeattnflagspitch);
            return 
FMRES_SUPERCEDE;
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
fw_CmdStart(idhandle)
{
    if(!
is_user_alive(id))
        return;
    
    if((
<< g_weapon[id]) & SECONDARY_WEAPONS_BIT_SUM)
    {
        static 
autofire_cvar;
        
        if(!
get_pcvar_num(g_cvar_weapon[31][WEAPON_AUTO_FIRE])) autofire_cvar get_pcvar_num(g_cvar_weapon[g_weapon[id]][WEAPON_AUTO_FIRE]);
        else 
autofire_cvar 1;
        
        if(
autofire_cvar)
        {
            static 
button;
            
button get_uc(handleUC_Buttons);
            
            if((
button IN_ATTACK) && g_has_ammo[id])
            {
                
set_uc(handleUC_Buttonsbutton & ~IN_ATTACK);
                
g_has_ammo[id] = 0;
            }
        }
    }
}

public 
message_CurWeapon(msg_idmsg_destmsg_entity)
{
    if(!
is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
        return;
    
    static 
clip_cvar[10];
    static 
clip_cvar_temp[10];
    static 
clip_cvar_int;
    static 
mode;
    static 
weapon;
    
    
mode 0;
    
weapon get_msg_arg_int(2);
    
    
get_pcvar_string(g_cvar_weapon[g_weapon[msg_entity]][WEAPON_UNLIMITED_CLIP], clip_cvarcharsmax(clip_cvar));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_UNLIMITED_CLIP], clip_cvar_tempcharsmax(clip_cvar_temp));
    
    
clip_cvar_int str_to_num(clip_cvar);
    
    if(!
equali(clip_cvar_temp"off") || clip_cvar_int)
        
mode 1;
    
    if(!
mode)
        return;
    
    if(
g_max_bpammo[weapon] > 2)
    {
        static 
weapon_ent;
        
weapon_ent get_pdata_cbase(msg_entityOFFSET_ACTIVE_ITEMOFFSET_LINUX);
        
        if(
pev_valid(weapon_ent))
            
cs_set_weapon_ammo(weapon_entg_max_clip[weapon])
        
        
set_msg_arg_int(3get_msg_argtype(3), g_max_clip[weapon]);
    }
}

// Functions
fn_contain_words(const string[])
{
    if(
contain(string"+") != -||
    
contain(string"-") != -||
    
contain(string"*") != -||
    
contain(string"/") != -||
    
contain(string"=") != -1)
        return 
1;
    
    return 
0;
}
fn_replace_words(string[], len)
{
    
replace(stringlen"+""");
    
replace(stringlen"-""");
    
replace(stringlen"*""");
    
replace(stringlen"/""");
    
replace(stringlen"=""");
}
fn_load_customization()
{
    new 
path[64];
    
get_configsdir(pathcharsmax(path));
    
    
format(pathcharsmax(path), "%s/%s"pathg_customization_file_ini);
    
    if(!
file_exists(path)) return;
    
    new 
linedata[1024];
    new 
key[64];
    new 
value[960];
    new 
weaponname[32];
    new 
file fopen(path"rt");
    new 
i;
    new const 
soundname[][] = {
        
"KNIFE_DEPLOY",
        
"KNIFE_HIT_1",
        
"KNIFE_HIT_2",
        
"KNIFE_HIT_3",
        
"KNIFE_HIT_4",
        
"KNIFE_HIT_WALL",
        
"KNIFE_SLASH_1",
        
"KNIFE_SLASH_2",
        
"KNIFE_STAB"
    
}
    
    while(
file && !feof(file))
    {
        
fgets(filelinedatacharsmax(linedata));
        
replace(linedatacharsmax(linedata), "^n""");
        
        if(!
linedata[0] || linedata[0] == ';') continue;
        
        
strtok(linedatakeycharsmax(key), valuecharsmax(value), '=');
        
trim(key);
        
trim(value);
        
        
// Models
        
for(0CSW_P90+2i++)
        {
            if(
g_weapon_ent_names_all[i][0])
            {
                
// Remove weapon_ from the names
                
copy(weaponnamecharsmax(weaponname), g_weapon_ent_names_all[i]);
                
                
// Get and precache V_ model
                
replace(weaponnamecharsmax(weaponname), "weapon_""V_");
                if(!
equali(g_weapon_ent_names_all[i], "weapon_thighpack"))
                {
                    if(
equali(keyweaponname)) copy(g_model_weapon[V_][i], charsmax(g_model_weapon[][]), value);
                    if(
g_model_weapon[V_][i][0]) precache_model(g_model_weapon[V_][i]);
                }
                
                
// Get and precache P_ model
                
replace(weaponnamecharsmax(weaponname), "V_""P_");
                if(
equali(keyweaponname)) copy(g_model_weapon[P_][i], charsmax(g_model_weapon[][]), value);
                if(
g_model_weapon[P_][i][0]) precache_model(g_model_weapon[P_][i]);
                
                
// Get and precache W_ model
                
replace(weaponnamecharsmax(weaponname), "P_""W_");
                if(
equali(keyweaponname)) copy(g_model_weapon[W_][i], charsmax(g_model_weapon[][]), value);
                if(
g_model_weapon[W_][i][0]) precache_model(g_model_weapon[W_][i]);
            }
        }
        
        
// Knife Sounds
        
for(0sizeof(g_sound_knife_default); i++)
        {
            if(
equali(keysoundname[i])) copy(g_sound_weapon[i], charsmax(g_sound_weapon[]), value);
            if(
g_sound_weapon[i][0]) precache_model(g_sound_weapon[i]);
        }
    }
    
    if(
file)
        
fclose(file);
}
fn_replace_weapon_models(idweaponid)
{
    if(!
is_user_alive(id))
        return;
    
    if(
g_model_weapon[V_][weaponid][0]) entity_set_string(idEV_SZ_viewmodelg_model_weapon[V_][weaponid]);
    if(
g_model_weapon[P_][weaponid][0]) entity_set_string(idEV_SZ_weaponmodelg_model_weapon[P_][weaponid]);
    
    new 
color[21];
    new 
color_all[21];
    
    
get_pcvar_string(g_cvar_weapon[weaponid][WEAPON_P_GLOW], colorcharsmax(color));
    
get_pcvar_string(g_cvar_weapon[31][WEAPON_P_GLOW], color_allcharsmax(color_all));
    
    if(!
equali(color"off") || !equali(color_all"off"))
    {
        new 
p_rgb[3][4];
        new 
i_rgb[3];
        
        if(
equali(color_all"off")) parse(colorp_rgb[0], charsmax(p_rgb[]), p_rgb[1], charsmax(p_rgb[]), p_rgb[2], charsmax(p_rgb[]));
        else 
parse(color_allp_rgb[0], charsmax(p_rgb[]), p_rgb[1], charsmax(p_rgb[]), p_rgb[2], charsmax(p_rgb[]));
        
        
i_rgb[0] = clamp(str_to_num(p_rgb[0]), 0255);
        
i_rgb[1] = clamp(str_to_num(p_rgb[1]), 0255);
        
i_rgb[2] = clamp(str_to_num(p_rgb[2]), 0255);
        
        
fm_set_weaponmodel_ent(idi_rgb[0], i_rgb[1], i_rgb[2]);
    }
}
public 
fn_refill_bpammo(const args[], id)
{
    if(!
is_user_alive(id))
        return;
    
    
set_msg_block(g_msg_ammopickupBLOCK_ONCE);
    
ExecuteHamB(Ham_GiveAmmoidg_max_bpammo[args[0]], g_ammo_type[args[0]], g_max_bpammo[args[0]]);
}

// Stocks
stock fm_set_weaponmodel_ent(idred = -1green = -1blue = -1// Thanks MeRcyLeZZ for the stock!
{
    static 
model[128];
    
entity_get_string(idEV_SZ_weaponmodelmodelcharsmax(model));
    
    if(!
pev_valid(g_ent_weaponmodel[id]))
    {
        
g_ent_weaponmodel[id] = engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"));
        if(!
pev_valid(g_ent_weaponmodel[id])) return;
        
        
entity_set_string(g_ent_weaponmodel[id], EV_SZ_classname"weapon_model");
        
entity_set_int(g_ent_weaponmodel[id], EV_INT_movetypeMOVETYPE_FOLLOW);
        
entity_set_edict(g_ent_weaponmodel[id], EV_ENT_aimentid);
        
entity_set_edict(g_ent_weaponmodel[id], EV_ENT_ownerid);
        
        if(
red != -|| green != -|| blue != -1)
            
fm_set_rendering(g_ent_weaponmodel[id], kRenderFxGlowShellredgreenbluekRenderNormal16);
    }
    
    
engfunc(EngFunc_SetModelg_ent_weaponmodel[id], model);
}
stock fm_remove_model_ents(id// Thanks MeRcyLeZZ for the stock!
{
    if(
pev_valid(g_ent_weaponmodel[id]))
    {
        
remove_entity(g_ent_weaponmodel[id]);
        
g_ent_weaponmodel[id] = 0;
    }
}
stock cs_weapon_name_to_id(const weapon[]) // Simplified get_weaponid (CS only) -- Thanks MeRcyLeZZ for the stock!
{
    static 
i;
    for(
0sizeof(g_weapon_ent_names) - 1i++)
    {
        if(
equal(weapong_weapon_ent_names[i]))
            return 
i;
    }
    
    return 
0;
}
stock fm_get_weapon_ent_owner(ent)
{
    if(
pev_valid(ent) != OFFSET_PDATA)
        return -
1;
    
    return 
get_pdata_cbase(entOFFSET_WEAPON_OWNEROFFSET_LINUX_WEAPONS);


abajo le dejo sus configuraciones
Responder
#2
A qué te referís con que "nunca falle"?
Responder
#3
(05/06/2020, 11:29 AM)Cristian\ escribió: A qué te referís con que "nunca falle"?

esacto hay algunos que les falla y a otros no
Responder
#4
Sigues sin decir el problema, cual es la falla que tienen algunos? Estoy seguro que no has probado nada.
Responder
#5
(05/06/2020, 02:36 PM)Kev. escribió: Sigues sin decir el problema, cual es la falla que tienen algunos? Estoy seguro que no has probado nada.

si lo e prodado lo unico que hay a personas que le falla y no le registran las balas y hay a otras que si
Responder
#6
Sigo sin comprender que es lo que falla del plugin

Responder
#7
(05/06/2020, 07:40 PM)Skylar escribió: Sigo sin comprender que es lo que falla del plugin
que hay jugadores que no le registra y mas que todo son los id lanes y los steam si le registra mas
Responder
#8
(05/06/2020, 10:36 PM)masacre15 escribió: que hay jugadores que no le registra y mas que todo son los id lanes y los steam si le registra mas

Pensé que hablabas de un sistema de registro de datos o cosas así, pero con registro supongo que te referís a registro de balas, aumentar balas al arma? Explicate más por favor.
Responder
#9
Habla del registro de los hits v:
que dan en una hitbox y no se los "registra"
Ese diske "no registra" que dicen :V
Estoy cansado de este sufrimiento llamado vivir en Venezuela
Okay
Responder
#10
(06/06/2020, 05:44 AM)samueldmq escribió: Habla del registro de los hits v:
que dan en una hitbox y no se los "registra"
Ese diske "no registra" que dicen :V
hay algunas balas que registran bn y mas a los steam le apunta a coco yle restra pero me dicen varios id lanes que a ellos no le registra cuando quieren
Responder
#11
Sigo sin entender su léxico, cual es el contexto del problema? "id lanes" ah?
Responder
#12
entiendo a "id lanes" como usuarios "No-Steam".
Responder
#13
No entiendo que quieres lograr, "estabilizando" la recoil no solucionas nada, lo del registro esta muy hablado ya y es un bug del juego, esta incluso reportado y como una de las prioridades para una proxima actualizacion, es un tema de hitbox netamente.
Responder
#14
El plugin no tiene fallas, lo mas seguro es que sea la conexión que les estés dando a los players configura bien los rates y veras un cambio, porque si están mal configurados obviamente el registro del server sera un asco


Y trata de explicarte mejor que no hablamos taka taka
[Imagen: 76561197965283388.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)