User:Rotonen/tmw-ea-pvp-draft

Assumptions

  • There is a set of one on one PvP arena maps
    • PvP arena maps have the no_save flag set
      • This means if someone dies or disconnects there, they will not get back into the game there and cannot disrupt future matches
    • one on one maps are 50 x 50 tiles
    • There are 4 possible start positions on a one on one map
      • They should be somewhat equally far from each other
      • A player is warped to a random start position on the map
  • You can play for fame or a practice match
    • Only one fame match per day per character
  • You can only invoke the related atcommands only from the Hurnscald map
  • The ladder is viewable as a .txt on the web server
  • If a player has not played a match for 30 days, there is a -100 fame (ELO) static penalty
    • This repeats every 30 days for the player in question if still no matches are played
    • This penalty cannot take you under 1000 fame ELO

Registration

Players are registered for the PVP ladder automatically at lvl80

  • Their ELO is set to 1000
  • Their PLAYED_ONE_ON_ONE_FAME_MATCHES is set to 0
    • Similarly WON_* and LOST_* are set to 0
    • They are considered a newbie until they have played 20 fame matches (this 20 match separation comes from the ELO specification and their new ELO is calculated differently)

Challenging

  • @pvp_check <nick>
    • Returns rank ELO played won lost
  • @challenge <nick> <map> <'fame'|'practice'>
    • Fails if
      • Challenged player does not exist
      • Challenged player is not currently seen by your character
      • Challenged player is not at least lvl80
      • Either player already has a challenge currently (bool CHALLENGED ?)
      • Either player has LAST_PLAYED_ONE_ON_ONE_FAME_MATCH == today
    • The challenged player is notified by a server message of challenging player rank, ELO (fame) and amount of played/won/lost fame matches
    • The challenged player has 5min to respond to the challenge or the challenge expires
      • The server message to the challenged player repeats every minute

Accepting / declining a challenge

  • @accept_challenge (@ac ?)
  • @decline_challenge (@dc ?)

A challenge is accepted

  • If the requested ladder map is currently free (recheck every 1min)
    • Their status in the queue for the particular map should be announced to them every 1min
      • If either player is disconnected during queueing, a static -10 fame (ELO) penalty is applied to that player
        • Match is cancelled and both players are removed from the queue
        • No bonus fame (ELO) for the other player
    • Upon succesfully starting a match, set the appropriate LAST_PLAYED_*_MATCH (YYYY-MM-DD) for both players
      • Set PLAYED_*_MATCHES++
    • Give a countdown of 10 seconds to both players as whispers and warp them to the map
      • Lock the map for the duration of the match
      • Start a countdown of 5 minutes upon the match starting

End of battle

  • After result calculation, announcement and a 30 second wait period, warp players out and free the map lock
    • Set appropriate WON_* and LOST_*
  • If 5 minutes are full and both players are alive
    • -100 ELO (fame) static penalty for both, no real ELO calculation
  • A player disconnects or times out or dies
    • Remaining player wins, count new ELO (fame) for both
    • Announce the result and ELO + ladder rank changes to both players with a 30s delay so they get the results when they're back in the normal game and not in the arena anymore