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!
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.
Just for fun, but this isn't hooked up to any commands yet. I need to
make some command changes anyway, and will hook it up when I do that
refactoring.
Now other players won't spawn at 0,0,0 (which is wrong, almost nobody
is there) and will reflect their actual position/rotation when spawned
in. This is also updated on the server - so new clients are aware of
your last position/rotation - and can be used later for visibility
checks.
This is to workaround a bigger bug where I don't properly enclose actors
in their zone, so you can hit an assert while traveling between zones.
But this is something that has been needed anyway, and also fixes that.
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.
Instead of one single slot available in your inventory, all four pages
should be available now. Moving items around should be less buggy, and
it's now possible to discard items.
Items cannot stack still, and when given will always take up the next
free slot.
Curiously the spawned clone shows up as a player, despite not using the
NPCSpawn packet. This might be a suitable workaround for the
PlayerSpawn packet being buggy from our side.
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!
I think the current way I'll accomplish this for now is to use the other
task to send all messages from the global server state back into the
main connection loop.
This is quite the architecture change, and I started working on the
first Tokio actor tutorial I could find. This actually works though,
and you can now chat between two characters on the server.
The next steps are to clean up my mess, and send actors over the wire.
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.