Open 2tbc1887 opened 3 years ago
Considering the plugin has existed and evolved over a decade with an underlying premise of a strict lock-in from start to finish (or death) with half the code base revolving around that invariant, calling this kind of suggestion a paradigm shift would be a huge understatement. I think it's fair to say that one sentence that doesn't even follow the feature request template is a bit on the lazy side :P
It would be great if you could describe in greater detail how this would work. What does it mean to drop in? How do you pick a class? What are the consequences in terms of stuff like formulas that are based on initial player count? What does it mean to have checkpoints and what are the consequences of re-joining?
I think what they meant was to add a feature to join the next wave if they are spectating. This way, this will create a new gameplay that if you enabled the spectate-on-death feature, they will be able to respawn on next wave. But if you disabled it, they will automatically be teleported to lobby and need to spectate once again to join. So by adding an option on the config to enable or disable can-spectate-join-on-next-wave, this will create respawn feature on the game.
We all know mobarena takes time to finish and sometimes, it takes hours just to end a game. So if this feature will be possible, this can make a new huge Arena for players to join in anytime or by every wave just to finish the final boss.
We did have an discussion about something similar, which was a "downed" state, where the player was not yet down and could be picked back up by other players. Therefore I will add it in this feature request.
A downed state The player can be picked up by teammates or only a select class(healer?) can pick people back up. In the downed state the player is unable to move around and other players will see them as laying on the ground. (We played around with the swimming animation). How many times should people be able to be downed in 1 round of the arena? Should the timer start at 30 seconds, and if they are not picked up they die?
Spectator re-join Dead players can rejoin the arena automatically on set rounds. Add a new type of round? in-between-rounds perhaps? Respawn between round 9 and 10, so we don't waste a whole round just to respawn some players.
New player join A player can join an already on-going arena by using /ma j arena and picking a class in the lobby as usual. The player then gets put into the spectator-arena after pressing the iron block, and waits for a spectator-re-join round.
Obstacles that I know of and how to overcome them:
Players joining during late rounds to get late round rewards: You would fix this by having a module in config which dictates whether or not players who joined mid-game will earn rewards after joining mid-game. The module would look something like "enable-midgamejoin-rewards: <true/false>"
Things in the game that are based on initial amount of players: I don't know if this is possible, but its worth suggesting. You would basically make it so that after every round, the value for the initial amount of players updates to the amount of players currently in the arena.
Players dying mid game, leaving, rejoining to basically live for infinite rounds: You would have to have a module in the config that dictates the amount of times a player can join the arena that is in progress for that session. It would look something like "arena-join-limit-afterdeath: <number value"
What class would the player be if you started out as archer, died, rejoined and picked knight?: I would go on about this by updating each player's value for initial class (That is currently alive in the arena.) after every round. This makes it so that class limits and what not would still be able to function with this new feature as the amount of players for x class updates every round.
How it would work:
You would enable players to join midgame by having a module in the config that would look something like "enable-joining-midgame: <true/false>."
You might want to add a module that dictates whether or not the player will spawn after the wave that they joined during is over or not. The module would look like: "wait-until-next-wave-to-spawn: <true/false>" By this I mean the following:
Let me know what I need to add, I am deadset on this being added. With this addition, you can potentially make entire servers based on mob arena.
My discord is: Osu# 0826
I've just added a PR which implements the most basic version of joining a running game possible. It doesn't attempt to be fair about late joining players getting rewards, or anything like that. It does seem to function correctly for what it is though.
While it doesn't implement all of the features described above, this PR could be a good starting point to iterate on.
If anyone is tracking this feature request, please give it some playtesting and feedback if you get a chance. You can find the plugin jar as an artifact in github workflow referenced in the PR.
I would like to see the option to allows player drop-in while the arena is running, and maybe even re-join (which could be based on wave checkpoints e.g. every 10 waves)