USurf v5.2
Everyone know that uSurf have dead match mode, but round didnt end so people take all guns from surf maps and thats all, if someone can do one of this 2 points ill be glad as fuck :
1. Round end at after 5 min
2. After 5 min will make command sv_restart 1 and in say will show the best player on this round (muchest frag)
Code:
/*
Copyleft 2007
Plugin thread: http://forums.alliedmods.net/showthread.php?t=16418
USURF
=====
Description
This mod is designed to assist in the running of a surf server. It
includes many features, such as surfing help, semiclip, checkpoints,
"BOOM" button removal and many more features.
Was previously known as "Surf Management / Tools"
Changelog:
March 4, 2007 - v5.0 - Renamed and fixed major bugs
March 13, 2007 - v5.1 - [FEATURE] Added timer
[FEATURE] Added bunnyhop
[FEATURE] Added team stack
[FEATURE] Added godmode
[BUG] Improved semiclip
[BUG] Fixed crashing on Linux servers
[BUG] Fixed crouching with checkpoints
[BUG] Fixed respawn to send people back
to their spawns rather than killing them
March 16, 2007 - v5.2 - [FEATURE] Cleaned up the /surfhelp MOTD display
[FEATURE] Added menu to /surfhelp
[BUG] Fixed surf help showing more than once
[BUG] Optimized surf help section
[BUG] Added new commands to /surfhelp display
[BUG] Removed some old semiclip code that was
causing problems only for people on the same team
[BUG] Fixed checkpoints and timers working on
non-surf maps
Credits:
XxAvalanchexX - Post about blocking knife hits
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <time>
#define TIMER_TASK 23981293
#define TIMER_INTERVAL 1.0
new p_On
new p_AutoCvars
new p_Help
new p_HelpInterval
new p_Respawn
new p_RemoveDropped
new p_RemoveButton
new p_NoGuns
new p_SpawnDist
new p_Semiclip
new p_Cp
new p_CpDelay
new p_BunnyHop
new p_BunnyHopAutoJump
new p_Timer
new p_X
new p_Y
new p_R
new p_G
new p_B
new p_TeamStack
new p_Godmode
new bool:g_SurfMap
new Float:g_Origin[33][3]
new Float:g_Velocity[33][3]
new Float:g_Angles[33][3]
new Float:g_LastSave[33]
new g_Time[33]
new g_Timing[33]
new g_Timer[33]
new g_Menu[512]
new g_TimerMenu[] = "TimerMenu"
new g_TimerTask = TIMER_TASK
new Float:g_TimerInterval = TIMER_INTERVAL
new g_HudObject
new g_SemiclipThinkerClassname[] = "usurf_semiclip"
new g_SemiclipThinker
new g_Models[2][4] =
{
{_:CS_T_ARCTIC,_:CS_T_GUERILLA,_:CS_T_LEET,_:CS_T_TERROR},
{_:CS_CT_GIGN,_:CS_CT_GSG9,_:CS_CT_SAS,_:CS_CT_URBAN}
}
new g_SurfHelpMenu
public plugin_init()
{
new VERSION[] = "5.2"
register_plugin("uSurf",VERSION,"Hawk552")
register_cvar("usurf_version", VERSION, FCVAR_SERVER)
new NewVersion[10]
format(NewVersion,9,"usurf %s",VERSION)
register_cvar("surf_base_version",NewVersion,FCVAR_SERVER)
// Global Commands / Cvars
p_On = register_cvar("usurf_on","1")
//Auto Cvars
p_AutoCvars = register_cvar("usurf_autocvars","1")
// Before we do ANYTHING, let's see if it's a surf map or not.
CheckSurf()
if(get_pcvar_num(p_On))
set_task(5.0,"ExecCvars")
// Surf Help
register_clcmd("say /surfhelp","CmdSurfhelp")
register_clcmd("say /help","CmdSurfhelp")
p_Help = register_cvar("usurf_help","1")
p_HelpInterval = register_cvar("usurf_help_interval","60.0")
set_task(get_pcvar_float(p_HelpInterval),"ShowSurfHelp")
g_SurfHelpMenu = menu_create("Surf Help","SurfHelpHandle")
menu_additem(g_SurfHelpMenu,"Surfing Help")
menu_additem(g_SurfHelpMenu,"uSurf Commands")
menu_additem(g_SurfHelpMenu,"About uSurf")
// Checkpoints
register_clcmd("say /checkpoint","CmdCheckpoint")
register_clcmd("say /gocheck","CmdGoCheck")
p_Cp = register_cvar("usurf_checkpoint","1")
p_CpDelay = register_cvar("usurf_checkpoint_delay","20")
// extra stuff
p_RemoveDropped = register_cvar("usurf_remove_dropped","1")
p_RemoveButton = register_cvar("usurf_remove_button","1")
p_NoGuns = register_cvar("usurf_noguns","0")
p_SpawnDist = register_cvar("usurf_spawn_dist","500")
p_Semiclip = register_cvar("usurf_semiclip","0")
p_TeamStack = register_cvar("usurf_teamstack","0")
p_Godmode = register_cvar("usurf_godmode","1")
// bunny hopping
p_BunnyHop = register_cvar("usurf_bunnyhop","1")
p_BunnyHopAutoJump = register_cvar("usurf_bunnyhop_autojump","1")
// timer
p_Timer = register_cvar("usurf_timer","1")
p_X = register_cvar("usurf_timer_x","0.8")
p_Y = register_cvar("usurf_timer_y","-0.8")
p_R = register_cvar("usurf_timer_r","0")
p_G = register_cvar("usurf_timer_g","0")
p_B = register_cvar("usurf_timer_b","255")
register_clcmd("say /timer","CmdTimer")
register_menucmd(register_menuid(g_TimerMenu),1023,"TimerHandle")
register_menucmd(register_menuid("Team_Select",1),MENU_KEY_1|MENU_KEY_2|MENU_KEY_5|MENU_KEY_6,"TeamHandle")
register_clcmd("jointeam","TeamHandle")
g_HudObject = CreateHudSyncObj()
register_dictionary("time.txt")
register_forward(FM_SetModel,"ForwardSetModel")
register_forward(FM_PlayerPreThink,"ForwardPlayerPreThink")
register_forward(FM_Touch,"ForwardTouch")
register_forward(FM_Think,"ForwardThink")
register_forward(FM_TraceLine,"ForwardTraceLine",1)
register_forward(FM_TraceHull,"ForwardTraceHull",1)
CheckSurf()
CheckButton()
// Respawn
p_Respawn = register_cvar("usurf_respawn","1")
register_event("DeathMsg","EventDeathMsg","a")
register_clcmd("say /respawn","CmdRespawn")
set_task(1.0,"StandardTimer",_,_,_,"b")
new Ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
if(!Ent)
return
set_pev(Ent,pev_classname,g_SemiclipThinkerClassname)
new Float:Time
global_get(glb_time,Time)
set_pev(Ent,pev_nextthink,Time + 0.01)
dllfunc(DLLFunc_Spawn,Ent)
g_SemiclipThinker = Ent
}
public CheckSurf()
{
new MapName[32]
get_mapname(MapName,31)
if(containi(MapName,"surf") != -1 || containi(MapName,"wurf_") != -1 || equali(MapName,"tentical"))
g_SurfMap = true
return PLUGIN_CONTINUE
}
public ExecCvars()
{
if(get_pcvar_num(p_On) && get_pcvar_num(p_AutoCvars) && g_SurfMap)
{
new ConfigsDir[50],FileLocation[50]
get_configsdir(ConfigsDir,49)
format(FileLocation,49,"%s/surf.cfg",ConfigsDir)
// I'm not going to update this, because the old file
// natives are actually much easier to work with for
// this purpose.
if(file_exists(FileLocation))
server_cmd("exec ^"%s^"",FileLocation)
else
{
write_file(FileLocation,"sv_airaccelerate 100")
write_file(FileLocation,"mp_freezetime 0")
write_file(FileLocation,"amxx pause statsx.amxx")
write_file(FileLocation,"amxx pause miscstats.amxx")
write_file(FileLocation,"amxx pause stats_logging.amxx")
// people seem to be stupid to fucking RTFM, so I really have to disable this by default
write_file(FileLocation,"//humans_join_team ct // if you want all players on one team, use this")
write_file(FileLocation,"echo Executing surf map config.",2)
server_cmd("exec %s",FileLocation)
format(FileLocation,49,"%s/amxx.cfg",ConfigsDir)
if(file_exists(FileLocation))
{
write_file(FileLocation,"// AUTO WRITTEN BY USURF")
write_file(FileLocation,"^n^nhumans_join_team any")
write_file(FileLocation,"sv_airaccelerate 10")
}
}
}
}
public client_disconnect(id)
{
g_Origin[id][0] = 0.0
g_Timing[id] = 0
g_Time[id] = 0
g_Timer[id] = 0
g_LastSave[id] = 0.0
g_Origin[id] = Float:{0.0,0.0,0.0}
}
public TeamHandle(id,Item)
{
// to prevent memory corruption
new Key = Item
new Arg[2]
read_argv(0,Arg,1)
if(Arg[0] == 'j')
{
read_argv(1,Arg,1)
Key = str_to_num(Arg) - 1
}
new TeamStack = get_pcvar_num(p_TeamStack)
if(Key != 5 && Key != TeamStack - 1 && (TeamStack == _:CS_TEAM_T || TeamStack == _:CS_TEAM_CT))
{
client_print(id,print_center,"You must join the %s team.",TeamStack == 1 ? "Terrorist" : "Counter-Terrorist")
engclient_cmd(id,"chooseteam")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public CmdTimer(id)
{
if(!get_pcvar_num(p_Timer) || !get_pcvar_num(p_On) || !g_SurfMap)
return
new Len = format(g_Menu,sizeof g_Menu - 1,"uSurf Timer Menu^n^n1. %s Timer^n",g_Timer[id] ? "Disable" : "Enable")
if(g_Timer[id])
Len += format(g_Menu[Len],sizeof g_Menu - Len - 1,"2. %s Timing^n3. Reset Timer^n",g_Timing[id] ? "Stop" : "Begin")
format(g_Menu[Len],sizeof g_Menu - Len - 1,"^n0. Exit")
new Keys = g_Timer[id] ? MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0 : MENU_KEY_1|MENU_KEY_0
show_menu(id,Keys,g_Menu,-1,g_TimerMenu)
}
public TimerHandle(id,Key)
{
switch(Key)
{
case 0 :
{
g_Timer[id] = !g_Timer[id]
if(!g_Timer[id])
ShowSyncHudMsg(id,g_HudObject,"")
}
case 1 :
{
g_Timing[id] = !g_Timing[id]
g_Timing[id] ? set_task(g_TimerInterval,"Timer",id + g_TimerTask) : remove_task(id + g_TimerTask)
}
case 2 :
g_Time[id] = 0
}
if(Key != 9)
CmdTimer(id)
}
public Timer(id)
{
g_Time[id - g_TimerTask] += floatround(g_TimerInterval)
set_task(g_TimerInterval,"Timer",id)
}
public CmdSurfhelp(id)
{
if(!get_pcvar_num(p_On) || !get_pcvar_num(p_Help) || !g_SurfMap)
return PLUGIN_CONTINUE
menu_display(id,g_SurfHelpMenu,0)
return PLUGIN_CONTINUE
}
public SurfHelpHandle(id,Menu,Key)
{
static MOTD[4096], Title[16],Pos
switch(Key)
{
case 0 :
{
copy(Title,15,"Surf Help")
Pos = format(MOTD,sizeof MOTD - 1,"<style type=^"text/css^"><!--.sty1 {color: #CC9900;font-family: Arial, Helvetica, sans-serif;}--></style><body bgcolor=^"#000000^"><span class=^"sty1^"><strong><div align=^"center^">Surf Discipline</div></strong></span></p><table width=^"100%%^" border=^"1^"><table width=^"100%%^" border=^"1^">")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">To surf, jump or walk onto one of the curved walls (hereby referted to as 'ramps'). Then simply hold strafe (Default are the A and D keys). This will cause you to glide along the walls, or "surf". </span></td></tr>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">While surfing, never press up, down, or crouch; pressing those will cause you to slide off the wall and fall, which, in most surf maps, will cause you to get sent back to your spawn. </span></td></tr>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">To change direction (in order to make it to the next ramp), press the button for the direction you wish to go before flying off of your current ramp.</span></td></tr>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">Surfing takes pratice, so don't be discouraged if you don't get it right the first time.</span></td></tr>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"</table><p align=^"center^"><span class=^"sty1^"><strong>Powered by uSurf</strong></span></p></body></html>")
}
case 1 :
{
copy(Title,15,"uSurf Commands")
Pos = format(MOTD,sizeof MOTD - 1,"<style type=^"text/css^"><!--.sty1 {color: #CC9900;font-family: Arial, Helvetica, sans-serif;}--></style>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<body bgcolor=^"#000000^"><strong><span class=^"sty1^"><div align=^"center^"><p>uSurf Commands</strong></p></span></div><table width=^"100%%^" border=^"1^">")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">say /surfhelp</span></td><td><span class=^"sty1^">Brings up this window.</span>/td></tr>")
if(get_pcvar_num(p_Respawn))
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">say /respawn</span></td><td><span class=^"sty1^">Sends you back to your spawn, or, in the event of a malfunction, allows you to respawn yourself manually.</span></td></tr>")
if(get_pcvar_num(p_Cp))
{
new Cvar = get_pcvar_num(p_CpDelay)
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">say /checkpoint</span></td><td><span class=^"sty1^">Saves a checkpoint at your current location. Use "say /gocheck" to go to it. You can save or load a checkpoint every %d seconds.</span></td></tr>",Cvar)
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">say /gocheck</span></td><td><span class=^"sty1^">Allows you to go to one of your saved checkpoints. You can save or load a checkpoint every %d seconds.</span></td></tr>",Cvar)
}
if(get_pcvar_num(p_Timer))
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td><span class=^"sty1^">say /timer</span></td><td><span class=^"sty1^">Brings up a menu with various timer options, allowing you to time various events.</span></td></tr>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"</table><p align=^"center^"><span class=^"sty1^"><strong>Powered by uSurf</strong></span></p></body></html>")
}
case 2 :
{
copy(Title,15,"About uSurf")
Pos = format(MOTD,sizeof MOTD - 1,"<style type=^"text/css^"><!--.sty1 {color: #CC9900;font-family: Arial, Helvetica, sans-serif;}--></style>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<body bgcolor=^"#000000^"><strong><span class=^"sty1^"><div align=^"center^">About uSurf</span></strong></div>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<span class=^"sty1^"><p>This plugin is designed to manage surf servers. It is the successor to Surf Management / Tools.</p>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"<p>For more information or to download this plugin, go <a href=^"http://forums.alliedmods.net/showthread.php?t=16418^">here</a> (<a href=^"http://forums.alliedmods.net/showthread.php?t=16418^">http://forums.alliedmods.net/showthread.php?t=16418</a>)</p>")
Pos += format(MOTD[Pos],sizeof MOTD - 1 - Pos,"</span><p align=^"center^"><span class=^"sty1^"><strong>Powered by uSurf</strong></span></p></body></html")
}
default :
return
}
show_motd(id,MOTD,Title)
menu_display(id,g_SurfHelpMenu,0)
}
public ShowSurfHelp()
{
if(g_SurfMap && get_pcvar_num(p_Help) && get_pcvar_num(p_On))
client_print(0,print_chat,"[USURF] Need help surfing? Say /surfhelp")
set_task(get_pcvar_float(p_HelpInterval),"ShowSurfHelp")
}
public CmdCheckpoint(id)
{
if(!get_pcvar_num(p_Cp) || !get_pcvar_num(p_On) || !g_SurfMap)
return PLUGIN_HANDLED
new Float:Time,Float:Delay = get_pcvar_float(p_CpDelay)
global_get(glb_time,Time)
new Float:TimePassed = Time - g_LastSave[id]
if(TimePassed < Delay)
{
client_print(id,print_chat,"[USURF] You must wait %d seconds before saving again.",floatround(Delay - TimePassed))
return PLUGIN_HANDLED
}
pev(id,pev_origin,g_Origin[id])
if(pev(id,pev_button) & IN_DUCK)
g_Origin[id][2] += 24.0
pev(id,pev_velocity,g_Velocity[id])
pev(id,pev_angles,g_Angles[id])
g_LastSave[id] = Time
client_print(id,print_chat,"[USURF] You have saved this checkpoint.")
return PLUGIN_HANDLED
}
public CmdGoCheck(id)
{
if(!get_pcvar_num(p_Cp) || !get_pcvar_num(p_On) || !g_SurfMap)
return PLUGIN_HANDLED
if(!g_Origin[id][0])
{
client_print(id,print_chat,"[USURF] You have not saved a checkpoint.")
return PLUGIN_HANDLED
}
new Float:Time,Float:Delay = get_pcvar_float(p_CpDelay)
global_get(glb_time,Time)
new Float:TimePassed = Time - g_LastSave[id]
if(TimePassed < Delay)
{
client_print(id,print_chat,"[USURF] You must wait %d seconds before going to a checkpoint.",floatround(Delay - TimePassed))
return PLUGIN_HANDLED
}
engfunc(EngFunc_SetOrigin,id,g_Origin[id])
set_pev(id,pev_velocity,g_Velocity[id])
set_pev(id,pev_fixangle,1)
set_pev(id,pev_angles,g_Angles[id])
g_LastSave[id] = Time
client_print(id,print_chat,"[USURF] You have gone to your last checkpoint.")
return PLUGIN_HANDLED
}
public CmdRespawn(id)
{
new CsTeams:Team = cs_get_user_team(id)
if(!get_pcvar_num(p_On))
return client_print(id,print_chat,"[USURF] Sorry, the surf plugin is currently disabled.")
else if(!get_pcvar_num(p_Respawn))
return client_print(id,print_chat,"[USURF] Respawning is currently disabled.")
else if(!g_SurfMap)
return client_print(id,print_chat,"[USURF] This is not a surf map.")
if(Team == CS_TEAM_T || Team == CS_TEAM_CT)
set_task(0.5,"Spawn",id)
else
return client_print(id,print_chat,"[USURF] You must be on a team to respawn.")
client_print(id,print_chat,is_user_alive(id) ? "[USURF] You have been sent back to your spawn." : "[USURF] You have been respawned.")
return PLUGIN_CONTINUE
}
public StandardTimer()
{
if(!get_pcvar_num(p_On) || !g_SurfMap)
return
static Players[32],Playersnum,Player,CsTeams:Team
new TeamStack = get_pcvar_num(p_TeamStack)
if(TeamStack == _:CS_TEAM_CT || TeamStack == _:CS_TEAM_T)
{
get_players(Players,Playersnum)
for(new Count;Count < Playersnum;Count++)
{
Player = Players[Count]
Team = cs_get_user_team(Player)
if(_:Team != TeamStack && (Team == CS_TEAM_T || Team == CS_TEAM_CT))
cs_set_user_team(Player,CsTeams:TeamStack,CsInternalModel:g_Models[TeamStack - 1][random_num(0,3)])
}
}
if(!get_pcvar_num(p_Respawn))
return
get_players(Players,Playersnum,"b")
for(new Count = 0;Count < Playersnum;Count++)
{
Player = Players[Count]
Team = cs_get_user_team(Player)
if(Team == CS_TEAM_T || Team == CS_TEAM_CT)
Spawn(Player)
}
}
public EventDeathMsg()
{
new id = read_data(2)
set_task(0.5,"Spawn",id)
global_get(glb_time,g_LastSave[id])
g_LastSave[id] -= get_pcvar_num(p_CpDelay)
}
public Spawn(id)
{
new CsTeams:Team = cs_get_user_team(id)
if(is_user_connected(id) && (Team == CS_TEAM_T || Team == CS_TEAM_CT) && get_pcvar_num(p_On) && get_pcvar_num(p_Respawn) && g_SurfMap)
{
dllfunc(DLLFunc_Spawn,id)
set_task(0.2,"GiveSuit",id)
set_task(0.3,"GiveItems",id)
}
}
public GiveSuit(id)
fm_give_item(id,"item_suit")
public GiveItems(id)
{
fm_give_item(id,"weapon_knife")
fm_give_item(id,"weapon_scout")
}
// no, VEN did not write this, I did (although I found out later that he wrote something like it)
fm_give_item(id,Item[])
{
if(containi(Item,"item_") == -1 && containi(Item,"weapon_") == -1 && containi(Item,"ammo_") == -1 && containi(Item,"tf_weapon_") == -1)
return
new Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, Item)),Float:vOrigin[3]
if(!pev_valid(Ent))
return
pev(id,pev_origin,vOrigin)
set_pev(Ent,pev_origin,vOrigin)
set_pev(Ent,pev_spawnflags,pev(Ent,pev_spawnflags)|(1<<30))
dllfunc(DLLFunc_Spawn,Ent)
new Solid = pev(Ent,pev_solid)
dllfunc(DLLFunc_Touch,Ent,id)
if(pev(Ent,pev_solid) == Solid)
engfunc(EngFunc_RemoveEntity,Ent)
}
CheckButton()
if(get_pcvar_num(p_RemoveButton) && get_pcvar_num(p_On) && g_SurfMap)
{
new Ent,Value[] = "classname",ClassName[] = "env_explosion"
while((Ent = engfunc(EngFunc_FindEntityByString,Ent,Value,ClassName)) != 0)
if(pev_valid(Ent))
set_pev(Ent,pev_flags,pev(Ent,pev_flags)|FL_KILLME)
}
public ForwardPlayerPreThink(id)
{
if(!is_user_alive(id) || !get_pcvar_num(p_On) || !g_SurfMap)
return
new NoGuns = get_pcvar_num(p_NoGuns)
if(NoGuns == 1)
{
new SpawnDistance = get_pcvar_num(p_SpawnDist)
static Float:vOrigin[3]
pev(id,pev_origin,vOrigin)
new DeathMatch = engfunc(EngFunc_FindEntityByString,-1,"classname","info_player_deathmatch")
new PlayerStart = engfunc(EngFunc_FindEntityByString,-1,"classname","info_player_start")
if(DeathMatch && PlayerStart)
{
static Float:vDeathMatch_Origin[3]
pev(DeathMatch,pev_origin,vDeathMatch_Origin)
static Float:vPlayerStart_Origin[3]
pev(PlayerStart,pev_origin,vPlayerStart_Origin)
new Float:DeathMatch_Distance = get_distance_f(vOrigin,vDeathMatch_Origin)
new Float:PlayerStart_Distance = get_distance_f(vOrigin,vPlayerStart_Origin)
new Clip,Ammo,Weapon = get_user_weapon(id,Clip,Ammo)
if(DeathMatch_Distance < SpawnDistance || PlayerStart_Distance < SpawnDistance)
{
if(Weapon != CSW_KNIFE && Weapon != CSW_C4 && Weapon != CSW_HEGRENADE && Weapon != CSW_FLASHBANG && Weapon != CSW_SMOKEGRENADE)
client_cmd(id,"drop")
} // Argh, stupid thing doesn't understand this if I don't add the brackets.
else if(DeathMatch_Distance > SpawnDistance || PlayerStart_Distance > SpawnDistance)
if(!user_has_weapon(id,CSW_SCOUT))
fm_give_item(id,"weapon_scout")
}
}
else if(NoGuns == 2)
{
new Clip, Ammo, Weapon = get_user_weapon(id,Clip,Ammo)
if(Weapon != CSW_KNIFE && Weapon != CSW_C4 && Weapon != CSW_HEGRENADE && Weapon != CSW_FLASHBANG && Weapon != CSW_SMOKEGRENADE)
client_cmd(id,"drop")
}
else if(NoGuns == 3)
{
new Clip, Ammo, Weapon = get_user_weapon(id,Clip,Ammo)
if(Weapon != CSW_KNIFE && Weapon != CSW_C4)
{
fm_strip_user_weapons(id)
fm_give_item(id,"weapon_knife")
}
}
if(get_pcvar_num(p_BunnyHop))
{
set_pev(id,pev_fuser2,0.0)
if(get_pcvar_num(p_BunnyHopAutoJump) && pev(id,pev_button) & IN_JUMP)
{
new Flags = pev(id,pev_flags)
if(!(Flags & FL_WATERJUMP) && pev(id,pev_waterlevel) < 2 && Flags & FL_ONGROUND)
{
new Float:Velocity[3]
pev(id,pev_velocity,Velocity)
Velocity[2] += 250.0
set_pev(id,pev_velocity,Velocity)
set_pev(id,pev_gaitsequence,6)
}
}
}
if(get_pcvar_num(p_Timer) && g_Timer[id])
{
static Time[33]
set_hudmessage(get_pcvar_num(p_R),get_pcvar_num(p_G),get_pcvar_num(p_B),get_pcvar_float(p_X),get_pcvar_float(p_Y),0,0.0,6.0,0.0,0.0,-1)
get_time_length(id,g_Time[id],timeunit_seconds,Time,32)
ShowSyncHudMsg(id,g_HudObject,"Timer: %s",Time)
}
}
public ForwardSetModel(id,Model[])
{
if(!pev_valid(id) || !g_SurfMap || !get_pcvar_num(p_On) || !strlen(Model) || !get_pcvar_num(p_RemoveDropped))
return
static ClassName[33]
pev(id,pev_classname,ClassName,32)
if(equali(ClassName,"weaponbox"))
set_task(0.1,"RemoveGun",id)
}
public RemoveGun(id)
if(pev_valid(id))
engfunc(EngFunc_RemoveEntity,id)
public ForwardTouch(Ptr,Ptd)
{
if(!pev_valid(Ptr) || !pev_valid(Ptd) || !g_SurfMap || !get_pcvar_num(p_On) || !get_pcvar_num(p_Respawn))
return FMRES_IGNORED
new id
if(is_user_alive(Ptr))
id = Ptr
else if(is_user_alive(Ptd))
id = Ptd
if(!id)
return FMRES_IGNORED
static Classname[33]
pev(id == Ptr ? Ptd : Ptr,pev_classname,Classname,32)
if(equali(Classname,"trigger_hurt"))
{
Spawn(id)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public ForwardThink(Ent)
{
if(Ent != g_SemiclipThinker || !g_SurfMap)
return
if(get_pcvar_num(p_Semiclip) && get_pcvar_num(p_On))
{
static Players[32],Playersnum,Player
get_players(Players,Playersnum)
for(new Count;Count < Playersnum;Count++)
{
Player = Players[Count]
if(!is_user_alive(Player))
continue
set_pev(Player,pev_solid,IsColliding(Player) ? SOLID_NOT : SOLID_BBOX)
}
}
new Float:Time
global_get(glb_time,Time)
set_pev(Ent,pev_nextthink,Time + 0.01)
}
public ForwardTraceLine(Float:v1[3],Float:v2[3],EntToSkip,NoMonsters,TR)
{
if(!get_pcvar_num(p_Godmode) || !g_SurfMap || !get_pcvar_num(p_On))
return FMRES_IGNORED
new id = get_tr(TR_pHit)
if(!is_user_alive(id))
return FMRES_IGNORED
new Attacker
while((Attacker = engfunc(EngFunc_FindEntityInSphere,Attacker,v1,10.0)) != 0)
if(Attacker < 33 && Attacker > 0)
break
if(!is_user_alive(Attacker))
return FMRES_IGNORED
new Button = pev(Attacker,pev_button)
if(!(Button & IN_ATTACK) && !(Button & IN_ATTACK2))
return FMRES_IGNORED
set_tr(TR_flFraction,1.0)
return FMRES_IGNORED
}
public ForwardTraceHull(Float:v1[3],Float:v2[3],NoMonsters,Hull,EntToSkip,TR)
{
if(!g_SurfMap || !get_pcvar_num(p_On) || !get_pcvar_num(p_Godmode))
return FMRES_IGNORED
new Button = pev(EntToSkip,pev_button)
if(!(Button & IN_ATTACK) && !(Button & IN_ATTACK2))
return FMRES_IGNORED
set_tr(TR_flFraction,1.0)
return FMRES_IGNORED
}
// thanks to VEN for this stock from Fakemeta Utilities
fm_strip_user_weapons(index) {
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))
if (!pev_valid(ent))
return 0
dllfunc(DLLFunc_Spawn, ent)
dllfunc(DLLFunc_Use, ent, index)
engfunc(EngFunc_RemoveEntity, ent)
return 1
}
IsColliding(id)
{
if(pev(id,pev_flags) & FL_ONGROUND || pev(id,pev_button) & IN_JUMP)
return false
new Ent,Float:Origin[3]
pev(id,pev_origin,Origin)
while((Ent = engfunc(EngFunc_FindEntityInSphere,Ent,Origin,36.0)) != 0)
if(Ent > 0 && Ent <= 32 && is_user_alive(Ent) && Ent != id)
return true
return falsep
}
|