aboutsummaryrefslogtreecommitdiff
path: root/webAO/packets
AgeCommit message (Collapse)Author
5 daysTemporarily default to blips value "m"Osmium Sorcerer
Blips aren't handled correctly every time, resulting in a lot of 404 URLs and invalid blips.
5 daysRemove "sound is missing" warningOsmium Sorcerer
If there's no sound section in the INI, that means no sounds are intended for the character, no need to warn us for that.
5 daysDelete obsolete and unused packetsOsmium Sorcerer
The following packets are unused and have no reason to have handlers: - CI: character information, unused and handled by SC. - EI: evidence information, unused and handled by LE. - EM: area and music information, handled by SM, and obsoleted by dedicated FA and FM. - MM: clientside toggle of whether a client is allowed to change music. The handler doesn't even do anything beyond acknowledging its existence. - RMC: plays a music track with an offset. Unused in practice, not present in AO2 Client. - ackMS: sent by the server to acknowledge an IC message, a relic from AO1.
5 daysFix offset token substitution in MS packetOsmium Sorcerer
In an IC message, x and y offsets are separated by an ampersand, which is unfortunately a conventional separator within packet fields. So, it looks like `25&10` for x = 25 and y = 10. A consequence of that is you have to substitute '&' if you actually want to send it. AO does it by substituting it to `<and>` and back. The MS handler instead expected it to never be decoded, and instead assumed `25<and>10`. By the time the MS packet reaches the handler, the token has already been decoded into '&', however, thus breaking offsets.
5 daysRemove toLowerCase manglingOsmium Sorcerer
For whatever reason, WebAO decides to normalize almost every string component in URLs, packets, and INI files to lower case. First, the glaring issue. In the URLs, this handling of paths is utterly broken and corrupts data. By mangling characters, you change the resource identity and break valid URLs. According to section 6.2.2.1 of RFC 3986 (Case Normalization): > When a URI uses components of the generic syntax, the component syntax > equivalence rules always apply; namely, that the scheme and host are > case-insensitive and therefore should be normalized to lowercase. For > example, the URI <HTTP://www.EXAMPLE.com/> is equivalent to > <http://www.example.com/>. The other generic syntax components are > assumed to be case-sensitive unless specifically defined otherwise by > the scheme (see Section 6.2.3) Scheme and host _are_ case-insensitive. Path is _not_, so isn't everything else. Section 6.2.3 doesn't define any normalization for the path component in HTTP schemes. Thus, example.com/item and example.com/Item are two different resources. I can only think of idiotic conventions of a particular poorly designed file system when it comes to this absurdity. There's no reason to drag them around in our developments. For these systems, case doesn't matter anyway, normalization is their job, not server hosts' who end up having to either rewrite every URL request for every asset, or mangle their asset directory and then rewrite almost every INI config (and spam "showname=Name" everywhere because now your character directory has to be "name"). So, instead of using absurd ad-hoc solutions to a broken implementation such as forcing everything to lower case on the server side, this commit attempts to fix the root issue and make URL handling conformant to relevant standards. Similar situation with strings within packets, although not as severe in practice. Case must be preserved, otherwise it's corrupting data for no reason. If a normalization is needed, it should be done at the call site of whatever requires it (like a filtering function), not by the parser. As for the INI, it's opinionated. While the values absolutely must not be normalized, a case can be made for keys and section names: why not allow "Options", "options", or even "oPtiOnS"? It's more convenient, and corresponds to the platform quirk of Windows (which Qt unfortunately inherits in AO2 Client). I don't think there's a good reason to allow such leniency in parsing, and removing superfluous normalization is a better move: less data transformations, less ambiguity, more strictness. In practice, INIs tend to be well-formed, and it's good discipline to write them this way. In several places, the case-folding does make sense: callwords, OOC commands, CSS class names for areas, and character list filters. These will behave weirdly and inconveniently without it. In most places, however, it only causes unnecessary breakage.
2026-04-09fix layton sfxstonedDiscord
2026-04-03Use nameplate/showname args for music log instead of manual string constructionSyntaxNyah
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03Hide character name in music log when showname is setSyntaxNyah
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01fix only area bugDavid Skoland
2026-04-01always hide charselectDavid Skoland
2026-04-01fix char select bugDavid Skoland
2026-04-01Enable auto pick area and charDavid Skoland
2026-02-11Merge pull request #293 from OmniTroid/better-charloadingstonedDiscord
Better charloading
2026-02-11Deduce emote icon extension from first button to speed up loadingDavid Skoland
Instead of probing extensions for every emote button (N*M HEAD requests), probe once using button1_off and reuse the result for all buttons. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10Refactor playerlist to state-driven rendering with renderPlayerListDavid Skoland
handlePR and handlePU now only update client.playerlist state, and renderPlayerList handles all DOM rendering from that state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Use setAOhost return value instead of stale AO_HOST importDavid Skoland
setAOhost now returns the current AO_HOST so handleASS can use the freshly set value rather than the import captured before the update. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Fix playerlist icons using wrong asset URLDavid Skoland
PR/PU packets arrive before the ASS packet, so playerlist icon srcs were set with the default AO_HOST. Now handleASS re-applies the correct asset URL to existing playerlist images after AO_HOST updates. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Prefetch char.ini for characters present in area via playerlistDavid Skoland
Store player data (charId, area) in an in-memory Map on the client, updated by PR/PU packet handlers. Use this to eagerly load char.ini when a player's character appears in our area or when switching areas, eliminating the lazy-load delay on first IC message. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Use charicon_extensions from extensions.json for char icon URLsDavid Skoland
Instead of hardcoding .png, read the preferred extension from client.charicon_extensions[0] (populated via extensions.json), falling back to .png if unavailable. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Catch rejected play() promises from browser autoplay policyDavid Skoland
Browsers reject .play() with a DOMException when the user hasn't interacted with the document yet. Add .catch(() => {}) to all 9 play() call sites to suppress the uncaught promise rejection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Defer char.ini loading and use direct img src for char iconsDavid Skoland
Instead of eagerly fetching char_icon (with HEAD requests per extension) and char.ini for every character on join, set img.src directly to char_icon.png and defer char.ini loading until actually needed (character selection via handlePV, or first IC message via handleMS). This eliminates thousands of HTTP requests on join for large character lists. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-01-27need to bake in version the non-npm wayDavid Skoland
2025-12-28Match client with how missing data is formattedmastyra
See https://github.com/AttorneyOnline/AO2-Client/blob/54afceec66744e758595e6a4e9bd861523f5b016/src/widgets/playerlistwidget.cpp#L207
2025-12-28Show player IDs in list elements when PU packet is sentmastyra
2025-10-28do not loop by defaultstonedDiscord
2025-10-06move setbackgroundstonedDiscord
2025-10-03maybe fix pantiltstonedDiscord
2025-10-02set backgroundsstonedDiscord
2025-09-28move extension fetch after ASSstonedDiscord
2025-09-03also do bgsstonedDiscord
2025-09-03bgurlsstonedDiscord
2025-09-03emotionsstonedDiscord
2025-06-22off by onestonedDiscord
fix #263
2024-12-24fix connection errorsstonedDiscord
2024-12-22Prettified Code!stonedDiscord
2024-12-22only show mod stuff when auth is successfulstonedDiscord
2024-12-13fix modcall newlinesstonedDiscord
2024-12-12get rid of sageTags in a few placesstonedDiscord
plan is to migrate to createTextNode
2024-11-20Prettified Code!stonedDiscord
2024-09-29HandleMS should only be in charge of parsing chat message.Caleb Mabry
2024-08-31give everything but the names a fixed sizestonedDiscord
2024-08-31hide out of area playersstonedDiscord
2024-08-31playerlist fixesstonedDiscord
2024-08-27enable pantilt if the bg has itstonedDiscord
2024-08-27the full bg is called court not fullstonedDiscord
2024-08-12Merge pull request #225 from AttorneyOnline/playerliststonedDiscord
Playerlist
2024-08-12fix evidebce off by one againstoned
2024-08-08fix first piece of evidencestonedDiscord
2024-08-07add ban buttonstonedDiscord
2024-08-07populate fields correctlystonedDiscord