Исходный код функции:
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt)
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id)
return 1
}
Синтаксис:
ham_give_weapon(id,weapon[])
- id - Индекс игрока
- weapon[] - Имя выдаваемого оружия (weapon_*)
Тип функции:
stock
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "[The useful functions] ham_give_weapon"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say AWP","give_AWP")
register_clcmd("say AK","give_AK")
}
public give_AK(id){
ham_give_weapon(id,"weapon_ak47")
}
public give_AWP(id){
ham_give_weapon(id,"weapon_awp")
}
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt)
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id)
return 1
}
Описание:
И так есть 2 команды:
say AK и say AWP обе они выдают оружие игроку, в примере показано как использовать функцию, а данное пояснение написано только к тому что, выполнив поочередно эти две команды у вас будет 2 оружия одновременно, по этому если вы хотите поменять игроку оружие, то придется сначала забрать то, которое у него было.