
The greatest bug I never fixed (2010) - triskweline
http://blog.makandra.com/2010/04/the-greatest-bug-i-never-fixed/
======
kemayo
Blizzard added a function to get around this, in response to this sort of
chat-tunneling: SendAddonMessage [1]

It stops the drunk text-transform, and also doesn't have to worry about hiding
the text from the channel you're trying to talk into.

Overall, Blizzard has been very good about adapting to what their addon
community is trying to do. They add official support for hacks if they like
what the addon does for the game, and deliberately break some if they don't
like its effect.

[1]:
[http://www.wowwiki.com/API_SendAddonMessage](http://www.wowwiki.com/API_SendAddonMessage)

~~~
vjeux
During the beta, the way we used to release CosmosUI was to send modified
versions of the game interface files. On every patch, we had to manually go
over all the changes we made and re-apply them to the new files. This process
took several hours and in the process, no one could really play because they
didn't have all their mods.

Since it was becoming a real pain, I figured out that we could modify the
existing functions from a new file instead of modifying the actual files[1]. I
spend several weeks transforming all our code into "mods", essentially the
first addons :) Once this migration was done and patches were no longer a pain
point, Blizzard officially introduced the notion of addons.

[1]:
[http://blog.vjeux.com/2011/javascript/hook.html](http://blog.vjeux.com/2011/javascript/hook.html)

~~~
kemayo
Nice! I didn't get into WoW until around 1.9 (I think), and I had no idea that
CosmosUI was the genesis for the addon system.

Imagining a parallel universe where we stuck with a process in which
installing a new "addon" involves applying a .patch to your base UI and hoping
that it'll kinda-sorta work with the other patches you applied... terrifying,
really...

~~~
sveiss
The third-party addon story for Asheron's Call, a MMO which pre-dated WoW by
around five years, was like a dark, gritty crapsack world version of that
parallel universe.

There was no supported add-on mechanism; instead, a player-written framework
called Decal hooked into the executable at runtime, and Decal exposed an API
for plugin authors. I can't remember all the details, but I think did a
mixture of intercepting function calls inside the client, injecting calls to
client functions, parsing client memory to expose data to plugins, and either
parsing the network stream directly to capture events or hooking into the
client's packet parser.

Oh, and this wasn't a nice safe Lua or Ruby API. It was an unmanaged COM API,
so you had all the headaches which come with dealing with reference counting,
pointers, and all the rest.

Every month (and every interim patch), there would be a great whine and moan
from the players until the memlocs file was updated, and all the plugins
started working again. (Unless something more substantial in the client had
changed, of course, requiring more work.)

It was a seriously impressive technical achievement by the people behind it.
And looking back on it, rather scary...

~~~
voltagex_
The Minecraft modding scene is also this scary.

~~~
rcxdude
Minecraft has the advantage of (relatively) easy decompiling and recompiling
of java. There is still the large amount of breakage on each new release,
however.

------
twic
So getting drunk makes it _harder_ to make new friends? Oh computers, you so
crazy!

------
vitamen
As a Game Master we could see all these hidden communications betweens addons,
and it would dwarf the amount of true communication a player would participate
in. A raid group could be filled with 1,000 lines of addon chat a second,
often contributing to lag that they would then complain about. Addons were
powerful, but were certainly a source of many issues, and nobody wanted to
hear that they needed to disable their addons to fix their issue.

~~~
quaunaut
If this had been explained exactly as you did here, we might have listened.
All we ever heard was, "Disable your addons", which from a technically-
inclined user's point of view is akin to your ISP saying "power cycle your
modem" for a problem that seemed unrelated.

This is one of those times where I have to wonder why so many companies feel
it's such a bad idea to get technical with their users.

~~~
thisone
I think one of the main problems would be that the loud and angry forum types
wouldn't care about know why disabling addons (by the entire raid) would fix
the issue.

They would still see it as a problem with "the devs" and not a problem with
the addon.

Communicating it clearly to addon developers, that may have helped I think.
You know, use the com channels sparingly and for short, targeted messages
only, because "lag".

From what I remember there was quite a bit of pride surrounding having the
most used addon. And the ability to say "my raid addon doesn't cause lag like
the old favourite" would have spurred on some devs to get even more creative
with limited resources.

------
patio11
The author is the principal of the company which produces RailsLTS, which I
was involved in as a customer. I wasn't aware that we shared the WoW
connection, but that makes me like them even more. (I sort of hope we do not
need an advisory about RCE via session cookie tampering because Rails is
drunk.)

~~~
triskweline
Thanks Patrick :) I had to quit my WoW guild when I discovered I could only
run a single company at the same time.

Speaking of RCE: Distribution of new FriendNet versions was such a pain that
for a while we considered a P2P auto-update mechanism where FriendNet users
with newer versions would whisper Lua code to users with older versions, who
would then eval() it locally.

It seemed like a much better idea then than it does today...

~~~
comex
If you signed the updates properly then it would probably be fine :)

------
heterogenic
I can verify that, when inebriated, I am a terrible judge of character, and
trust many people I shouldn't (even when my friends try to warn me off)... The
number of times I've gone out questing while drunk and ended up in the company
of some loser (while wearing sub-optimal gear) is uncomfortably high. The next
morning my memory is almost always corrupted. Only by sheer luck have I not
yet been fragged in a PvP area (and having rolled female this life, I wouldn't
have much chance of defending myself.)

Clearly, this is not a bug, but a feature.

~~~
hluska
That was too funny not to upvote! Nicely argued!! :)

------
_asciiker_
This is one of the most clever ways to blame a bug on booze I have ever read!

------
markbnj
That's a great story. How would you have fixed it without having to find
another channel to transmit over? Could the plugin sense the character's
condition and delay until it abated?

~~~
drzaiusapelord
Send a known-good line to test for it.

"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."

~~~
tgarv
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.

~~~
masklinn
> 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.

~~~
leorocky
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.

~~~
MasterScrat
Or use error-correcting codes so you can get your list accross even if you're
drunk :D

~~~
leorocky
What do you mean by error-correcting codes?

~~~
erikano
[http://en.wikipedia.org/wiki/Error_detection_and_correction#...](http://en.wikipedia.org/wiki/Error_detection_and_correction#Error-
correcting_code)

------
akx
Ahhh, how I do miss the times of WoW pre-1.3, when addons could trigger spells
and such at will.

I wrote a (likely very unsuccessful, as it's now disappeared from the
internets) addon called DancingGnome, that allowed one to bind arbitrary input
series to spells -- it was meant to bind dance pad moves to spells. Up-Up-Up
for Fireball, Down-Up for Fireblast, those were (some of) my binds.

More successfully, though, I wrote Chatr, which popped up "IM" windows for
private chats.

And another addon that allowed covert chats that looked like (to people with
the addon) they were being said in public channels.

Ah, those were the times (for a given value of times).

------
lugg
There is a newish add on called oqueue it does a similar p2p hack to form
groups across servers for rbgs and now raids (no in game feature for rbg
forming). Very fun to hack the code and give yourself impossible stats for
jokes and invites. Haven't done much more than that but the hack was useful
when you are playing an under geared alternate character that punches way
above its weight and can't find groups due to gear level.

I'm almost certain you could get yourself invites and hijack group leadership
with it (the addon takes over those functions)

------
esquivalience
I wonder if this could be exploited by registering usernames that accord with
the errors? The user would[0] then be trojanned in to people's friend list
with a presumed level of trust they did not deserve.

Not sure if this would have any value, but I'm sure someone enterprising could
find a way to exploit others trust. That's not a new concept.

[0] (This of course assumes that the only lisped-up content is the usernames,
not the whole syntax, which I think is an acceptable assumption given that
it's fully out of date anyway)

------
cryowaffle
Not to be that guy, but how was this hard to find if WoW was adding the ...hic
to the text? Couldn't you examine the exchange, see the ...hic and immediately
recognize that would be added because drunk?

~~~
iancarroll
I would assume it scrambles it more then that. Lol.

------
joeblau
MIM attack from the server! Great post; I've never played WOW but I can see
how this would be very hard to track down.

------
legacy2013
I wish I had thought of this when I was trying to develop a WoW Addon. I was
building an advanced party gui and wanted to communicate the whereabouts of
each user, but was stmyed about how to send information between each instance

------
chris_wot
I wonder if there would be a way of sending drunk text that forces it to sober
text?

~~~
sejje
It appears to add characters, so I doubt it.

If it sometimes removes characters, then perhaps so.

------
akc
So you're saying it's a lossy format.

------
superduper33
Careface.

