Phil25 / RTD

Roll The Dice SourceMod plugin for Team Fortress 2
GNU General Public License v3.0
56 stars 20 forks source link

Smite (and likely others) becomes permanent if revived in MvM #73

Closed slipsy closed 8 months ago

slipsy commented 9 months ago

Playing a server running MvM and RTD, friend rolled smite and died, I revived them and the effect became permanent on them, causing them to repeatedly take damage/die without constant healing. This persisted through further reviving, respawning naturally, and even reconnecting or map changing. Rerolling does remove the effect.

naydef commented 9 months ago

The same issue (smite being persistent when in arena mode) happens in arena with the added problem that smite particles don't disappear on death.

The following error gets spammed when i disconnected (I think):

L 12/10/2023 - 19:00:09: [SM] Exception reported: Invalid entity index 1 for victim
L 12/10/2023 - 19:00:09: [SM] Blaming: Gameplay/RTD/rtd.smx
L 12/10/2023 - 19:00:09: [SM] Call stack trace:
L 12/10/2023 - 19:00:09: [SM]   [0] SDKHooks_TakeDamage
L 12/10/2023 - 19:00:09: [SM]   [1] Line 146, rtd/perks/smite.sp::Smite_Tick
L 12/10/2023 - 19:00:09: [SM]   [3] Call_Finish
L 12/10/2023 - 19:00:09: [SM]   [4] Line 273, rtd/storage/cache.sp::Timer_PerkTimer
L 12/10/2023 - 19:00:09: [SM] Exception reported: Invalid entity index 1 for victim
L 12/10/2023 - 19:00:09: [SM] Blaming: Gameplay/RTD/rtd.smx
L 12/10/2023 - 19:00:09: [SM] Call stack trace:
L 12/10/2023 - 19:00:09: [SM]   [0] SDKHooks_TakeDamage
L 12/10/2023 - 19:00:09: [SM]   [1] Line 146, rtd/perks/smite.sp::Smite_Tick
L 12/10/2023 - 19:00:09: [SM]   [3] Call_Finish
L 12/10/2023 - 19:00:09: [SM]   [4] Line 273, rtd/storage/cache.sp::Timer_PerkTimer
L 12/10/2023 - 19:00:09: [SM] Exception reported: Entity -1 (1) is invalid
L 12/10/2023 - 19:00:09: [SM] Blaming: Dependencies/tf2attributes.smx
L 12/10/2023 - 19:00:09: [SM] Call stack trace:
L 12/10/2023 - 19:00:09: [SM]   [0] ThrowNativeError
L 12/10/2023 - 19:00:09: [SM]   [1] Line 674, ./Dependencies/tf2attributes.sp::Native_RemoveByID
L 12/10/2023 - 19:00:09: [SM]   [3] TF2Attrib_RemoveByDefIndex
L 12/10/2023 - 19:00:09: [SM]   [4] Line 1223, rtd/stocks.sp::SetSpeed
L 12/10/2023 - 19:00:09: [SM]   [5] Line 155, rtd/perks/smite.sp::Smite_Tick
L 12/10/2023 - 19:00:09: [SM]   [7] Call_Finish
L 12/10/2023 - 19:00:09: [SM]   [8] Line 273, rtd/storage/cache.sp::Timer_PerkTimer
Phil25 commented 9 months ago

Are there any error logs from before you disconnected?

naydef commented 9 months ago

No errors from before I disconnect. Errors appear only after disconnecting.

(I tested by being killed by effect, dying to sm_slay, switching to another team. In all cases there were no errors and the effect persisted.)

Edit: To add, the server is running FF2, but I don't think it's relevant here.

Phil25 commented 8 months ago

@slipsy Did this happen multiple times for you? I cannot reproduce it, dying in MvM simply removes the perk due to a regular death event for me before the revive happens. Also, were you able to access server logs by any chance?

@naydef I cannot reproduce this either, it looks like both situations include some edge case which doesn't happen in normal circumstances. But I have to ask, am I correct to assume you compiled the plugin yourself? Were there any significant changes introduced?

I had my theories as to why you experiences these issues, and they should be fixed with 0a52864aa6f125839de8ba29a4282019b7c3aaee and ffdd70f6e1f647c251cd9f7aaa97f533f0cce358. However, since I'm not able to reproduce the issues I cannot really prove it.

In any case, ffdd70f6e1f647c251cd9f7aaa97f533f0cce358 introduced a few fail safes to how perk times are run. If a random error occurs somewhere, it should be less detrimental now (especially in relation to @naydef's error log). It will still be an error which needs to be fixed though.

Phil25 commented 8 months ago

In any case, I'm gonna go ahead with the 2.4.1 release which fixes another bug I was able to reproduce. Again, I cannot confirmed whether this issue specifically is fixed, but please do update and look out of any errors if you can.

naydef commented 8 months ago

@Phil25 Yea, compiled it myself. Only significant change was removing the updater code.

I'll now test the new version.

Phil25 commented 8 months ago

Still prepping to release it :)

Also, updater code doesn't do anything if you don't have the updater plugin or sm_rtd2_autoupdate is disabled. Even so, updater include file is an optional compilation dependency, so if it won't be found the updater code will be removed automatically.

naydef commented 8 months ago

However there are some variables that do nothing if updater include is not there, which generates warnings. And we are compiling with -E option, which fails our plugin autotesting.

Phil25 commented 8 months ago

some variables that do nothing if updater include is not there, which generates warnings

I see, this should be now fixed in 2086b748eea041e513d8c2f08f6cd01f62f6ce91.

naydef commented 8 months ago

Ok, so the plugin almost compiles without modifications, I only needed to add stock to IsPlayerFriendly in rtd.sp to mute unused variable error.

So, the plugin no longer generates error on disconnection, however pretty much everything else is the same, I even now have permanent slowdown on respawning after dying to the effect (the particles still stay after death).

On dying the following message gets printed: L 12/17/2023 - 21:05:57: [Gameplay/RTD/rtd.smx] Internal error: client FF2 Development Industries<35><[U:1:1238637696]><> is not in game or not alive.

Phil25 commented 8 months ago

This shows that there is a condition which doesn't trigger the perk to be removed when it should. Can you explain what exactly happens so the player gets killed?

naydef commented 8 months ago

I died to the effect and other ways (smited to death, sm_slay @me, killed by player), no change.

Edit: Oh, we fixed it. I updated rtd2_perks.default.cfg and now the issue is fixed. I can see in our server diff:

        "sound"         "npc/strider/fire.wav"
        "token"         "smite"
-       "time"          "-1"
+       "time"          "0"
        "class"         "0"
        "weapons"       "0"

So I think the issue was we used the old config where smite was instant ability with no duration, while this new version has duration. So yea, this also fixed another issue with effects which get called on calling for medic. So I guess our issue is fixed, thanks Phil25.

Phil25 commented 8 months ago

Awesome! Yeah this makes sense.

@slipsy could you check if the server you were on happens to have an outdated config as well?

Phil25 commented 8 months ago

As discussed on Discord, further feedback is required to determine if it's an issue with server configuration. I'll close this for now and go ahead with the release. Feel free to reopen.