Client is preparing smileys in misc.c smiley_convert(). Client is doing this before handling the linebreaks.
Inside this function we check for different combinations. The combinations "
" "8 )" and ":0" are leading very often to unclean output, where client shows smileys in wrong situations.
Like time notations "20:00" or item values "cp 4.
". One notation could also bug our colorbreaks, when we use ":" + a yellow toogle "|" we get the ":|" smiley instead.
Additionally we have also smileys in client, players can't trigger by typing, like ":|", "^_^", "
". But they are functionally and would break other logics we have.
We need a logic, which can recognize, if above situations are smileys or not smileys. That's not easy and need normaly a complexer logic. To keep it more simple, we could define simpler rules to help here out.
One could be "A smiley needs a space before or must be at start of line or directly behind another smiley."
This could be implemented very easy.
But then players would have to type this additionally spaces, for example:
"Morning
"
Other logic could be Smileys need a space behind or an endline or other smileys behind. Then we would have to type
"
Morning"
So we need a rule, how we want differ "20:00" from ":0" or "(dps 1.
" from "
".
Also funny, that our forum has same problems at least with the "8 )" combination.
Another option could be that we dissallow the shorter 2 char notatitions in this 2 cases and only allow the 3 char notations.
I use additionally spaces here, because of forum smileys
8 ) -> 8 - )
B) -> B - )
: 0 -> : - 0
...
But i would prefer to keep the short forms, and try a kind of logic around additionally spaces?