Hi All, hoping someone who knows a bit about entities might be able to port this script and enhance it some after we get it ported over to SourceMod.
I have been trying to make some changes because at the moment I am running this script and as you join the server and get put on a "Unassigned" team you start bleeding.
Another problem is that after a while you get too many entities on the map I think? And weird things start happening like all weapons on the maps vanish and a few times I got an entity error.
I don't know if this can be fixed by increasing the max entities or whether this script just needs optimizing.
I would like to get a blood trail effect for a player who is low on health, it has been suggested to maybe remove them after some time to decrease entities, if we don't have to then great, otherwise if we need to I guess we have to.
Anyway here's the initial script:
Code:
// ******************************
// Heartbeat V4.0 Beta
// for Valve Source Games.
// * Description:
// Can hear wounded players heartbeats.
// * Install instructions:
// http://forums.mattie.info/cs/forums/viewtopic.php?p=58954
// * Credits:
// Concept By: Murpher Written By: Venjax
// Edited Sounds by: Ace Rimmer - Thanks Bud!
// ENV_Blood code stolen from Einlazers - Thanks man!
// Special Thanks: MBchrono, Mattie!, Whore, & ljfsp
// * Requirements:
// EventScripts v1.2.1 or higher
// ******************************
block config
{
es_xsetinfo hbemit 0 // Set to 1 to hear others heartbeats. 0 to hear only your own.
es_xsetinfo slowhealth 60 // Set this variable for first beat
es_xsetinfo fasthealth 20 // Set this variable for second beat
es_xsetinfo hb_bleed 1 // Set to 1 to bleed during the fast heartbeat.
es_xsetinfo hb_bleedout 1 // Set this to amount of damage to lose after player starts to bleed.
}
// DO NOT EDIT BELOW THIS LINE DOING SO WILL VOID WARRANTY AND TECHNICAL SUPPORT. Smile
block load
{
es_xsetinfo mygame 0
es_getgame mygame
es_xsetinfo gmeinfo "CHL2MP_Player.baseclass.baseclass.m_iHealth"
es_xsetinfo myhealth 0
es_xsetinfo newhealth 0
es_xsetinfo playerteam 0
es_xsetinfo togvar 0
es_xsetinfo togvar2 0
es_xsetinfo stmid 0
es_xsetinfo ven_hb_ver "v4.0"
es_xmakepublic ven_hb_ver
es_xsetinfo hbexists 0
es_xsetinfo hb_shadox 0
es_xexists hbexists keygroup hbtoggle
if (server_var(hbexists) equalto 1) then es_xkeygroupdelete hbtoggle
es_xkeygroupload hbtoggle |heartbeat
es_xexists hbexists keygroup hbeaters
if (server_var(hbexists) equalto 1) then es_xkeygroupdelete hbeaters
es_xkeygroupcreate hbeaters
es_xloadevents addons/mattie_eventscripts.res
es_xdoblock heartbeat/config
if (server_var(hb_bleed) equalto 1) do
{
es_regcmd _hb_dobleed heartbeat/dobleed "internal command to add blood to heartbeat"
}
else do
{
es_regcmd _hb_dobleed heartbeat/nobleed "internal command for no blood"
}
}
event es_map_start
{
downloadable sound/hb/fastbeat.mp3
downloadable sound/hb/slowbeat.mp3
es_xdelayed 10 es_xdoblock heartbeat/beatstart
es_xkeygroupdelete hbtoggle
es_xkeygroupload hbtoggle |heartbeat
}
event round_start
{
es_xforeachkey hb_users in hbeaters "es_xdoblock heartbeat/shadox"
}
event player_spawn
{
es_getplayerteam playerteam event_var(userid)
if (server_var(playerteam) == "0") then es_xmsg event_var(es_username) is Spectator
if (server_var(playerteam) == "1") then es_xmsg event_var(es_username) is on the Survivor
if (server_var(playerteam) == "2") then es_xmsg event_var(es_username) is on the Undead
if (server_var(playerteam) == "3") then es_xmsg event_var(es_username) is on the Unassigned
if (server_var(playerteam) < 3) do
{
es es_xexists hbexists key hbeaters event_var(userid)
if (server_var(hbexists) equalto 0) do
{
es es_xexists togvar2 key hbtoggle event_var(es_steamid)
if (server_var(togvar2) equalto 0) do
{
es es_xkeycreate hbeaters event_var(userid)
es es_xkeysetvalue hbeaters event_var(userid) hb 1
}
}
}
}
event player_death
{
es es_xexists hbexists key hbeaters event_var(userid)
if (server_var(hbexists) equalto 1) then es_xkeydelete hbeaters event_var(userid)
}
event player_disconnect
{
es es_xexists hbexists key hbeaters event_var(userid)
if (server_var(hbexists) equalto 1) then es_xkeydelete hbeaters event_var(userid)
}
block beatstart
{
es_xforeachkey hb_users in hbeaters "es_xdoblock heartbeat/beat"
es_xdelayed 1.1 es_xdoblock heartbeat/beatstart
}
block beat
{
es es_xgetplayerprop myhealth server_var(hb_users) server_var(gmeinfo)
if (server_var(myhealth) <= server_var(slowhealth)) do
{
if (server_var(myhealth) > server_var(fasthealth)) do
{
if (server_var(hbemit) equalto 1) do
{
es_emitsound player server_var(hb_users) hb/slowbeat.mp3 1.0 1.0
}
else do
{
es es_xcexec server_var(hb_users) playgamesound hb/slowbeat.mp3
}
}
else do
{
if (server_var(myhealth) >= 1) do
{
if (server_var(hbemit) equalto 1) do
{
es_emitsound player server_var(hb_users) hb/fastbeat.mp3 1.0 1.0
_hb_dobleed
}
else do
{
es es_xcexec server_var(hb_users) playgamesound hb/fastbeat.mp3
_hb_dobleed
}
}
}
}
}
event player_say
{
if (event_var(text) equalto "!heartbeat") do
{
es es_xexists togvar key hbtoggle event_var(es_steamid)
if (server_var(togvar) equalto 0) do
{
es es_xtell event_var(userid) [Heartbeat] You will not hear your own heartbeat.
if (server_var(hbemit) notequalto 0) do
{
es es_xtell event_var(userid) [Heartbeat] You WILL still hear other's heartbeat.
}
es es_xkeycreate hbtoggle event_var(es_steamid)
es es_xkeysetvalue hbtoggle event_var(es_steamid) nobeat 1
es es_xexists hbexists key hbeaters event_var(userid)
if (server_var(hbexists) equalto 1) then es_xkeydelete hbeaters event_var(userid)
}
else do
{
es es_xtell event_var(userid) [Heartbeat] You will now hear your own heartbeat again.
es es_xkeydelete hbtoggle event_var(es_steamid)
es es_xkeycreate hbeaters event_var(userid)
es es_xkeysetvalue hbeaters event_var(userid) hb 1
}
es_xkeygroupsave hbtoggle |heartbeat
}
}
event unload
{
es_xkeygroupsave hbtoggle |heartbeat
es_xkeygroupdelete hbtoggle
es_xkeygroupdelete hbeaters
}
block dobleed
{
//es es_xfire server_var(hb_users) env_blood kill
es es_xgive server_var(hb_users) env_blood
es es_xfire server_var(hb_users) env_blood addoutput "spawnflags 444"
es es_xfire server_var(hb_users) env_blood addoutput "amount 10000"
es es_xfire server_var(hb_users) env_blood addoutput "color 0"
es es_xfire server_var(hb_users) env_blood EmitBlood
if (server_var(hb_bleedout) greaterthan 0) do
{
es es_copy newhealth myhealth
es es_xmath newhealth - server_var(hb_bleedout)
if (server_var(newhealth) < 1) do
{
es_xsetinfo myhealth 1
}
else do
{
es es_copy myhealth newhealth
}
es es_xsetplayerprop server_var(hb_users) server_var(gmeinfo) server_var(myhealth)
}
}
block nobleed
{
//Nothing here!
}
block shadox
{
es es_xgetuserid hb_shadox server_var(hb_users)
if (server_var(hb_shadox) equalto 0) then es_xkeydelete hbeaters server_var(hb_users)
}