1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-07-10 16:07:45 +00:00
Commit graph

46 commits

Author SHA1 Message Date
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
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
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
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
05f909497c More unknown IPC handling fixes 2025-06-26 21:06:54 -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
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
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
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
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
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
01697c8f62 Begin implementing currency, add //gm gil command and more
This doesn't work yet though , and I'm not sure why. I also fixed a bug
where new characters doesn't get their inventories initialized properly.
2025-06-24 19:16:32 -04:00
03609fb8c1 Add a comment to rename EventHandlerReturn 2025-06-24 18:31:19 -04:00
cc5d9ae7bc Return both parameters in EventHandlerReturn
This allows scripting things like Aetherytes in the future.
2025-06-24 18:30:22 -04:00
thedax
82e5021979
Implement the //gm teri_info command, and fix a typo (#56)
Implement the `//gm teri_info` command, and fix a typo. Said typo was in gamedata.rs, confusing the FingerL column for the SoulCrystal column.
2025-06-23 13:39:37 -04:00
fd249a2342 Rename !unlockaction to !unlock
When learning how to unlock emotes, apparently FFXIV just has one
kind of ID for all kinds of stuff. So I picked a number, stuck it
as the max (this is unconfirmed) and you can now unlock everything.
2025-06-22 11:18:07 -04:00
b41cb478e7 Display unsheathed weapon to other players
It doesn't play the animation correctly, yet.
2025-06-22 10:08:29 -04:00
e1b01299c9 Show emotes from other players
If you move it doesn't cancel them yet, but still cool to see them play.
2025-06-22 09:45:24 -04:00
fbe6862c7b Begin implementing EXP
This doesn't actually do things like level you up, but if you use the
GM EXP command then it will update the UI.
2025-06-22 09:19:06 -04:00
thedax
e1b261c7d8
Implement several actors/entities (#49)
* Implement the following actors/entities:
-Inn Toy Chest actor, which simply says you haven't unlocked mini-games
-Inn Glamour Dresser actor, which simply says you haven't unlocked the GD yet
-Orchestrion, which is fully functional as long as you have songs unlocked

Accompanying the orchestrion is the GM orchestrion command, with a caveat:
-It allows you to learn one song at a time, but id 0 (aka "all) doesn't learn a single
song for some unknown reason, so I've disabled it for now.

* Run cargo fmt

* Update USAGE.md
How many times will I forget...
2025-06-22 08:46:11 -04:00
d821c838cb Send your character's actual levels during setup
This fixes their display in the Character window. Sometimes the display
is a bit bugged, but there's not much I can do about that right now.
2025-06-21 11:50:09 -04:00
39beefbef3 Send action requests to global server state
This is to lay the groundwork for keeping track of cast spell timings,
and eventually networking actions to other players.

See #36
2025-06-21 10:36:44 -04:00
2dc3a899bb Run cargo fmt 2025-06-19 16:01:16 -04:00
thedax
961cb92ab1
New Lua command proposal: !festival (#26)
This command enables the user to set the current zone's festival.
For example, you can toggle the Starlight festival in any of the starting cities.

Thanks, OTCompa!
2025-06-19 12:29:10 -04:00
The Dax
1edcdf3de6 Implement GM speed command, and make GM invis command actually toggle invis status 2025-06-19 10:09:07 -04:00
b21d9933b3 Add GM rank to database, default to normal user and set online status
Instead of everyone starting out as a GM, they are a normal user by
default. Right now the only way to set GM rank is through editing the
database. The online status is set accordingly.
2025-05-12 15:44:39 -04:00
94ed036431 Add script for the Teleport action
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.
2025-05-11 10:12:02 -04:00
1914531d89 Add commands to unlock actions, and aetherytes
This doesn't mean teleporting works *yet*, as it needs to be scripted.
The unlocked action/aetheryte is also not persisted yet.
2025-05-11 09:27:29 -04:00
7f729bfd99 Update dependencies (binrw, physis, bitflags)
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.
2025-05-09 15:25:57 -04:00
88e02452c4 Propagate pose changes to other players
Building off of the previous propagation work, your current pose is sent
to other players now too.
2025-05-08 23:03:51 -04:00
fd1fbe7188 Start adding support for propagating actor control state
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!
2025-05-08 22:53:36 -04:00
f338530e6d Fix rotations sent to other players
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!
2025-05-08 21:52:50 -04:00
3139d63b91 Begin scripting the inn NPCs
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.
2025-05-05 20:51:49 -04:00
de5e6cfb94 Use Default trait in more segment construction 2025-05-02 23:38:44 -04:00
ff33bd446a Update IPC struct names and filenames to match their opcode name 2025-05-02 23:24:31 -04:00
11156ea43c Fix GM commands 2025-05-02 16:17:29 -04:00
8d384c4bd0 Overhaul how we send inventory packets again
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.
2025-05-02 16:15:54 -04:00
e7fb661244 Implement Fantasia and remaking your character
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.
2025-05-02 15:36:22 -04:00
cb146f173e Fix tests not compiling 2025-05-02 00:56:48 -04:00
5111a38424 Re-organize IPC segments into the ipc module
These were kind of scattered everywhere, instead we should move them
into their own module. Kawari's custom IPC is moved here too.
2025-05-02 00:47:11 -04:00