Raised This Month: $ Target: $400
 0% 

Individual Weapon Models Help


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
goodkat
Junior Member
Join Date: Dec 2010
Old 12-24-2013 , 05:23   Individual Weapon Models Help
Reply With Quote #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;
}
goodkat is offline
 



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 20:41.


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