The PlayerStatus struct shifted around recently, so I fixed the offsets
yet again. Unlocks should be persistent now, but this as usual requires
a database wipe, sorry!
I also included some refactors of the !unlock debug command that still
had references to the old unlock_action API.
This doesn't match up with retail yet (I don't know why.) But this
fixes the appearance of lots of dungeons and other instanced
content that have their own special weather.
This makes the Teleport action functional now, although it looks pretty
rough as it warps you instantly instead of waiting for the action to
actually finish.
Kawari is starting to have more and more Excel-based code, so having a
nicer way to access it is nice. This only works for simple cases for
now, and easy one is finding a warp.
This updates three major crates we use to the latest version with all of
their API changes, and the others too. Notably, this removes the Syn v1
dependency thanks to binrw 0.15 switching to Syn v2.
There was two problems I was running into:
1. The move packet changed slightly, using a different way to encode the
rotation. In hindsight, it should seem obvious they would encode it the
same way for CommonSpawn and ActorMove.
2. write_quantized_rotation did it's order of operations wrong, and
it would spit out nonsensical rotations.
Both issues are fixed and you can see the other player's rotation
correctly now!
This is super simple, you get the player and the args (which you can
choose to split if you so choose.) I reimplemented the !setpos, and will
start doing the rest of the commands.
Everyone's favorite copying mechanism/purchasable item is now functional
in Kawari. The item doesn't disappear once you use it, because there's
no API for that yet.
We have had an import feature for a while, allowing you to easily
recreate your retail character from Auracite backups. But the feature
was implemented *before* we had proper service accounts, and it always
assigned it to ID 1.
Now it's moved to the user-visible account management page.
I wanted to make the lobby screen reflect your currently equipped items,
but that doesn't yet for some reason. These are still good refactorings
though!
All accounts were sharing the same character list, but now they should
be properly separated. This also modifies the login database to prepare
for multiple service accounts, but there's no way to manage them in the
web interface yet still.
I seem to have finally restored the reliability back to how it used to
be, it seems the crux of it was the Excel sheet reading for Items. I
moved the parsing to the start-up instead.
This now works and Kawari has achieved basic multiplayer! This is of course with
a hundred caveats:
* Previously spawned players are not backfilled
* There is no range or zone detection
* They are carbuncle clones of you, not the other character's data
But it actually WORKS!
Instead of standalone functions in the common module to perform game data tasks,
there is now a shared GameData struct that these functions moved to. This speeds
up a few things, and can take advantage of Physis' built-in index caching.
I know the current solution isn't ideal (each connection has to mutex lock to
access gamedata) but it's at least better than before.