AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Snippets and Tutorials (https://forums.alliedmods.net/forumdisplay.php?f=112)
-   -   [Snippet] TF2 Damage (https://forums.alliedmods.net/showthread.php?t=74270)

DJ Tsunami 07-15-2008 10:53

[Snippet] TF2 Damage
 
Yet another snippet :) I know this has been posted before by naris, but it had all these unnecessary files and stocks, so I made a shorter one a while back (just in case I'd ever need it), and now I'm posting it here :P Enjoy.
Code:
#include <sourcemod> #include <sdktools> new g_iHealth[MAXPLAYERS + 1]; new g_iMaxClients; public OnPluginStart() {     HookEntityOutput("item_healthkit_small",  "OnPlayerTouch",    EntityOutput_SaveHealth);     HookEntityOutput("item_healthkit_medium", "OnPlayerTouch",    EntityOutput_SaveHealth);     HookEntityOutput("item_healthkit_full",   "OnPlayerTouch",    EntityOutput_SaveHealth);     HookEntityOutput("prop_dynamic",          "OnAnimationBegun", EntityOutput_SaveHealthAll);         HookEvent("player_hurt",  Event_PlayerHurt);     HookEvent("player_spawn", Event_PlayerSpawn); } public OnMapStart() {     g_iMaxClients        = GetMaxClients(); } public EntityOutput_SaveHealth(const String:output[],    caller, activator, Float:delay) {     g_iHealth[activator] = GetClientHealth(activator); } public EntityOutput_SaveHealthAll(const String:output[], caller, activator, Float:delay) {     for (new i = 1; i <= g_iMaxClients; i++) {         if (IsClientInGame(i) && !IsClientObserver(i)) {             g_iHealth[i] = GetClientHealth(i);         }     } } public Action:Event_PlayerHurt(Handle:event,  const String:name[], bool:dontBroadcast)   {     new iClient = GetClientOfUserId(GetEventInt(event, "userid")),         iHealth = GetEventInt(event, "health");         PrintToChat(iClient, "Damage: %d", g_iHealth[iClient] - iHealth);         g_iHealth[iClient]   = iHealth; } public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)   {     CreateTimer(0.1, Timer_SaveHealth, GetClientOfUserId(GetEventInt(event, "userid"))); } public Action:Timer_SaveHealth(Handle:timer, any:client) {     g_iHealth[client]    = GetClientHealth(client); }

bl4nk 07-15-2008 14:19

Re: [Snippet] TF2 Damage
 
What about when players pick up med packs or use a resupply cabinet?

berni 07-15-2008 15:55

Re: [Snippet] TF2 Damage
 
And why should this be limited to TF2 only ? player_hurt and player_spawn are available in all games afaik.

DJ Tsunami 07-15-2008 18:10

Re: [Snippet] TF2 Damage
 
@bl4nk: good point... You can hook medipacks being picked up, but you can't hook the resupply cabinet being used, so I'm not sure how to do the latter (other than a continuous check). naris' code didn't do this either though did it?

@berni: It's not limited to TF2, the point is that TF2 doesn't send the damage done in the player_hurt event, like most other mods do. This stores their previous health so you can get the damage done.

bl4nk 07-15-2008 20:27

Re: [Snippet] TF2 Damage
 
You could hook the OnEndTouch output of func_regenerate. That might do it for you.

DJ Tsunami 07-16-2008 16:02

Re: [Snippet] TF2 Damage
 
According to http://developer.valvesoftware.com/wiki/Func_regenerate (and Hammer for that matter) func_regenerate only has the OnUser1-4 outputs, that's the problem :(

bl4nk 07-16-2008 19:13

Re: [Snippet] TF2 Damage
 
I wouldn't trust the wiki pages too much. Looking at the datamaps, I see the following for func_regenerate:
Code:

- m_OnStartTouch (Save|Key|Output)(0 Bytes) - OnStartTouch
- m_OnStartTouchAll (Save|Key|Output)(0 Bytes) - OnStartTouchAll
- m_OnEndTouch (Save|Key|Output)(0 Bytes) - OnEndTouch
- m_OnEndTouchAll (Save|Key|Output)(0 Bytes) - OnEndTouchAll
- m_OnTouching (Save|Key|Output)(0 Bytes) - OnTouching
- m_OnNotTouching (Save|Key|Output)(0 Bytes) - OnNotTouching


DJ Tsunami 07-17-2008 12:18

Re: [Snippet] TF2 Damage
 
Nope, none of those outputs, nor OnPlayerTouch (which works fine for healthkits), fire for func_regenerate.

bl4nk 07-17-2008 13:36

Re: [Snippet] TF2 Damage
 
That's odd. Valve confuses me sometimes with why they leave stuff like that in there if it doesn't actually do anything.

msleeper 07-17-2008 18:23

Re: [Snippet] TF2 Damage
 
In this case, I imagine that the func_regenerate at one time was classed as a Trigger entity, which all share the same OnStartTouch/EndTouch/etc outputs, but at some point for some reason was changed strictly to a normal function brush entity. The Valve wiki actually is right more often than not, and in either case you can load up Hammer and see what Outputs the entity can fire from there.


All times are GMT -4. The time now is 07:30.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.