|
Junior Member
|

12-24-2013
, 05:23
Individual Weapon Models Help
|
#1
|
I have this plugin from http://forums.alliedmods.net/showthread.php?p=867669 and it`s working just fine on my computer. But when i upload it on my server, it just crashes. No error message, no nothing...the server just stops working. Since the owner is not responding to my private message, i`m asking you guys for help. Can someone help me, pls?
Here is the sma file.
Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <cstrike>
new const Plugin[] = "Individual Weapon Models"
new const Version[] = "1.2"
new const Author[] = "joaquimandrade"
new Trie:WeaponsIDs
const WeaponsLastID = CSW_P90
new Array:WeaponModels[WeaponsLastID+1]
new Array:WeaponShieldModels[WeaponsLastID+1]
new Array:WeaponModelsHasShield[WeaponsLastID+1]
new WeaponModelsNumber[WeaponsLastID+1]
const MaxSlots = 32
new PlayerCurrentWeapon[MaxSlots+1][WeaponsLastID+1]
new WeaponsConfigFile[] = "individualWeaponModels.ini"
const ModelMaxLen = 50
new WeaponCanDropFunctionNames[][] = {"weaponNotDroppableCanDrop","weaponDroppableCanDrop"}
const m_iId = 43
const m_iIdLinuxOffset = 4
const m_fInReload = 54
const m_fInReloadLinuxOffset = 4
new ModelFormat[] = "models/v_%s.mdl"
new ModelShieldFormat[] = "models/shield/v_shield_%s.mdl"
new FullModel[ModelMaxLen + charsmax(ModelFormat) + 1]
new FullShieldModel[ModelMaxLen + charsmax(ModelShieldFormat) + 1]
new BlockNextDropMessage[MaxSlots+1 char]
new WeaponNames[][] =
{
"",
"p228",
"",
"scout",
"hegrenade",
"xm1014",
"c4",
"mac10",
"aug",
"smokegrenade",
"elite",
"fiveseven",
"ump45",
"sg550",
"galil",
"famas",
"usp",
"glock18",
"awp",
"mp5navy",
"m249",
"m3",
"m4a1",
"tmp",
"g3sg1",
"flashbang",
"deagle",
"sg552",
"ak47",
"knife",
"p90"
}
new WeaponName[] = "weapon_smokegrenade"
public plugin_init()
{
register_plugin(Plugin,Version,Author)
register_cvar("individualWeaponModels",Version,FCVAR_SERVER|FCVAR_SPONLY);
register_message(get_user_msgid("TextMsg"),"textMsg");
register_event("CurWeapon","curWeapon","be","1=1");
}
isDroppable(weaponName[])
{
new entity = create_entity(weaponName)
new droppable = ExecuteHam(Ham_CS_Item_CanDrop,entity)
remove_entity(entity)
return droppable;
}
public plugin_precache()
{
WeaponsIDs = TrieCreate()
TrieSetCell(WeaponsIDs,WeaponNames[1],1)
formatex(WeaponName[7],charsmax(WeaponName),"%s",WeaponNames[1])
RegisterHam(Ham_CS_Item_CanDrop,WeaponName,WeaponCanDropFunctionNames[isDroppable(WeaponName)])
RegisterHam(Ham_Item_Deploy,WeaponName,"deployWeapon",1)
for(new i=3;i<=WeaponsLastID;i++)
{
TrieSetCell(WeaponsIDs,WeaponNames[i],i)
formatex(WeaponName[7],charsmax(WeaponName),"%s",WeaponNames[i])
RegisterHam(Ham_CS_Item_CanDrop,WeaponName,WeaponCanDropFunctionNames[isDroppable(WeaponName)])
RegisterHam(Ham_Item_Deploy,WeaponName,"deployWeapon",1)
}
new configPath[60]
get_configsdir(configPath,charsmax(configPath))
format(configPath,charsmax(configPath),"%s/%s",configPath,WeaponsConfigFile)
new file = fopen(configPath,"r")
if(file)
{
new useDefaultModels = get_pcvar_num( register_cvar("weaponModels_default","1") )
new weapon[sizeof WeaponName - 7]
new model[ModelMaxLen]
new line[charsmax(WeaponName) + charsmax(model) + 5]
new fullModelDefault[sizeof FullModel]
while(fgets(file,line,charsmax(line)))
{
parse(line,weapon,charsmax(weapon),model,charsmax(model))
if(weapon[0] && model[0])
{
new weaponID
if(TrieGetCell(WeaponsIDs,weapon,weaponID))
{
formatex(FullModel,charsmax(FullModel),ModelFormat,model)
if(file_exists(FullModel))
{
if(!WeaponModelsNumber[weaponID])
{
WeaponModels[weaponID] = ArrayCreate(charsmax(FullModel))
WeaponShieldModels[weaponID] = ArrayCreate(charsmax(FullShieldModel))
WeaponModelsHasShield[weaponID] = ArrayCreate()
if(useDefaultModels)
{
formatex(fullModelDefault,charsmax(fullModelDefault),ModelFormat,weapon)
WeaponModelsNumber[weaponID] = 1
ArrayPushString(WeaponModels[weaponID],fullModelDefault);
ArrayPushString(WeaponShieldModels[weaponID],"")
ArrayPushCell(WeaponModelsHasShield[weaponID],false)
precache_model(FullModel)
}
}
WeaponModelsNumber[weaponID]++
ArrayPushString(WeaponModels[weaponID],FullModel);
precache_model(FullModel)
formatex(FullShieldModel,charsmax(FullShieldModel),ModelShieldFormat,model)
if(file_exists(FullShieldModel))
{
ArrayPushString(WeaponShieldModels[weaponID],FullShieldModel);
ArrayPushCell(WeaponModelsHasShield[weaponID],true)
precache_model(FullShieldModel)
}
else
{
ArrayPushString(WeaponShieldModels[weaponID],"");
ArrayPushCell(WeaponModelsHasShield[weaponID],false)
}
server_print("Added model ^"%s^" for weapon ^"%s^"",FullModel,weapon)
}
else
{
server_print("Unable to find model ^"%s^" for weapon ^"%s^"",FullModel,weapon)
}
}
else
{
server_print("Invalid weapon ^"%s^"",weapon)
}
}
weapon[0] = model[0] = 0
}
fclose(file)
}
}
public client_authorized(id)
{
new array[WeaponsLastID+1]
PlayerCurrentWeapon[id] = array
}
checkSetWeaponModel(id,weaponCSW)
{
if(WeaponModelsNumber[weaponCSW])
{
ArrayGetString(WeaponModels[weaponCSW],PlayerCurrentWeapon[id][weaponCSW],FullModel,charsmax(FullModel))
set_pev(id,pev_viewmodel2,FullModel);
}
}
checkSetWeaponShieldModel(id,weaponCSW)
{
if(WeaponModelsNumber[weaponCSW])
{
if(ArrayGetCell(WeaponModelsHasShield[weaponCSW],PlayerCurrentWeapon[id][weaponCSW]))
{
ArrayGetString(WeaponShieldModels[weaponCSW],PlayerCurrentWeapon[id][weaponCSW],FullShieldModel,charsmax(FullShieldModel))
set_pev(id,pev_viewmodel2,FullShieldModel);
}
}
}
validPlayer(id)
{
return (1 <= id <= MaxSlots) && is_user_alive(id)
}
public deployWeapon(weaponID)
{
new id = pev(weaponID,pev_owner)
if(validPlayer(id))
{
if(!cs_get_user_shield(id))
{
checkSetWeaponModel(id,get_pdata_int(weaponID,m_iId,m_iIdLinuxOffset))
}
else
{
checkSetWeaponShieldModel(id,get_pdata_int(weaponID,m_iId,m_iIdLinuxOffset))
}
}
}
nextWeaponModel(id,weaponID)
{
new weaponCSW = get_pdata_int(weaponID,m_iId,m_iIdLinuxOffset)
PlayerCurrentWeapon[id][weaponCSW] = ++PlayerCurrentWeapon[id][weaponCSW] % WeaponModelsNumber[weaponCSW]
ArrayGetString(WeaponModels[weaponCSW],PlayerCurrentWeapon[id][weaponCSW],FullModel,charsmax(FullModel))
ExecuteHam(Ham_Item_Deploy,weaponID)
set_pev(id,pev_viewmodel2,FullModel);
}
public weaponDroppableCanDrop(weaponID)
{
new id = pev(weaponID,pev_owner)
new buttons = pev(id,pev_button)
if(validPlayer(id) && (buttons & IN_USE))
{
if((WeaponModelsNumber[get_pdata_int(weaponID,m_iId,m_iIdLinuxOffset)] > 1) && !get_pdata_int(weaponID,m_fInReload,m_fInReloadLinuxOffset) && (~buttons & IN_ATTACK))
{
nextWeaponModel(id,weaponID)
}
BlockNextDropMessage{id} = true
SetHamReturnInteger(0)
return HAM_OVERRIDE
}
return HAM_IGNORED
}
public weaponNotDroppableCanDrop(weaponID)
{
new id = pev(weaponID,pev_owner)
if(validPlayer(id))
{
if((WeaponModelsNumber[get_pdata_int(weaponID,m_iId,m_iIdLinuxOffset)] > 1) && (~pev(id,pev_button) & IN_ATTACK))
{
nextWeaponModel(id,weaponID)
}
BlockNextDropMessage{id} = true
}
}
public curWeapon(id)
{
if(!cs_get_user_shield(id))
{
checkSetWeaponModel(id,read_data(2))
}
else
{
checkSetWeaponShieldModel(id,read_data(2))
}
}
public textMsg(msgid,msgDest,id)
{
if(BlockNextDropMessage{id} && (get_msg_arg_int(1) == 4))
{
static const msg[] = "#Weapon_Cannot_Be_Dropped";
static arg[sizeof msg];
get_msg_arg_string(2,arg,charsmax(arg));
if(equal(msg,arg))
{
BlockNextDropMessage{id} = false;
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
|
|