#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <dhudmessage>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <hamsandwich>
#include <mapname_patcher>
#include <xs>
#define PLUGIN "[CSO] Hidden"
#define VERSION "1.0"
#define AUTHOR "RaZzoR"
#define DICTIONARY "cso_hidden.txt"
#define m_pPlayer 41
#define m_flNextAttack 83
new change_team[33], g_hidden[33] , protection_time[33]
new count_number, g_invis_timer, gMsgidShowTimer, gKnifeEntity
new pcvar_max_kill
new allow_maps[][][]= {
{ "hd_harlem", "Hidden City" }
}
new primary_weapons[][][] = {
{ "M4A1", "weapon_m4a1", "90" },
{ "AK47", "weapon_ak47", "90" },
{ "AUG", "weapon_aug", "90" },
{ "SG552", "weapon_sg552", "90" },
{ "GALIL", "weapon_galil", "90" },
{ "FAMAS", "weapon_famas", "90" },
{ "SCOUT", "weapon_scout", "90" },
{ "AWP", "weapon_awp", "30" },
{ "SG550", "weapon_sg550", "90" },
{ "M249", "weapon_m249", "200" },
{ "G3SG1", "weapon_g3sg1", "90" },
{ "MP5NAVY", "weapon_mp5navy", "120" },
{ "M3", "weapon_m3", "32" },
{ "XM1014", "weapon_xm1014", "32" },
{ "TMP", "weapon_tmp", "120" },
{ "MAC10", "weapon_mac10", "100" },
{ "P90", "weapon_p90", "100" }
}
new secondary_weapons[][][] = {
{ "USP", "weapon_usp", "100" },
{ "GLOCK18", "weapon_glock18", "120" },
{ "DEAGLE", "weapon_deagle", "35" },
{ "P228", "weapon_p228", "52" },
{ "ELITE", "weapon_elite", "120" },
{ "FIVESEVEN", "weapon_fiveseven", "100" }
}
new const hidden_countsounds[][] = {
"cso_hidden/one.wav",
"cso_hidden/two.wav",
"cso_hidden/three.wav",
"cso_hidden/four.wav",
"cso_hidden/five.wav"
}
new const hidden_laugh[][] = {
"cso_hidden/hidden_laugh1.wav",
"cso_hidden/hidden_laugh2.wav",
"cso_hidden/hidden_laugh3.wav"
}
new const hidden_speak[][] = {
"cso_hidden/hidden_speak1.wav",
"cso_hidden/hidden_speak2.wav",
"cso_hidden/hidden_speak3.wav",
"cso_hidden/hidden_speak4.wav",
"cso_hidden/hidden_speak5.wav",
"cso_hidden/hidden_speak6.wav",
"cso_hidden/hidden_speak7.wav"
}
new const hidden_slash[][] = {
"cso_hidden/joker_slash1.wav",
"cso_hidden/joker_slash2.wav",
"cso_hidden/joker_slash3.wav"
}
new const hidden_hit[][] = {
"cso_hidden/joker_slash_hit1.wav",
"cso_hidden/joker_slash_hit2.wav",
"cso_hidden/joker_slash_hit3.wav"
}
new const hidden_knife_model[][] = {
"models/cso_hidden/v_joker.mdl",
"models/cso_hidden/p_joker.mdl"
}
new const hidden_sprites[][] = {
"knife_joker_csohd",
"sprites/cso_hidden/640hud68.spr"
}
new const Float:PrimaryDamage[] = {
60.0,
65.0,
60.0,
60.0,
60.0,
60.0,
60.0,
60.0
}
new const Float:SecondaryDamage[] = {
120.0,
260.0,
120.0,
120.0,
120.0,
120.0,
120.0,
120.0
}
new const hidden_BHitFlesh[][] = {
"player/bhit_flesh-1.wav",
"player/bhit_flesh-2.wav",
"player/bhit_flesh-3.wav"
}
#define ATTACK_PRIMARY 1
#define ATTACK_SECONDARY 2
new const hidden_death[] = "cso_hidden/hidden_death.wav"
new const hidden_slash3_hit[] = "cso_hidden/joker_slash3_hit.wav"
new const hidden_player_model[] = "cso_joker"
new const hidden_gamename[] = "Hidden"
new const FIRST_JOIN_MSG[] = "#Team_Select"
new const FIRST_JOIN_MSG_SPEC[] = "#Team_Select_Spect"
new const INGAME_JOIN_MSG[] = "#IG_Team_Select"
new const INGAME_JOIN_MSG_SPEC[] = "#IG_Team_Select_Spect"
const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC)
public plugin_init()
{
register_dictionary(DICTIONARY)
new map_name[32], buffer[128], index
get_mapname(map_name, 31)
for(index=0;index<sizeof(allow_maps);index++)
{
if(equal(map_name, allow_maps[index][0]))
{
if(strlen(allow_maps[index][1]) > 0)
Patch_MapName(allow_maps[index][1])
break
}
}
if(index == sizeof(allow_maps))
{
formatex(buffer, sizeof(buffer), "%L", LANG_SERVER, "HIDDEN_WRONG_MAP")
set_fail_state(buffer)
return
}
register_plugin(PLUGIN, VERSION, AUTHOR)
gMsgidShowTimer = get_user_msgid("ShowTimer")
set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
pcvar_max_kill = register_cvar("Hidden_Max_Score", "60")
RegisterHam(Ham_Spawn, "player", "Spawn", 1)
RegisterHam(Ham_Touch, "armoury_entity", "FwdHamPickupWeapon")
RegisterHam(Ham_Touch, "weaponbox", "FwdHamPickupWeapon")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwd_Weapon_PrimaryAttack_Pre");
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwd_Weapon_SecondaryAttack_Pre");
RegisterHam(Ham_TraceAttack, "player", "fwd_TraceAttack_Pre")
if((gKnifeEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "weapon_knife"))))
set_pdata_int(gKnifeEntity, m_pPlayer, 0, 4)
register_message(get_user_msgid("RoundTime"),"Event_RoundTime")
register_message(get_user_msgid("StatusIcon"), "msgStatusIcon")
register_message(get_user_msgid("HideWeapon"), "msgHideWeapon")
register_message(get_user_msgid("ShowMenu"), "msgShowMenu")
register_message(get_user_msgid("VGUIMenu"), "msgVGUIMenu")
register_message(get_user_msgid("Health"), "message_Health")
register_clcmd("nightvision", "block_cmd")
register_clcmd("chooseteam", "block_cmd")
register_forward(FM_EmitSound, "Forward_EmitSound")
register_forward(FM_GetGameDescription, "GameDesc")
register_forward(FM_ClientKill, "Forward_ClientKill")
register_forward(FM_CmdStart, "fwCmdStart")
register_forward(FM_SetModel, "SetModel")
register_event("RoundTime", "no_hostages", "bc")
register_event("BombDrop", "Event_BombDropped", "a", "4=1")
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_event("DeathMsg", "death", "a")
register_event("ResetHUD", "onResetHUD", "b")
no_bomb()
no_hostages()
}
public plugin_cfg()
{
server_cmd("mp_limitteams 32")
server_cmd("sv_restart 1")
server_cmd("mp_playerid 1")
server_cmd("mp_flashlight 1")
server_cmd("sv_maxspeed 380")
}
public plugin_precache()
{
new buffer[128]
for(new i;i<sizeof(hidden_countsounds);i++)
precache_sound(hidden_countsounds[i])
for(new i;i<sizeof(hidden_laugh);i++)
precache_sound(hidden_laugh[i])
for(new i;i<sizeof(hidden_speak);i++)
precache_sound(hidden_speak[i])
for(new i;i<sizeof(hidden_slash);i++)
precache_sound(hidden_slash[i])
for(new i;i<sizeof(hidden_hit);i++)
precache_sound(hidden_hit[i])
for(new i;i<sizeof(hidden_knife_model);i++)
precache_model(hidden_knife_model[i])
precache_sound(hidden_death)
precache_sound(hidden_slash3_hit)
precache_generic(hidden_sprites[1])
formatex(buffer, sizeof(buffer), "models/player/%s/%s.mdl", hidden_player_model, hidden_player_model)
precache_model(buffer)
formatex(buffer, sizeof(buffer), "sprites/%s.txt", hidden_sprites[0])
precache_generic(buffer)
register_clcmd(hidden_sprites[0], "weapon_hook")
}
public weapon_hook(id)
{
engclient_cmd(id, "weapon_knife")
return PLUGIN_HANDLED
}
public block_cmd(id)
return PLUGIN_HANDLED
public Forward_ClientKill(id)
return FMRES_SUPERCEDE
public onResetHUD(id)
{
message_begin(MSG_ONE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<5))
message_end()
}
public message_Health(msgid, dest, id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE
static hp
hp = get_msg_arg_int(1)
if(hp > 255)
set_msg_arg_int(1, ARG_BYTE, 255)
return PLUGIN_CONTINUE
}
public msgHideWeapon()
set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | (1<<5))
public SetModel(iEnt, szModel[])
{
if(equal(szModel, "models/w_", 9))
{
if(szModel[9] != 'h' && !equal(szModel[9], "sm", 2) && !equal(szModel[9], "fl", 2))
set_pev(iEnt, pev_nextthink, get_gametime() + 10.0)
}
}
public FwdHamPickupWeapon(ent, id)
{
if(is_user_alive(id) && g_hidden[id])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fwCmdStart(id, uc_handle, seed)
{
if(get_uc(uc_handle, UC_Impulse) == 100)
{
if(g_hidden[id])
{
set_uc(uc_handle, UC_Impulse, 0)
return FMRES_HANDLED
}
else
{
if(pev(id, pev_effects) & EF_DIMLIGHT)
set_pev(id, pev_impulse, 100)
}
}
return FMRES_IGNORED
}
public msgShowMenu(iMsgid, iDest, id)
{
static sMenuCode[iMaxLen]
get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1)
if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC))
{
set_autojoin_task(id, iMsgid)
return PLUGIN_HANDLED
}
else if(equal(sMenuCode, INGAME_JOIN_MSG) || equal(sMenuCode, INGAME_JOIN_MSG_SPEC))
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public msgVGUIMenu(iMsgid, iDest, id)
{
if(get_msg_arg_int(1) != 2)
return PLUGIN_CONTINUE
set_autojoin_task(id, iMsgid)
return PLUGIN_HANDLED
}
public task_Autojoin(iParam[], id)
handle_join(id, iParam[0])
handle_join(id, iMsgid)
{
new iMsgBlock = get_msg_block(iMsgid)
set_msg_block(iMsgid, BLOCK_SET)
new players[32], pnum
get_players(players, pnum, "ae", "TERRORIST")
if(pnum == 0)
{
engclient_cmd(id, "jointeam", "1")
g_hidden[id] = true
}
else
engclient_cmd(id, "jointeam", "2")
new iClass[2]
iClass[0] = random_num('1', '4')
engclient_cmd(id, "joinclass", iClass)
if(is_user_alive(id))
user_silentkill(id)
set_user_frags(id, 0)
set_task(0.2, "respawn_task", id)
set_task(1.0, "Hidden_HUD", id)
set_msg_block(iMsgid, iMsgBlock)
}
set_autojoin_task(id, iMsgid)
{
new iParam[1]
iParam[0] = iMsgid
set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam))
}
public Event_RoundTime(const MsgId, const MsgDest, const MsgEnt)
set_msg_arg_int(1, ARG_SHORT, get_timeleft())
public Event_BombDropped()
{
message_begin(MSG_BROADCAST, gMsgidShowTimer)
message_end()
}
public msgStatusIcon(msgid, msgdest, id)
{
static szIcon[8]
get_msg_arg_string(2, szIcon, 7)
if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
{
set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public no_bomb()
{
new fhosr = find_ent_by_class(-1, "func_hostage_rescue")
while(fhosr > get_maxplayers())
{
entity_set_int(fhosr, EV_INT_flags, FL_KILLME)
fhosr = find_ent_by_class(fhosr, "func_hostage_rescue")
}
new doneonce = 0
new fbombt = find_ent_by_class(-1, "func_bomb_target")
while(fbombt > get_maxplayers())
{
entity_set_int(fbombt, EV_INT_flags, FL_KILLME)
doneonce = 1
fbombt = find_ent_by_class(fbombt, "func_bomb_target")
}
if(doneonce == 1)server_cmd("sv_restartround 1")
new ibombt = find_ent_by_class(-1, "info_bomb_target")
while(ibombt > get_maxplayers())
{
entity_set_int(ibombt, EV_INT_flags, FL_KILLME)
ibombt = find_ent_by_class(ibombt, "info_bomb_target")
}
new fescape = find_ent_by_class(-1, "func_escapezone")
while(fescape > get_maxplayers())
{
entity_set_int(fescape, EV_INT_flags, FL_KILLME)
fescape = find_ent_by_class(fescape, "func_escapezone")
}
new fvips = find_ent_by_class(-1, "func_vip_safteyzone")
while(fvips > get_maxplayers())
{
entity_set_int(fvips, EV_INT_flags, FL_KILLME)
fvips = find_ent_by_class(fvips, "func_vip_safteyzone")
}
new fvipst = find_ent_by_class(-1, "func_vip_start")
while(fvipst > get_maxplayers())
{
entity_set_int(fvipst, EV_INT_flags, FL_KILLME)
fvipst = find_ent_by_class(fvipst, "func_vip_start")
}
return PLUGIN_CONTINUE
}
public no_hostages()
{
new iHos = find_ent_by_class(-1, "hostage_entity")
while(iHos > get_maxplayers())
{
entity_set_int(iHos, EV_INT_flags, FL_KILLME)
iHos = find_ent_by_class(iHos, "hostage_entity")
}
new jHos = find_ent_by_class(-1, "monster_scientist")
while(iHos > get_maxplayers())
{
entity_set_int(jHos, EV_INT_flags, FL_KILLME)
iHos = find_ent_by_class(jHos, "monster_scientist")
}
}
public client_disconnect(id)
{
if(g_hidden[id])
{
static player
player = get_random_ct()
new random_name[32]
get_user_name(player, random_name, charsmax(random_name))
new players[32], pnum, tempid
get_players(players, pnum, "ae", "CT")
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_dhudmessage(0, 51, 255, -1.0, 0.28, 0, 6.0, 2.0, 0.1, 0.2)
show_dhudmessage(tempid, "%L^n%L", tempid, "HIDDEN_LEFT", tempid, "HIDDEN_BECAME", random_name)
}
if(player > 0)
{
cs_set_user_team(player, CS_TEAM_T)
g_hidden[player] = true
set_task(0.1, "respawn_task", player)
}
}
}
public fwd_TraceAttack_Pre(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
if(1 <= attacker <= get_maxplayers() && g_hidden[attacker])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fwd_Weapon_PrimaryAttack_Pre(ent)
ProcessAttack(ent, ATTACK_PRIMARY)
public fwd_Weapon_SecondaryAttack_Pre(ent)
ProcessAttack(ent, ATTACK_SECONDARY)
ProcessAttack(ent, AttackType)
{
new id = get_pdata_cbase(ent, m_pPlayer, 4)
if(!g_hidden[id])
return
new TaskData[2]
TaskData[0] = id
TaskData[1] = AttackType
set_pdata_float(id, m_flNextAttack, AttackType == ATTACK_PRIMARY ? 1.0 : 1.2, 5)
set_task(AttackType == ATTACK_PRIMARY ? 0.1 : 0.9, "task_DelayAttack", id, TaskData, 2)
}
public task_DelayAttack(TaskData[])
{
new id = TaskData[0]
new AttackType = TaskData[1]
new Float:viewofs[3]
new Float:start[3]
new Float:end[3]
new Float:AimVec[3]
pev(id, pev_origin, start)
pev(id, pev_view_ofs, viewofs)
xs_vec_add(start, viewofs, start)
velocity_by_aim(id, 1, AimVec)
xs_vec_mul_scalar(AimVec, AttackType == ATTACK_PRIMARY ? 48.0 : 32.0, end)
xs_vec_add(start, end, end)
new hTrace, Float:trFraction, bool:trHull
engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTrace)
get_tr2(hTrace, TR_flFraction, trFraction)
if(trFraction >= 1.00)
{
engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTrace)
get_tr2(hTrace, TR_flFraction, trFraction)
trHull = true
}
if (trFraction >= 1.00)
emit_sound(id, CHAN_WEAPON, hidden_slash[random(sizeof hidden_slash)], VOL_NORM, ATTN_NORM, 0, 94)
else
{
new trPlayer = get_tr2(hTrace, TR_pHit)
if(is_user_alive(id) && get_user_team(id) != get_user_team(trPlayer) && 1 <= trPlayer <= get_maxplayers())
{
emit_sound(trPlayer, CHAN_VOICE, hidden_BHitFlesh[random(sizeof hidden_BHitFlesh)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
new hTraceAttack = create_tr2()
if(trHull)
engfunc(EngFunc_TraceHull, start, end, DONT_IGNORE_MONSTERS, HULL_HEAD, id, hTraceAttack)
else
engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, id, hTraceAttack)
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 175)
ExecuteHam(Ham_TraceAttack, trPlayer, id, AttackType == ATTACK_PRIMARY ? PrimaryDamage[0] : SecondaryDamage[0], AimVec, hTraceAttack, DMG_BULLET|DMG_NEVERGIB)
free_tr2(hTraceAttack)
if(AttackType == ATTACK_PRIMARY)
{
emit_sound(id, CHAN_WEAPON, hidden_hit[random(sizeof hidden_hit)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
ExecuteHam(Ham_TakeDamage, trPlayer, gKnifeEntity, id, PrimaryDamage[get_tr2(hTrace, TR_iHitgroup)] * 1.2, DMG_BULLET|DMG_NEVERGIB)
}
else
{
emit_sound(id, CHAN_WEAPON, hidden_slash3_hit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
ExecuteHam(Ham_TakeDamage, trPlayer, gKnifeEntity, id, (SecondaryDamage[get_tr2(hTrace, TR_iHitgroup)] * 1.2 * ((IsBackstab(id, trPlayer)) ? 3.0 : 1.0)), DMG_BULLET|DMG_NEVERGIB)
}
}
else
emit_sound(id, CHAN_ITEM, hidden_hit[1], VOL_NORM, ATTN_NORM, 0, random_num(98, 101))
}
free_tr2(hTrace)
}
bool:IsBackstab(const attacker, const victim)
{
new Float: vec1[3]
new Float: vec2[3]
velocity_by_aim(attacker, 1, vec1)
new Float:invlen = xs_rsqrt(vec1[0] * vec1[0] + vec1[1] * vec1[1])
vec1[0] *= invlen
vec1[1] *= invlen
pev(victim, pev_angles, vec2)
angle_vector(vec2, ANGLEVECTOR_FORWARD, vec2)
return vec1[0] * vec2[0] + vec1[1] * vec2[1] > 0.8 ? true : false
}
public Forward_EmitSound(id, channel, const sound[], Float:vol, Float:attn, flags, pitch)
{
if(is_user_connected(id) && g_hidden[id] && (channel == CHAN_WEAPON || channel == CHAN_ITEM ) && equal(sound, "weapons/knife_", 14) && ! equal(sound[14], "deploy", 6))
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public death()
{
new attacker = read_data(1)
new victim = read_data(2)
new attacker_name[32]
get_user_name(attacker, attacker_name, charsmax(attacker_name))
if(attacker == victim || get_user_team(attacker) == get_user_team(victim) || !attacker || !victim)
{
set_task(3.0, "respawn_task", victim)
remove_screenfade(victim)
}
else if(g_hidden[attacker] && get_user_team(attacker) == 1)
{
g_invis_timer = 0
invis_count()
set_task(3.0, "respawn_task", victim)
client_cmd(0, "speak ^"%s^"", hidden_laugh[random(sizeof(hidden_laugh))])
give_screenfade(attacker)
}
else
{
client_cmd(0, "speak ^"%s^"", hidden_death)
set_user_frags(attacker, get_user_frags(attacker) + 2)
remove_screenfade(victim)
set_rendering(victim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
set_dhudmessage(0, 51, 255, -1.0, 0.28, 0, 6.0, 1.5, 0.1, 0.2)
show_dhudmessage(0, "%L", LANG_PLAYER, "HIDDEN_KILLED", attacker_name)
g_hidden[victim] = false
change_team[attacker] = true
change_team[victim] = true
set_task(1.0, "Change_Teams", victim)
count_number = 5
set_task(2.0, "count_and_choose_hidden")
}
}
public count_and_choose_hidden()
{
if(count_number <= 0)
{
set_task(0.2, "choose_hidden")
return
}
client_cmd(0, "speak ^"%s^"", hidden_countsounds[count_number-1])
set_dhudmessage(0, 51, 255, -1.0, 0.28, 0, 6.0, 0.5, 0.1, 0.2)
show_dhudmessage(0, "%L", LANG_PLAYER, "HIDDEN_COUNTDOWN_MSG", count_number)
count_number--
set_task(1.0, "count_and_choose_hidden")
}
public Change_Teams(id)
{
if(change_team[id])
{
switch(cs_get_user_team(id))
{
case CS_TEAM_CT:
{
g_hidden[id] = true
new hidden_name[32]
get_user_name(id, hidden_name, charsmax(hidden_name))
cs_set_user_team(id, CS_TEAM_T)
set_task(0.1, "respawn_task", id)
new players[32], pnum, tempid
get_players(players, pnum, "ae", "CT")
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_dhudmessage(0, 51, 255, -1.0, 0.28, 0, 6.0, 2.0, 0.1, 0.2)
show_dhudmessage(tempid, "%L", tempid, "HIDDEN_BECAME", hidden_name)
}
}
case CS_TEAM_T:
{
cs_set_user_team(id, CS_TEAM_CT)
cs_set_user_model(id, "gsg9")
set_task(3.0, "respawn_task", id)
}
}
}
}
public choose_hidden()
{
new players[32], pnum, tempid
get_players(players, pnum, "ae", "CT")
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_task(0.2, "Change_Teams", tempid)
}
}
public Spawn(id)
{
if(!is_user_alive(id))
return
change_team[id] = false
strip_user_weapons(id)
give_item(id, "weapon_knife")
if(g_hidden[id])
set_task(0.2, "hidden_stuff", id)
else
set_task(0.2, "human_stuff", id)
}
public Event_CurWeapon(id)
{
if(!g_hidden[id])
return PLUGIN_HANDLED
new weapon = read_data(2)
if(weapon == CSW_KNIFE)
{
entity_set_string(id, EV_SZ_viewmodel, hidden_knife_model[0])
entity_set_string(id, EV_SZ_weaponmodel, hidden_knife_model[1])
}
set_speed(id)
return PLUGIN_HANDLED
}
public give_screenfade(id)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0, 0, 0}, id)
write_short(~0)
write_short(~0)
write_short(0x0004)
write_byte(110)
write_byte(223)
write_byte(69)
write_byte(100)
message_end()
}
public remove_screenfade(id)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(1<<12)
write_short(1<<8)
write_short(1<<1)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
public set_speed(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED
if(g_hidden[id])
set_user_maxspeed(id, 380.0)
else
set_user_maxspeed(id, 250.0)
return PLUGIN_HANDLED
}
public respawn_task(id)
ExecuteHamB(Ham_CS_RoundRespawn, id)
public map_change()
{
new players[32], pnum, tempid
get_players(players, pnum)
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_user_godmode(tempid, 0)
}
server_cmd("changelevel %s", allow_maps[random(sizeof(allow_maps))][0])
}
public GameDesc()
{
forward_return(FMV_STRING, hidden_gamename)
return FMRES_SUPERCEDE
}
public CountDown(id)
{
if(protection_time[id] <= 0)
{
set_user_godmode(id, 0)
set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
return
}
protection_time[id]--
set_task(1.0, "CountDown", id)
}
public Hidden_HUD(id)
{
new players[32], num, top1
new top1_name[32]
get_players(players, num)
SortCustom1D(players, num, "sort_bestplayer")
top1 = players[0]
get_user_name(top1, top1_name, charsmax(top1_name))
set_hudmessage(255, 255, 255, -1.0, 0.00, 0, 6.0, 2.0)
show_hudmessage(id, "|%i| [%i %L] |%L %i|", get_user_frags(id), get_pcvar_num(pcvar_max_kill), LANG_PLAYER, "HIDDEN_HUD_KILL", LANG_PLAYER, "HIDDEN_HUD_1ST", get_user_frags(top1))
if(get_user_frags(top1) == get_pcvar_num(pcvar_max_kill) || get_timeleft() <= 0)
{
new players[32], pnum, tempid
get_players(players, pnum)
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_user_godmode(tempid, 1)
}
client_print(0, print_center, "%L", LANG_PLAYER, "HIDDEN_WIN_NAME", top1_name)
set_task(1.5, "map_change")
}
set_task(1.0, "Hidden_HUD", id)
}
public invis_count()
{
if(g_invis_timer >= 60)
{
new players[32], pnum, tempid
get_players(players, pnum, "ae", "TERRORIST")
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_user_rendering(tempid, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 152)
}
}
else
{
new players[32], pnum, tempid
get_players(players, pnum, "ae", "TERRORIST")
for(new i=0;i<pnum;i++)
{
tempid = players[i]
set_user_rendering(tempid, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0 + (g_invis_timer*(152/60)))
}
g_invis_timer++
set_task(1.0, "invis_count")
}
}
public hidden_stuff(id)
{
client_cmd(0, "speak ^"%s^"", hidden_speak[random(sizeof(hidden_speak))])
set_dhudmessage(0, 51, 255, -1.0, 0.28, 0, 6.0, 2.0, 0.1, 0.2)
switch(random(4))
{
case 0: show_dhudmessage(id, "%L", id, "HIDDEN_SPEAKRAND1")
case 1: show_dhudmessage(id, "%L", id, "HIDDEN_SPEAKRAND2")
case 2: show_dhudmessage(id, "%L", id, "HIDDEN_SPEAKRAND3")
case 3: show_dhudmessage(id, "%L", id, "HIDDEN_SPEAKRAND4")
}
g_hidden[id] = true
cs_set_user_model(id, hidden_player_model)
set_user_footsteps(id, 1)
set_user_health(id, 300)
set_user_armor(id, 100)
set_user_gravity(id, 0.6)
give_screenfade(id)
entity_set_string(id, EV_SZ_viewmodel, hidden_knife_model[0])
entity_set_string(id, EV_SZ_weaponmodel, hidden_knife_model[1])
g_invis_timer = 0
invis_count()
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
write_string(hidden_sprites[0])
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(CSW_KNIFE)
message_end()
}
public human_stuff(id)
{
g_hidden[id] = false
set_user_footsteps(id, 0)
set_user_health(id, 100)
set_user_armor(id, 100)
set_user_gravity(id, 1.0)
set_speed(id)
set_user_godmode(id, 1)
set_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 16)
protection_time[id] = 3
CountDown(id)
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
write_string("weapon_knife")
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(CSW_KNIFE)
message_end()
weapon_menu_sec(id)
}
public weapon_menu_sec(id)
{
new menu_line[64], i_data[64]
format(menu_line, charsmax(menu_line), "%L", id, "HIDDEN_SEC")
new menu = menu_create(menu_line, "sec_handler")
for(new i=0;i<sizeof(secondary_weapons);i++)
{
num_to_str(i, i_data, sizeof(i_data))
menu_additem(menu, secondary_weapons[i][0], i_data, 0)
}
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}
public sec_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[64], szName[64]
new access, callback
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
new key = str_to_num(data)
new weapon_id = get_weaponid(secondary_weapons[key][1])
new convert_to_num = str_to_num(secondary_weapons[key][2])
give_item(id, secondary_weapons[key][1])
cs_set_user_bpammo(id, weapon_id, convert_to_num)
weapon_menu_pri(id)
return PLUGIN_CONTINUE
}
public weapon_menu_pri(id)
{
new menu_line[64], i_data[64]
format(menu_line, charsmax(menu_line), "%L", id, "HIDDEN_PRI")
new menu = menu_create(menu_line, "pri_handler")
for(new i=0;i<sizeof(primary_weapons);i++)
{
num_to_str(i, i_data, sizeof(i_data))
menu_additem(menu, primary_weapons[i][0], i_data, 0)
}
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}
public pri_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[64], szName[64]
new access, callback
menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
new key = str_to_num(data)
new weapon_id = get_weaponid(primary_weapons[key][1])
new convert_to_num = str_to_num(primary_weapons[key][2])
give_item(id, primary_weapons[key][1])
give_item(id, "weapon_hegrenade")
cs_set_user_bpammo(id, weapon_id, convert_to_num)
return PLUGIN_CONTINUE
}
public sort_bestplayer(id1, id2)
{
if(get_user_frags(id1) > get_user_frags(id2))
return -1
else if(get_user_frags(id1) < get_user_frags(id2))
return 1
return 0
}
get_random_ct()
{
static iPlayers[32], iNum
get_players(iPlayers, iNum, "ae", "CT")
return iNum ? iPlayers[random(iNum)] : 0
}