/* =========================================
Name: Assasin Mod
Type: GamePlay
Version: 1.0
Author: Dias
-------------------------
Credits:
- Dias: Main Coder
- mercylezz: get random player code, set model, some stuff,...
- Redplane: some stuff
-------------------------
========================================= */
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <xs>
#define PLUGIN "Assassin Mod"
#define VERSION "1.0"
#define AUTHOR "Dias"
// Defines
#define MODELSET_TASK 11111
#define MODELCHANGE_DELAY 0.5
#define TASK_COUNTDOWN 22222
#define TASK_ASSASSIN_APP 33333
#define TASK_TEAM 44444
#define TASK_AURA 55555
#define TASK_SHOWHUD 66666
// Vars
new const assassin_coming[][] = {
"assassin/assassin_coming_1.wav",
"assassin/assassin_coming_2.wav",
"assassin/assassin_coming_3.wav"
}
new const assassin_win_sound[][] = {
"assassin/assassin_win1.wav",
"assassin/assassin_win2.wav",
"assassin/assassin_win3.wav"
}
new const human_win_sound[][] = {
"assassin/human_win1.wav",
"assassin/human_win2.wav",
"assassin/human_win3.wav"
}
new const countdown_sound[10][] =
{
"assassin/one.wav",
"assassin/two.wav",
"assassin/three.wav",
"assassin/four.wav",
"assassin/five.wav",
"assassin/six.wav",
"assassin/seven.wav",
"assassin/eight.wav",
"assassin/nine.wav",
"assassin/ten.wav"
}
new const entity_remove[][] =
{
"func_bomb_target",
"info_bomb_target",
"info_vip_start",
"func_vip_safetyzone",
"func_escapezone",
"hostage_entity",
"monster_scientist",
"func_hostage_rescue",
"info_hostage_rescue",
"env_fog",
"env_rain",
"env_snow",
"item_longjump",
"func_vehicle"
}
new countdown
new time_s
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }
new bool:no_take_damage[33]
new bool:g_assassin[33]
new bool:is_assassin_model[33]
new bool:lock_model[33]
new const old_model[64]
new Array:g_class_name
new Array:g_class_info
new Array:g_class_model
new Array:g_class_clawmodel
new Array:g_class_health
new Array:g_class_speed
new Array:g_class_gravity
new g_class[33]
new g_classnext[33]
new g_class_i
new g_sync_hud
#define OFFSET_AMMO_338MAGNUM 377
#define OFFSET_AMMO_762NATO 378
#define OFFSET_AMMO_556NATOBOX 379
#define OFFSET_AMMO_556NATO 380
#define OFFSET_AMMO_BUCKSHOT 381
#define OFFSET_AMMO_45ACP 382
#define OFFSET_AMMO_57MM 383
#define OFFSET_AMMO_50AE 384
#define OFFSET_AMMO_357SIG 385
#define OFFSET_AMMO_9MM 386
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
// No zombie classes?
if (!g_class_i) set_fail_state("[Assassin Mod] No Class Loaded !!!")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0" )
register_event("CurWeapon", "fw_check_model", "be", "1=1")
register_event("SendAudio", "assassin_win", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "human_win", "a", "2&%!MRAD_ctwin")
register_event("SendAudio", "no_one_won", "a", "2&%!MRAD_rounddraw")
register_logevent("event_round_end", 2, "1=Round_End")
register_event("TextMsg","event_round_end","a","2=#Game_Commencing","2=#Game_will_restart_in")
register_event("DeathMsg", "event_death", "a")
register_message(get_user_msgid("Health"), "hook_health")
register_message(get_user_msgid("TextMsg"), "hook_textmsg")
RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetClientKeyValue, "set_client_key_value")
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0])
{
RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
}
setting_config()
g_sync_hud = CreateHudSyncObj()
}
public plugin_precache()
{
register_forward(FM_Spawn, "fw_spawn")
g_class_name = ArrayCreate(32, 1)
g_class_info = ArrayCreate(32, 1)
g_class_model = ArrayCreate(32, 1)
g_class_clawmodel = ArrayCreate(32, 1)
g_class_health = ArrayCreate(1, 1)
g_class_speed = ArrayCreate(1, 1)
g_class_gravity = ArrayCreate(1, 1)
new i, buffer[100]
for (i = 0; i < ArraySize(g_class_model); i++)
{
ArrayGetString(g_class_model, i, buffer, charsmax(buffer))
format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
engfunc(EngFunc_PrecacheModel, buffer)
}
for (i = 0; i < ArraySize(g_class_clawmodel); i++)
{
ArrayGetString(g_class_clawmodel, i, buffer, charsmax(buffer))
engfunc(EngFunc_PrecacheModel, buffer)
}
for(i = 0; i < sizeof(assassin_coming); i++)
{
precache_sound(assassin_coming[i])
}
for(i = 0; i < sizeof(assassin_win_sound); i++)
{
precache_sound(assassin_win_sound[i])
}
for(i = 0; i < sizeof(human_win_sound); i++)
{
precache_sound(human_win_sound[i])
}
for(i = 0; i < sizeof(countdown_sound); i++)
{
precache_sound(countdown_sound[i])
}
}
public plugin_natives()
{
register_native("asm_get_user_assassin", "_get_assassin", 1)
register_native("asm_register_assassin_class", "_class_register", 1)
}
/* ====================================
------------- MAIN FORWARD ------------
======================================*/
public fw_spawn(ent)
{
new classname[32]
pev(ent, pev_classname, classname, sizeof(classname))
for(new i = 0; i < sizeof(entity_remove); i++)
{
if(equal(classname, entity_remove[i]))
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public set_client_key_value(id)
{
if(lock_model[id])
return FMRES_SUPERCEDE
return FMRES_HANDLED
}
public event_round_start(id)
{
balance_teams()
for(new i = 1; i <= get_maxplayers(); i++)
{
no_take_damage[i] = true
if(is_assassin_model[i])
{
fm_reset_user_model(i)
is_assassin_model[i] = false
}
}
time_s = 10
countdown = 9
set_task(5.0, "assassin_countdown", id+TASK_COUNTDOWN)
}
public event_round_end(id)
{
if(task_exists(TASK_COUNTDOWN)) remove_task(TASK_COUNTDOWN)
if(task_exists(TASK_ASSASSIN_APP)) remove_task(TASK_ASSASSIN_APP)
if(task_exists(TASK_SHOWHUD)) remove_task(id+TASK_SHOWHUD)
set_lights("#OFF")
for(new i = 1; i <= get_maxplayers(); i++)
{
g_assassin[i] = false
remove_task(id+TASK_AURA)
}
}
public event_death(id)
{
if(g_assassin[id])
{
if(task_exists(TASK_SHOWHUD)) remove_task(id+TASK_SHOWHUD)
}
}
public assassin_win()
{
client_cmd(0,"stopsound")
emit_sound(0, CHAN_VOICE, assassin_win_sound[random_num(0, sizeof(assassin_win_sound))], 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE
}
public human_win()
{
client_cmd(0,"stopsound")
emit_sound(0, CHAN_VOICE, human_win_sound[random_num(0, sizeof(human_win_sound))], 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE
}
public no_one_won()
{
static rand
rand = random_num(0,2)
client_cmd(0,"stopsound")
switch(rand)
{
case 0: client_cmd(0,"spk assassin/human_win1")
case 1: client_cmd(0,"spk assassin/human_win2")
case 2: client_cmd(0,"spk assassin/human_win3")
}
return PLUGIN_CONTINUE
}
public hook_textmsg()
{
new szMsg[22]
get_msg_arg_string(2, szMsg, sizeof szMsg)
if(equal(szMsg, "#Terrorists_Win"))
set_msg_arg_string(2, "Assassin Win")
else if(equal(szMsg, "#CTs_Win"))
set_msg_arg_string(2 , "Human Win")
else if(equal(szMsg, "#Round_Draw"))
set_msg_arg_string(2 , "Human Win")
}
public fw_Item_Deploy_Post(weapon_ent)
{
static id
id = pev(weapon_ent, pev_owner)
if(is_user_alive(id) && g_assassin[id])
{
new class_clawmodel[32]
ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, class_clawmodel)
}
}
public fw_TouchWeapon(weapon, id)
{
if (is_user_alive(id) && g_assassin[id])
return HAM_SUPERCEDE;
return HAM_IGNORED;
}
public fw_check_model(id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE
if(g_assassin[id])
{
static class_clawmodel[32]
ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
if(get_user_weapon(id) == CSW_KNIFE)
set_pev(id, pev_viewmodel2, class_clawmodel)
}
static weapon
static ammo
weapon = read_data(2)
ammo = fm_get_user_bpammo(id, weapon)
if(ammo < 1)
fm_set_user_bpammo(id, weapon, 254)
return PLUGIN_CONTINUE
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
if(g_assassin[attacker] && get_user_weapon(attacker) == CSW_KNIFE)
{
SetHamParamFloat(4, damage * 1000.0)
}
if(no_take_damage[victim])
{
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
/* ====================================
------------- MAIN PUBLIC -------------
======================================*/
public setting_config()
{
server_cmd("mp_flashlight 1")
server_cmd("mp_autoteambalance 0")
server_cmd("mp_limitteams 0")
}
public assassin_countdown()
{
emit_sound(0, CHAN_VOICE, countdown_sound[countdown], 1.0, ATTN_NORM, 0, PITCH_NORM)
client_print(0, print_center, "Sat Thu se xuat hien sau: %i", time_s)
countdown--
--time_s
if(time_s >= 1)
{
set_task(1.0, "assassin_countdown", TASK_COUNTDOWN)
} else {
set_task(3.0, "assassin_appear", TASK_ASSASSIN_APP)
}
}
public assassin_appear()
{
for(new i = 1; i <= get_maxplayers(); i++)
{
no_take_damage[i] = false
}
set_hudmessage(0, 255, 0, -1.0, 0.22, 1, 5.0, 10.0)
show_hudmessage(0, "Sat Thu Da Xuat Hien !!!")
emit_sound(0, CHAN_VOICE, assassin_coming[random_num(0, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_lights("c")
static player_num
player_num = fnGetAlive()
new id = fnGetRandomAlive(random_num(1, player_num))
set_assassin(id)
for(new i = 0; i < get_maxplayers(); i++)
{
if(!g_assassin[i])
cs_set_user_team(i, CS_TEAM_CT)
}
}
public set_assassin(id)
{
g_assassin[id] = true
is_assassin_model[id] = true
drop_all_weapon(id)
infection_effects(id)
g_class[id] = g_classnext[id]
if(g_class[id] == -1) g_class[id] = 0
static class_name[32]
static class_info[32]
static class_model[32]
static class_clawmodel[32]
static class_health
static Float:class_speed
static Float:class_gravity
ArrayGetString(g_class_name, g_class[id], class_name, sizeof(class_name))
ArrayGetString(g_class_info, g_class[id], class_info, sizeof(class_info))
ArrayGetString(g_class_model, g_class[id], class_model, sizeof(class_model))
ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
class_health = ArrayGetCell(g_class_health, g_class[id])
class_speed = ArrayGetCell(g_class_speed, g_class[id])
class_gravity = ArrayGetCell(g_class_gravity, g_class[id])
cs_set_user_team(id, CS_TEAM_T)
fm_set_user_model(id, class_model)
set_pev(id, pev_viewmodel2, class_clawmodel)
set_user_health(id, class_health)
set_pev(id, pev_maxspeed, class_speed)
set_pev(id, pev_gravity, class_gravity)
select_class(id)
set_task(0.2, "set_aura", id+TASK_AURA, _, _, "b")
set_task(1.0, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")
}
public set_aura(taskid)
{
new id = taskid - TASK_AURA
if(is_user_alive(id) && g_assassin[id])
{
static Float:originF[3]
pev(id, pev_origin, originF)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT)
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(20) // radius
write_byte(255) // red
write_byte(10) // green
write_byte(10) // blue
write_byte(2) // life
write_byte(0) // decay rate
message_end()
} else {
remove_task(id+TASK_AURA)
}
}
public hook_health(msgid, dest, id)
{
if(is_user_alive(id) && g_assassin[id])
{
new health = pev(id, pev_health)
new Float:class_health = 30000.0
new new_health = floatround((health / class_health) * 100.0)
new real_health = clamp(new_health, 1, 100)
set_msg_arg_int(1, ARG_BYTE, real_health)
}
}
infection_effects(id)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, id)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_NERVEGAS) // damage type - DMG_RADIATION
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
// Get player's origin
static origin[3]
get_user_origin(id, origin)
// Tracers?
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_IMPLOSION) // TE id
write_coord(origin[0]) // x
write_coord(origin[1]) // y
write_coord(origin[2]) // z
write_byte(128) // radius
write_byte(20) // count
write_byte(3) // duration
message_end()
// Particle burst?
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_PARTICLEBURST) // TE id
write_coord(origin[0]) // x
write_coord(origin[1]) // y
write_coord(origin[2]) // z
write_short(50) // radius
write_byte(70) // color
write_byte(3) // duration (will be randomized a bit)
message_end()
// Light sparkle?
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_DLIGHT) // TE id
write_coord(origin[0]) // x
write_coord(origin[1]) // y
write_coord(origin[2]) // z
write_byte(20) // radius
write_byte(100) // r
write_byte(100) // g
write_byte(100) // b
write_byte(2) // life
write_byte(0) // decay rate
message_end()
}
public select_class(id)
{
new menu = menu_create("Select Assassin Class:", "select_handle")
for(new i = 0; i < g_class_i; i++)
{
new cname[32], str[32]
ArrayGetString(g_class_name, i, cname, sizeof(cname))
num_to_str(i, str, charsmax(str))
menu_additem(menu, cname, str)
}
menu_display(id, menu, 0)
}
public select_handle(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[2], szName[64]
new access, callback
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
g_classnext[id] = str_to_num(data)
g_class[id] = g_classnext[id]
static class_model[32]
static class_clawmodel[32]
static Float:class_speed
static Float:class_gravity
ArrayGetString(g_class_model, g_class[id], class_model, sizeof(class_model))
ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
class_speed = ArrayGetCell(g_class_speed, g_class[id])
class_gravity = ArrayGetCell(g_class_gravity, g_class[id])
fm_set_user_model(id, class_model)
set_pev(id, pev_viewmodel2, class_clawmodel)
set_pev(id, pev_maxspeed, class_speed)
set_pev(id, pev_gravity, class_gravity)
infection_effects(id)
menu_destroy(menu)
return PLUGIN_HANDLED
}
public ShowHUD(taskid)
{
new id = taskid - TASK_SHOWHUD
if(g_assassin[id])
{
static class_name[32]
static class_health
ArrayGetString(g_class_name, g_class[id], class_name, sizeof(class_name))
class_health = ArrayGetCell(g_class_health, g_class[id])
set_hudmessage(0, 255, 0, 0.02, 0.9, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(id, g_sync_hud, "Health: %i/%i - Assassin Class: %s", get_user_health(id), class_health, class_name)
} else {
remove_task(id+TASK_SHOWHUD)
}
}
/* ====================================
------------- MAIN STOCK -------------
======================================*/
public drop_all_weapon(id)
{
drop_weapons(id, 1)
drop_weapons(id, 2)
strip_user_weapons(id)
give_item(id, "weapon_knife")
if(g_assassin[id])
{
static class_clawmodel[32]
ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
set_pev(id, pev_viewmodel2, class_clawmodel)
}
}
stock drop_weapons(id, dropwhat)
{
// Get user weapons
static weapons[32], num, i, weaponid
num = 0 // reset passed weapons count (bugfix)
get_user_weapons(id, weapons, num)
// Loop through them and drop primaries or secondaries
for (i = 0; i < num; i++)
{
// Prevent re-indexing the array
weaponid = weapons[i]
if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
static wname[32], weapon_ent
get_weaponname(weaponid, wname, charsmax(wname))
weapon_ent = find_ent_by_owner(-1, wname, id)
set_pev(weapon_ent, pev_iuser1, cs_get_user_bpammo(id, weaponid))
engclient_cmd(id, "drop", wname)
cs_set_user_bpammo(id, weaponid, 0)
}
}
}
// Transfer Player Team
balance_teams()
{
static iPlayersnum
iPlayersnum = get_playersnum()
if (iPlayersnum < 1) return;
static iTerrors, iMaxTerrors, id
iMaxTerrors = iPlayersnum/2
iTerrors = 0
for (id = 1; id <= get_maxplayers(); id++)
{
if (!is_user_connected(id))
continue;
if (cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
continue;
remove_task(id+TASK_TEAM)
cs_set_user_team(id, CS_TEAM_CT)
}
while (iTerrors < iMaxTerrors)
{
if (++id > get_maxplayers()) id = 1
if (!is_user_connected(id))
continue;
if (cs_get_user_team(id) != CS_TEAM_CT)
continue;
if (random_num(0, 1))
{
cs_set_user_team(id, CS_TEAM_T)
iTerrors++
}
}
}
fnGetAlive()
{
static iAlive, id
iAlive = 0
for (id = 1; id <= get_maxplayers(); id++)
{
if (is_user_alive(id))
iAlive++
}
return iAlive;
}
fnGetRandomAlive(n)
{
static iAlive, id
iAlive = 0
for (id = 1; id <= get_maxplayers(); id++)
{
if (is_user_alive(id))
iAlive++
if (iAlive == n)
return id;
}
return -1;
}
stock fm_get_user_bpammo(index, weapon)
{
static offset
switch(weapon)
{
case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
case CSW_FAMAS, CSW_M4A1, CSW_AUG,
CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
case CSW_P228: offset = OFFSET_AMMO_357SIG
case CSW_GLOCK18, CSW_TMP, CSW_ELITE,
CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
default: offset = 0
}
return offset ? get_pdata_int(index, offset) : 0
}
stock fm_set_user_bpammo(index, weapon, amount)
{
static offset
switch(weapon)
{
case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
case CSW_FAMAS, CSW_M4A1, CSW_AUG,
CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
case CSW_P228: offset = OFFSET_AMMO_357SIG
case CSW_GLOCK18, CSW_TMP, CSW_ELITE,
CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
default: offset = 0
}
if(offset)
set_pdata_int(index, offset, amount)
return 1
}
stock fm_set_user_model(id, const model[])
{
lock_model[id] = false
engfunc(EngFunc_GetInfoKeyBuffer, "model", old_model)
engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", model);
lock_model[id] = true
}
stock fm_get_user_model( player, model[], len )
{
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player ), "model", model, len)
}
stock fm_reset_user_model(id)
{
lock_model[id] = false
dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id))
lock_model[id] = true
}
/* ====================================
------------- MAIN NATIVE -------------
======================================*/
public _get_assassin(id)
{
return g_assassin[id]
}
public _class_register(const classname[], const classinfo[], const classmodel[], const classclawmodel[], health, Float:speed, Float:gravity)
{
param_convert(1)
param_convert(2)
param_convert(3)
param_convert(4)
ArrayPushString(g_class_name, classname)
ArrayPushString(g_class_info, classinfo)
ArrayPushString(g_class_model, classmodel)
ArrayPushString(g_class_clawmodel, classclawmodel)
ArrayPushCell(g_class_health, health)
ArrayPushCell(g_class_speed, speed)
ArrayPushCell(g_class_gravity, gravity)
g_class_i++
}