the only problem is that its not always giving me the right weapon.
Like when I go over an shotgun model it giving me shotgun + m4a1 or when I go over an
mp5 model it giving me m249.
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <superspawns>
//ent name
#define wp_ent "weapon_entity"
//ent values
#define WP_Type pev_iuser4
#define WP_Left pev_iuser3
#define WP_Max pev_iuser2
//primary and secondary weapons
#define PRIMARY_WEAPONS ((1<<CSW_SCOUT) | (1<<CSW_XM1014) | (1<<CSW_MAC10) | (1<<CSW_AUG) | (1<<CSW_UMP45) | (1<<CSW_GALIL) | (1<<CSW_FAMAS) | (1<<CSW_MP5NAVY) | (1<<CSW_M249) | (1<<CSW_M3) | (1<<CSW_M4A1) | (1<<CSW_TMP) | (1<<CSW_G3SG1) | (1<<CSW_AK47))
#define SECONDARY_WEAPONS ((1<<CSW_P228) | (1<<CSW_ELITE) | (1<<CSW_FIVESEVEN) | (1<<CSW_GLOCK18) | (1<<CSW_DEAGLE))
//offsets
#define OFFSET_SCOUT_AMMO 378
#define OFFSET_PARA_AMMO 379
#define OFFSET_FAMAS_AMMO 380
#define OFFSET_M3_AMMO 381
#define OFFSET_USP_AMMO 382
#define OFFSET_FIVESEVEN_AMMO 383
#define OFFSET_DEAGLE_AMMO 384
#define OFFSET_P228_AMMO 385
#define OFFSET_GLOCK_AMMO 386
#define OFFSET_FLASH_AMMO 387
#define OFFSET_HE_AMMO 388
#define OFFSET_SMOKE_AMMO 389
#define linuxdiff 5
//ammo for each gun
#define AMMO_P228 52
#define AMMO_SCOUT 90
#define AMMO_Xm1014 32
#define AMMO_Mac10 100
#define AMMO_Aug 90
#define AMMO_Elite 120
#define AMMO_Fiveseven 100
#define AMMO_Ump45 100
#define AMMO_Galil 90
#define AMMO_Famas 90
#define AMMO_Glock18 120
#define AMMO_Awp 30
#define AMMO_Mp5navy 120
#define AMMO_M249 200
#define AMMO_M3 32
#define AMMO_M4a1 90
#define AMMO_Tmp 120
#define AMMO_Deagle 35
#define AMMO_Ak47 90
new pcvar
new classname[20],left,type,i
new const Secondary[] = {CSW_P228, CSW_ELITE, CSW_FIVESEVEN, CSW_GLOCK18, CSW_DEAGLE};
new const Primary[] ={CSW_SCOUT,CSW_XM1014,CSW_MAC10,CSW_AUG,CSW_UMP45,CSW_GALIL,CSW_FAMAS,CSW_MP5NAVY,CSW_M249,CSW_M3,CSW_M4A1,CSW_TMP,CSW_AK47}
public plugin_init()
{
// First we have to initialize the arrays and parameters
// The value 3500.0 is the minimum distance between points
// Nearest points will be found, but GetOrigin will erase points
// with less than 3500.0 distance with other used points and return
SsInit(3500.0)
// Let start scanning the map
SsScan()
// This call is to dump on server logs the origins found
SsDump()
// This command will call GetOrigin() to get a new location, then spawn a model (is't just an example)
register_concmd("spawnent", "spawnent")
register_forward(FM_Touch,"Equip")
pcvar = register_cvar("ws_auto_remove","0")
pcvar = get_pcvar_num(pcvar);
pcvar = register_cvar("ws_reset_round","1")
if(get_pcvar_num(pcvar))
{
register_logevent("reset", 2, "1=Round_End")
register_event("TextMsg", "reset", "a", "2=#Game_will_restart_in")
}
pcvar = register_cvar("ws_reset_gun","1")
if(get_pcvar_num(pcvar))
{
register_forward(FM_Think, "Forward_Think")
pcvar = register_cvar("ws_reset_gun_time","1")
pcvar = register_cvar("ws_reset_gun_amount","1")
pcvar = get_pcvar_num(pcvar)
}
}
public Equip(id,weapon)
{
if(!pev_valid(weapon) || !pev_valid(id) )return
//static classname[20]
pev(weapon, pev_classname, classname,19)
if(!equal(classname,wp_ent))return
//static left,type,i
left = pev(weapon,WP_Left)
if(!left)return
type = pev(weapon,WP_Type)
//check if its a primary
if(PRIMARY_WEAPONS & ( 1 << type))
{
for (i = 0; i < sizeof Primary; ++i)
{
//cant have more then 1 primary
if(user_has_weapon(id,Primary[i]))return
}
}
//check if its secondary
if(SECONDARY_WEAPONS & ( 1 << type))
{
for (i = 0; i < sizeof Secondary; ++i)
{
//cant have more then 2 secondary
if(user_has_weapon(id,Secondary[i]))return
}
}
//give weapon and ammo
switch(type)
{
case 1 :
{
fm_give_item(id,"weapon_p228")
set_pdata_int(id,OFFSET_P228_AMMO,AMMO_P228,linuxdiff)
}
case 2 :
{
fm_give_item(id,"weapon_scout")
set_pdata_int(id,OFFSET_SCOUT_AMMO,AMMO_SCOUT,linuxdiff)
}
case 3 :
{
fm_give_item(id,"weapon_hegrenade")
//set_pdata_int(id,OFFSET_HE_AMMO,amount,linuxdiff)
}
case 4 :
{
fm_give_item(id,"weapon_xm1014")
set_pdata_int(id,OFFSET_M3_AMMO,AMMO_Xm1014,linuxdiff)
}
case 5 :
{
fm_give_item(id,"weapon_mac10")
set_pdata_int(id,OFFSET_USP_AMMO,AMMO_Mac10,linuxdiff)
}
case 6 :
{
fm_give_item(id,"weapon_aug")
set_pdata_int(id,OFFSET_FAMAS_AMMO,AMMO_Aug,linuxdiff)
}
case 7 :
{
fm_give_item(id,"weapon_smokegrenade")
//set_pdata_int(id,OFFSET_SMOKE_AMMO,amount,linuxdiff)
}
case 8:
{
fm_give_item(id,"weapon_elite")
set_pdata_int(id,OFFSET_GLOCK_AMMO,AMMO_Elite,linuxdiff)
}
case 9:
{
fm_give_item(id,"weapon_fiveseven")
set_pdata_int(id,OFFSET_FIVESEVEN_AMMO,AMMO_Fiveseven,linuxdiff)
}
case 10:
{
fm_give_item(id,"weapon_ump45")
set_pdata_int(id,OFFSET_USP_AMMO,AMMO_Ump45,linuxdiff)
}
case 11:
{
fm_give_item(id,"weapon_galil")
set_pdata_int(id,OFFSET_FAMAS_AMMO,AMMO_Galil,linuxdiff)
}
case 12:
{
fm_give_item(id,"weapon_famas")
set_pdata_int(id,OFFSET_FAMAS_AMMO,AMMO_Famas,linuxdiff)
}
case 13:
{
fm_give_item(id,"weapon_glock18")
set_pdata_int(id,OFFSET_GLOCK_AMMO,AMMO_Glock18,linuxdiff)
}
case 14:
{
fm_give_item(id,"weapon_mp5navy")
set_pdata_int(id,OFFSET_GLOCK_AMMO,AMMO_Mp5navy,linuxdiff)
}
case 15:
{
fm_give_item(id,"weapon_m249")
set_pdata_int(id,OFFSET_PARA_AMMO,AMMO_M249,linuxdiff)
}
case 16:
{
fm_give_item(id,"weapon_m3")
set_pdata_int(id,OFFSET_M3_AMMO,AMMO_M3,linuxdiff)
}
case 17:
{
fm_give_item(id,"weapon_m4a1")
set_pdata_int(id,OFFSET_FAMAS_AMMO,AMMO_M4a1,linuxdiff)
}
case 18:
{
fm_give_item(id,"weapon_tmp")
set_pdata_int(id,OFFSET_GLOCK_AMMO,AMMO_Tmp,linuxdiff)
}
case 19:
{
fm_give_item(id,"weapon_flashbang")
//set_pdata_int(id,OFFSET_FLASH_AMMO,amount,linuxdiff)
}
case 20:
{
fm_give_item(id,"weapon_deagle")
set_pdata_int(id,OFFSET_DEAGLE_AMMO,AMMO_Deagle,linuxdiff)
}
case 21:
{
fm_give_item(id,"weapon_ak47")
set_pdata_int(id,OFFSET_SCOUT_AMMO,AMMO_Ak47,linuxdiff)
}
}
left-=1
set_pev(weapon,WP_Left,left)
//if nothing left make invisiable
if(!left)
{
set_pev(weapon, pev_renderfx, kRenderFxNone)
set_pev(weapon, pev_rendercolor, {0.0,0.0,0.0})
set_pev(weapon, pev_rendermode, kRenderTransAlpha)
set_pev(weapon, pev_renderamt, 0.0)
}
}
public Forward_Think(ent)
{
if(!pev_valid(ent))return
static classname[32]
pev(ent, pev_classname, classname, 31)
//not our weapon
if(!equal(classname, wp_ent))return
//get values
classname[0] = pev(ent,WP_Max)
classname[1] = pev(ent,WP_Left)
//if its full return
if(classname[1] == classname[0])return
//if invisiable
if(!classname[1])
{
set_pev(ent, pev_renderfx, kRenderNormal)
set_pev(ent, pev_rendercolor, {255.0,255.0,255.0})
set_pev(ent, pev_rendermode, kRenderTransAlpha)
set_pev(ent, pev_renderamt, 255.0)
}
//add
classname[1] +=pcvar
//set it
if(classname[1] > classname[0])set_pev(ent,WP_Left,classname[0])
else set_pev(ent,WP_Left,classname[1])
}
public spawnent(id)
{
for(new i = 0; i < 46; i++)
{
new Float:origin[3]
// SsGetOrigin() will return true if useful location was found
// will return false if there's no more usefull locations
if(SsGetOrigin(origin))
{
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(pev_valid(ent))
{
set_pev(ent,pev_classname, wp_ent)
new ran = random_num(1,21)
switch (ran)
{
case 1:engfunc(EngFunc_SetModel, ent, "models/w_p228.mdl")
case 2:engfunc(EngFunc_SetModel, ent, "models/w_scout.mdl")
case 3:engfunc(EngFunc_SetModel, ent, "models/w_hegrenade.mdl")
case 4:engfunc(EngFunc_SetModel, ent, "models/w_xm1014.mdl")
case 5:engfunc(EngFunc_SetModel, ent, "models/w_mac10.mdl")
case 6:engfunc(EngFunc_SetModel, ent, "models/w_aug.mdl")
case 7:engfunc(EngFunc_SetModel, ent, "models/w_smokegrenade.mdl")
case 8:engfunc(EngFunc_SetModel, ent, "models/w_elite.mdl")
case 9:engfunc(EngFunc_SetModel, ent, "models/w_fiveseven.mdl")
case 10:engfunc(EngFunc_SetModel, ent, "models/w_ump45.mdl")
case 11:engfunc(EngFunc_SetModel, ent, "models/w_galil.mdl")
case 12:engfunc(EngFunc_SetModel, ent, "models/w_famas.mdl")
case 13:engfunc(EngFunc_SetModel, ent, "models/w_glock18.mdl")
case 14:engfunc(EngFunc_SetModel, ent, "models/w_mp5.mdl")
case 15:engfunc(EngFunc_SetModel, ent, "models/w_m249.mdl")
case 16:engfunc(EngFunc_SetModel, ent, "models/w_m3.mdl")
case 17:engfunc(EngFunc_SetModel, ent, "models/w_m4a1.mdl")
case 18:engfunc(EngFunc_SetModel, ent, "models/w_tmp.mdl")
case 19:engfunc(EngFunc_SetModel, ent, "models/w_flashbang.mdl")
case 20:engfunc(EngFunc_SetModel, ent, "models/w_deagle.mdl")
case 21:engfunc(EngFunc_SetModel, ent, "models/w_ak47.mdl")
}
engfunc(EngFunc_SetOrigin, ent, origin)
engfunc(EngFunc_SetSize, ent, {-2.0,-2.0,-2.0},{2.0,2.0,2.0})
set_pev(ent,pev_solid,2)
set_pev(ent,pev_origin,origin)
set_pev(ent,WP_Type,ran)
set_pev(ent,WP_Left,ran)
set_pev(ent,WP_Max,ran)
engfunc(EngFunc_DropToFloor, ent)
}
}
}
return PLUGIN_HANDLED
}
stock fm_give_item(index, const item[])
{
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))return 0;
new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);
new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if(pev(ent, pev_solid) != save)return ent;
engfunc(EngFunc_RemoveEntity, ent);
return -1;
}