Challenge Code
Is your feature request related to a problem? Please describe. People go nuts on the Challenges bboard. It's a bit tedious, and it often makes me go, "Are these people all really paying people to shout this around town? Or are they just hitting bbpost because it's easy?"
Describe the solution you'd like
A challenge command! The basic idea would be to move all challenge stuff to this command, which would then post to the bboard on behalf of players (and the Challenges bboard would then be locked against regular posts). So the basic syntax/process I'm envisioning is this:
challenge <character>=<text>
challenge/apologize <challenge ID>
challenge/accept <challenge ID>
challenge/deny <challenge ID>
challenge/champion <challenge ID>=<character>
challenge/terms <challenge ID>
challenge/winner <challenge ID>=<character>
challenge/confirm <challenge ID>
The first command would post a post to the Challenges board with a subject of
<challenger full name>has engaged the messengers and town criers of Arx to spread word of their challenge of. The news spreads: "
<challenge text>"
Then we'd have two options for the challengee. challenge/accept <challenge ID>=<text> and challenge/apologize <challenge ID>=<text>. These would also send a message to the Challenges board, such as:
The town criers of Arx spread word that
<challengee full name>has accepted the challenge of<challenger full name>with the following comments:"
<acceptance text>"
or
The town criers of Arx spread word that
<challengee full name>has issued apology to<challenger full name>with the following comments:"
<apology text>
Apology would close the challenge, acceptance would leave it open to be completed via duel. Denial would post something to indicate the moderate embarrassment of refusing a duel.
And then if we wanted to get fancy, we could have each duel basically be an object with an ID or whatnot wherein you can use the ID number instead of challenger name in the /accept or /apology stage and then people can do, like, challenge/champion <ID>=<champion PC> to mark their champion, and then challenge/winner <ID>=<duel winner> (which I think should be the challenger/challengee level rather than their champion names) and maybe that sends an inform to the other side to then challenge/confirm <ID> so both sides have to confirm the winner. And challenge/apologize could be used at any point before /confirm, even after champions are selected, in case someone opts for an apology later but before the duel happens.
And then probably when both sides confirm the winner, that could also do an automated bbpost. So each challenge should have a max of 3 bbposts.
I didn't think out the last bits as thoroughly because all I really want is to lock the Challenges bboard. :P
would need request/accept loop for champions. Would need some command for displaying the current state. Also would need to handle multiple simultaneous challenges, whether you limit someone to one at a time, or have a way to disambiguate that
Oh yeah, challenge by itself could probably do a list of open challenges. (Which would maybe necessitate a challenge/history to list closed ones, and then challenge <challenge ID> to give some sort of current summary of the challenge. (Maybe IC date issued, challenge text, acceptance or apology text, champions, and final result.)
If you want to get super fancy, you could have a lot of stuff handled by the challenge object. For instance whenever people are ready to actually have the duel, it could handle a lot of the bookkeeping.
I might steal challenge/terms to be challenge/terms <challenge ID>=<combat/other>. This will set whether this is going to be a combat duel or some other duel. If "other", challenge/stat <challenge ID>=<stat> and challenge/skill <challenge ID>=<skill> would be used to set the stat and skill for any "other" kind of duel. challenge/target <challenge ID>=<target number> will set what first blood will be for a combat duel or it will set the total number of successes over 15 for an "other" duel.
challenge/duel <challenge ID> would initiate things when everyone is ready, setting the room it is used in as the location for it to take place, then requiring the champions to be in that room by registering with challenge/present <challenge ID>. At that point, the challenge object will monitor combat code or perhaps initiate the combat code itself, pre-registering the two combatants into the combat code. When the target damage is reached, the object ends the combat automatically and declares a winner. If it's an "other" duel, it will make rolls for the duelists, taking their results and adding them up until the target number is reached, then declaring a winner. If someone wishes to yield for some reason challenge/yield would end the duel and declare the other champion the winner.