If I remember correctly, there's a probability that a line will end with "...hic!" or that s will be replaced with sh. It won't happen every time, so your first message could go through fine. A checksum is probably best.
Character names will never contain punctuation, so expecting a possible terminating "...hic!" and ignoring it is fine.
Or the character could get drunk halfway through transmitting, after the first (sober) message.
The character could possibly become drunk immediately after sending the "I am not drunk" message, so you'd need to check if the character was still not drunk after sending the FriendNet messages. But assuming that drunkenness lasts much longer than it takes to send the FriendNet messages, you could be sure that if the character was not drunk before and after, then the messages in between were also valid.
> so you'd need to check if the character was still not drunk after sending the FriendNet messages
Just send a checksum with the message.
Yes this would work, even though the message could get garbled including the checksum, you make the first set of characters be a checksum for the rest. If the checksum or message became compromised it would fail validation. This is the best solution so far. Send it with every message.
Re:The greatest bug I never fixed (2010)
by MasterScrat on Wednesday May 21, 2014 @02:26PM
(#7779876)
Or use error-correcting codes so you can get your list accross even if you're drunk :D
That probably would've worked fine in WoW yeah. Definitely not in EQ though, the "smashed" level made it pretty much impossible to communicate (outside of the channels which were added later on), and the game became… challenging to play
What do you mean by error-correcting codes?
I think it's safe to assume that a drunk checksum would fail to match the message, drunk or sober. So check summing the checksum may not be needed.
Or even better, depending on length limits on message, you could prepend every message with a sentence to check. If it is not OK, discard the entire message. If it is, process the rest.
"FriendnetStart: Hello, I am speaking normally and am not drunk," as the first message. If the application sees anything but that as the first message it should assume drunk and retry in an hour. Or implement a checksum at the end of every line.
I imagine he also had issues with the profanity filter as well. Some usernames may set it off if they have a string of characters in them like username "Breshith," which would set off the filter for the text "shit."