Fixed. Laggers are now kicked but in case that fails if you push a player for a few seconds in a fort you'll go through them.
|
Hey Dusty, know if they reimplemented my custom movement system solution to this in the game engine movement system? I.e. if it was reimplemented in a similar manner, it would be the case where usually players can't block narrow spaces altogether, but where lag can defeat the measure. If so, I know how to prevent the issue altogether, but it would require some minor modifications to the movement system.
Update:
Okay, so I actually logged on, and played around until I found someone I could test it around with. Anyway, nope they didn't even implement my proof of concept (that or they tossed it after a while).
My original workaround was to see how far a player was from a pair of blocking tiles/objects horizontally and vertically and if both directions around a player were blocked (left+right or top+bottom, respectively, could be expanded to diagonals too.), set an attribute on that player "noblocking" that the movement system on other clients could check that attribute to see whether someone should be permitted to pass them. Of course that's not fool-proof because the client of the player that would be otherwise blocking controlled the attribute. Then another, more reliable way would be to just do the check for the player that's trying to move past the blocking player (i.e. check vertically and horizontally to the player's upcoming position independent of the presence of players, and if the same criteria is met just ignore players in the wall check). Another, though harder to maintain, solution would be to have NPCs that flagged tight passes as no blocking zones that the movement system checked.
Though don't know if they'd let good ol' Dusty anywhere near the movement system.
Update 2; Illustrative:
So basically my original solution which was the implemented solution before iClassic, was to mark a player as not blocking in this scenario based on the horizontal passing range not being enough for another player to get around, same would be true for vertical passing ranges, or the combination of both. Although in hindsight to making this graphic, a square area the size of the player would be used rather than a line.
The more reliable solution would be, after all wall checks excluding player checks, if the calculated position of your player would be this position without checking other players as walls, then ignore checking players as walls altogether. I'd opt to do this before pathfinding/side-movement motion altogether unless something comes up in testing where you'd want to recalculate side-movement for both scenarios.
Meanwhile, doesn't prevent blocking on diaganols unless you do that check independently, which I didn't in my original implementation.