Hello, I'm creating a custom ironsights plugin, however, in some rare cases server is crashing because it's loading an invalid model. I checked the console and it appears the model string is concatenating instead of replacing itself as you can see here.
Here's the full code.
Code:
/* Mod Template generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#define PLUGIN "Gabe Iggy"
#define VERSION "1.0"
#define AUTHOR "Sven Co-op Scopes"
#define SNIPER_SCOPE "models/motv/scope_sniper.mdl"
#define IRONSIGHTS_SCOPE "models/motv/scp_battler.mdl"
#define NINEMMAR_SCOPE "models/scp_9mmar.mdl"
#define MAXPLAYERS get_maxplayers()
#define TASK_ID 2478756
/* Initialization */
new oldVModel[128][32];
new userReady[32] = 1;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_event("SetFOV", "zoomingIn", "be");
new event = create_entity("weapon_aug");
RegisterHamFromEntity(Ham_Weapon_RetireWeapon, event, "zoomOut", 1); //hack for AS weapons
RegisterHam(Ham_Weapon_RetireWeapon, "weapon_crossbow", "zoomOut", 1);
RegisterHam(Ham_Weapon_RetireWeapon, "weapon_sniperrifle", "zoomOut", 1);
RegisterHam(Ham_Weapon_RetireWeapon, "weapon_9mmar", "zoomOut", 1);
RegisterHamFromEntity(Ham_Item_Holster, event, "zoomOut", 1);
RegisterHam(Ham_Item_Holster, "weapon_crossbow", "zoomOut", 1);
RegisterHam(Ham_Item_Holster, "weapon_sniperrifle", "zoomOut", 1);
RegisterHam(Ham_Item_Holster, "weapon_9mmar", "zoomOut", 1);
RegisterHamFromEntity(Ham_Item_Deploy, event, "deploy", 1);
RegisterHam(Ham_Item_Deploy, "weapon_crossbow", "deploy", 1);
RegisterHam(Ham_Item_Deploy, "weapon_sniperrifle", "deploy", 1);
RegisterHam(Ham_Item_Deploy, "weapon_9mmar", "deploy", 1);
remove_entity(event);
}
public plugin_precache()
{
precache_model(SNIPER_SCOPE);
precache_model(IRONSIGHTS_SCOPE);
precache_model(NINEMMAR_SCOPE);
}
public deploy(weaponID)
{
new id = get_pdata_ehandle(weaponID, 404, 16);
if(task_exists(id+TASK_ID))
remove_task(id+TASK_ID);
set_task(0.1, "funcRead", id+TASK_ID);
}
public zoomOut(weaponID)
{
new id = get_pdata_ehandle(weaponID, 404, 16);
userReady[id] = 0;
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, oldVModel[id]));
}
public funcRead(taskID)
{
new id = taskID - TASK_ID;
userReady[id] = 1;
}
public zoomingIn(id)
{
if(!task_exists(id+TASK_ID))
{
if(is_user_alive(id) && userReady[id])
{
new newFOV = read_data(1);
if(newFOV != 0)
pev(id, pev_viewmodel2, oldVModel[id], charsmax(oldVModel));
switch(newFOV)
{
case 20:
{
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, SNIPER_SCOPE));
return PLUGIN_CONTINUE;
}
case 40:
{
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, NINEMMAR_SCOPE));
return PLUGIN_CONTINUE;
}
case 41:
{
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, IRONSIGHTS_SCOPE));
return PLUGIN_CONTINUE;
}
case 0:
{
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, oldVModel[id]));
return PLUGIN_CONTINUE;
}
default:
{
return PLUGIN_HANDLED;
}
}
}
else
return PLUGIN_HANDLED;
}
else
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}