1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-06-30 11:47:45 +00:00
Commit graph

623 commits

Author SHA1 Message Date
b2f14dffee Add the !item debug command to give items by name
Compared to the //gm item command which only accepts IDs.

Fixes #50
2025-06-28 11:22:21 -04:00
f1b9461eb2 Add the //gm item command back
I never actually finished the Lua version, oops.
2025-06-28 11:18:17 -04:00
99a165e405 When changing equip display flags, store that for new spawns
See #50
2025-06-28 11:13:11 -04:00
9a3652fb42 When equipping items, network that to other players
See #50
2025-06-28 11:13:11 -04:00
thedax
ad4edf801d
Implement skeleton levemete script (#78)
Like all the others this needs special handling but the menu at least opens and reports no available leves.
2025-06-28 11:06:28 -04:00
554d42a904 Equip the correct starting weapon for your selected classjob
This prevents all sorts of oopsies because the client will refuse
to equip certain items, if you happen to be using a Gladiator
weapon on an Archer or vice-versa.

See #50
2025-06-28 10:44:25 -04:00
61f0ccdacd Fix deleting characters in the lobby not working
This statement broke at some point, and the size of the custom IPC
was wrong too.
2025-06-28 10:43:53 -04:00
thedax
58eb154ae4
Inn bed: do player:begin_log_out() so the server-side hangs up properly (#77)
The client doesn't send that it disconnected, perhaps a bug on SE's end.
2025-06-28 10:33:02 -04:00
dfac7702fa Expose a zone's intended use ID in the Lua API 2025-06-28 10:27:56 -04:00
e6536da9dd Split up the command arguments on the Rust side
This removes some boilerplate code we need in every command to do
this ourselves.

See #65
2025-06-28 10:27:56 -04:00
ed1263d587 Pass all four arguments to GM command scripts
No GM command we have implemented currently uses these, but just
a little bit of future-proofing.
2025-06-28 10:27:56 -04:00
776bac9463 Add padding to the GMCommand IPC packet
This fixes the warning that the sizes don't match, because I think
there's padding at the end.
2025-06-28 10:27:56 -04:00
6951f9448d Port GM commands to Lua
This removes a ton of implementation overlap between the two
command systems. For example, we had two different implementations
of unlocking aetherytes which is just unnecessary.

On the flipside, this makes implementing new GM commands just as
easy as writing debug ones. I moved the existing debug Lua
implementations into their GM counterparts and updated the USAGE
accordingly.
2025-06-28 10:27:56 -04:00
2cbf70fbe5 Fix tests 2025-06-28 10:02:09 -04:00
6ecdae840c Continue parsing when encountering unknown packets
This reads the unknown packet data, just throwing it in a byte
buffer. This allows us to read the rest of the segmenets in
the packet, and fixes parsing.

Note that this still log spams with "wrong size" as we can't
determine the size of the unknown packet ahead of time. This is
easy to fix, but it's not a high priority yet.

Fixes #73
2025-06-28 08:48:59 -04:00
db2ee114a9 Fix the size of the aetheryte unlock bitmask
This should really be calculated instead of guessed, because I already
made a mistake. I didn't do that, only added a TODO for it.

Fixes #74
2025-06-28 08:22:01 -04:00
d3647a4b3b Fix unlocking all aetherytes
I also made it possible to toggle them off properly, that should be
saved now too.
2025-06-28 00:07:56 -04:00
db0bdd511c Fix the !unlockaetheryte command not working as expected 2025-06-27 23:59:09 -04:00
02b8e92d6b Reduce the amount of unlocks to what's actually possible
This stops the !unlock all debug command from crashing the server.
There's only 511 possible unlocks in the game, I guess.
2025-06-27 23:40:19 -04:00
74f32121ef Make size of bitmasks constants so they're easier to change, fix tests 2025-06-27 23:28:56 -04:00
5272439bca Store aetherytes in the database
This requires yet another database wipe, but this is worth it as you no
longer have to aetheryte unlock spam on login.
2025-06-27 23:28:56 -04:00
0b470dc28b Make unlocks persistent, fix player name in chat
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.
2025-06-27 23:28:56 -04:00
thedax
1fa861a35a
Rewrite the inn bed logic for hopefully the final time (#71)
It is now ~99% accurate. If we need to adjust the player's positioning after the cutscenes, we can do that at some other point
2025-06-27 22:40:40 -04:00
The Dax
ee3a7c54bb Update event scripts to use tables, since passing params now gets dropped into a Vec<u32> on the rust side. 2025-06-27 21:26:10 -04:00
The Dax
53748c33f0 Document the EventScene struct more: We'll support only two params for now.
We'll have a generic version soon™️, though.
2025-06-27 21:26:10 -04:00
2075da0c5e Fix tests and Cargo warnings 2025-06-27 17:59:40 -04:00
7b8177b27b Allow building for WebAssembly
This really only allows you to access the packet parsing bits, starting
the servers isn't possible for a variety of reasons.
2025-06-27 17:58:14 -04:00
05f909497c More unknown IPC handling fixes 2025-06-26 21:06:54 -04:00
thedax
a3d32b67aa
Rename forgotten variable in Events.lua (#70) 2025-06-26 21:02:15 -04:00
db3166d8b3 Add various things useful for using Kawari downstream
Such as better unknown packet parsing, IPC opcode names and
more stuff exposed as public API.
2025-06-26 20:59:46 -04:00
thedax
b560642978
Implement Gold Saucer lift operators, aethernet shards, and every MGP vendor (#69)
Except for the mahjong vendor. He needs something different apparently.
2025-06-26 20:48:09 -04:00
4f364ae330 Don't make packet parsing async
This doesn't need to be marked as async, the code isn't.
2025-06-26 19:09:13 -04:00
thedax
c5695f5ed7
Parially implement Gemstone Traders and Hunt currency exchangers (#67) 2025-06-26 08:04:13 -04:00
The Dax
94e13fa281 Remove commented testing log output 2025-06-26 07:47:05 -04:00
The Dax
2c60e4f8fa Fix a typo in Events.lua 2025-06-26 07:47:05 -04:00
The Dax
385672d797 Add support on the Rust side for resetting the command identifier.
-sender was also renamed to command_sender in case we'd like to reserve the word "sender" in the future.
2025-06-26 07:47:05 -04:00
The Dax
0f7e068ba3 Further reduce boilerplate in various scripts
-Introduce a printf helper command which can print the sending command's name for you,
and treats the message as a format string if additional params follow
2025-06-26 07:47:05 -04:00
d292e1d676 Fix signedness of scene yield params
According to the decompiled Lua code, they sometimes can return
negative numbers (like -1, to indicate an error.) I also improved
the debug display of these in the server log a bit.
2025-06-25 23:28:12 -04:00
476958a054 Move crystal bell script
I finally found what client-side script it's calling into, they
call it "BeautySalon" internally.
2025-06-25 23:20:37 -04:00
96aece36cf Implement more back and forth packets for events
I figured out a few of these while figuring out the crystal bell
event, although their purpose is still generally unknown. It doesn't
really affect anything functionally as the event still works as
well as it did before.

I also fixed the crystal bell scenes so they don't finish the event
prematurely, although it looks weird without the hairstyle menu. But
that still isn't figured out yet.
2025-06-25 23:11:49 -04:00
381098b1c5 ClientTrigger Unk2 is actually FinishZoning 2025-06-25 22:12:09 -04:00
b099d0a7f4 Implement the Crystal Bell menu
It will start the second scene if you request a summon now, but
we still need to implement the opcodes for bringing up the menu.
2025-06-25 21:50:57 -04:00
58e4e89765 Support toggling displaying your weapon and other flags
This is now networked and shown both to you and other players. This
still needs to be persisted for other player spawns.
2025-06-25 21:30:14 -04:00
7d203d1de5 Add documentation about the supported client triggers 2025-06-25 20:58:21 -04:00
ec76d3fb31 Don't allow connecting with an older client
I just wasted a few minutes trying to connect, only to realize my
client is too old. I thought we declined in these situations
already, but I guess not?
2025-06-25 20:04:47 -04:00
69e8e4055e Finish implementing currency
I made various mistakes in the initial implementation, which
are now fixed.
2025-06-25 17:02:19 -04:00
thedax
75993bf933
Update to Lua 5.4, adjust scripts accordingly (#64) 2025-06-25 15:21:09 -04:00
thedax
6d99bef66c
Refactor and reorganize numerous Lua systems: (#63)
-Global.lua is no longer a catch-all dumping ground for registering actions and events
Instead, Global.lua will actually contain useful global constants and functions

-Init.lua will take over the role of being the initial script run when doing reloads or booting the servers
-Actions.lua will take over registering all actions
-Items.lua will take over registering all items
-Commands.lua will take over registering all text commands

-Events.lua will take over registering all warps, openings/quests, aetherytes, etc.
To this end, event ids now live in organized tables to reduce error-prone copy paste clutter

If we get enough actions, items or commands, we can move those to tables too.
2025-06-25 13:25:48 -04:00
3c9eeec7b1
Fix another broken GitHub link 2025-06-25 13:06:40 -04:00
thedax
d73ab383e8
Document the previously unknown parameter for the ServerChatMessage opcode (#62)
Document the previously unknown parameter for the ServerChatMessage opcode
Credit goes to Sapphire as usual (see comments)
2025-06-25 10:05:34 -04:00