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.
This begins figuring out how we are going to be propagating actor
control state: e.g. targets, poses, and other misc effects. I ended up
sending client triggers to the global server state, who then creates the
needed actor control packet for the other players.
Now players can see what other players are targeting!
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.
This means the three ARR inns are now "functional" (as in, you can enter
and exit them.) I also added some code to give you control of your
character in case you hit an unimplemented event.
It turns out that most warps are just a yes/no, and can be handled by
one single script. I scripted the lift attendants from Bulwark Hall <->
Airship Landing <-> Drowning Wench this way.
The inn bed is the most complex script we have written so far, and needs
a little bit more logic to when it finishes. I also made it play the bed
animation, although you *will* sleep forever as we don't know how to
disconnect you yet.
This kinda works, you can now talk to them without locking up your
character but you aren't warped yet. I also need to clean up the mess of
the Lua API.
I wanted to add armory chest support but the current state of the
inventory was a little frustrating. Adding new containers was too
difficult, so I made the system *even more* generic and easier to use. I
have also split it up into it's own module with a nicer file layout.
Oh yeah, and armory chest works too now.
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!
There's no point in doing this yet:
1. This *crashes* the client, nice. Most likely because we're not
actually obsfucating anything, only tricking the client into thinking we
were. Why this can crash the client is beyond me?
2. Obsfucation is still optional.
The opcode wasn't updated for 7.20h, and I think was overlapping with
some status effect list one (hence the weird stuff happening in the
update showcase video.) Also updated the testdata, even though it wasn't
needed.
I also added back the actor hp/mp update, because I deleted that
thinking it would fix something but it didn't.