FortyTwoFortyTwo / Randomizer

TF2 plugin that randomizes player loadout in any imaginable combinations
GNU General Public License v3.0
35 stars 15 forks source link

On Linux, some fixes that rely on detouring IsPlayerClass don't work #62

Closed doomy64 closed 3 years ago

doomy64 commented 3 years ago

Eureka Effect can't teleport Air Strike does not receive it's bonus fire rate while rocket jumping Baby Face's Blaster does not lose boost when taking damage

Some debugging showed that the detour just isn't being called during when using the eureka_teleport command. After some digging in a disassembler, it seems that CTFPlayer::ClientCommand never calls CTFPlayer::IsPlayerClass at all.

As for the other two, further testing showed that the detour gets called more times during SDKHook_OnTakeDamage on a windows server than a linux one. Rocket jumping with an air strike and identical loadouts calls the detour 17 times on windows, but only 7 on linux. This is probably why the two damage events listed above don't work, but some others (like Darwin's Danger Shield) do.

Eureka effect might be able to be fixed using SetPlayerClass rather than g_iAllowPlayerClass, but I don't even know where to begin with the others.

FortyTwoFortyTwo commented 3 years ago

Eureka Effect part fixed by using your suggestion. https://github.com/FortyTwoFortyTwo/Randomizer/commit/30b19f42a6171049ff23c787b032735aface0b27

FortyTwoFortyTwo commented 3 years ago

Air Strike broke because TF_COND_BLASTJUMPING cond was not given to be more specific. Swap OnTakeDamage attacker class as weapon's default class fixes it, also helps not needing OnDecapitation hook fix. But this fix could open new bugs related to taking damage I'm aware of, but let's see how this goes.

As for Baby Face's Blaster, better off fixing m_flHypeMeter in #7 if were to fix this issue.