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

477 commits

Author SHA1 Message Date
Jules
fe234920f2
Use raw-dylib when linking to Oodle on Windows (#83)
This means that the static .lib is no longer required at compile time, but
the .dll is still required at runtime. On Linux, the .so is still
required at both compile time and runtime, because linking works
differently there.
2025-06-28 14:45:01 -04:00
66da9abc90 Fix bad assumption with EXP/Level array indices
They don't always correspond to their classjob id, because jobs share
the same EXP/Levels as their base classes.
2025-06-28 14:15:46 -04:00
8f61fc36bd Support importing even more data from Auracite
This includes unlocked class jobs, levels, your inventory and unlock
flags.
2025-06-28 14:15:46 -04:00
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
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
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
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
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
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
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
The Dax
94e13fa281 Remove commented testing log output 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
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
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
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
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
9d01a5d595
Update opcodes for 7.25h2 (#60)
* Attempt to update opcodes for 7.25h2, but it's possible I missed some

* Disconnect might be 370

* Edit README.md to reflect the new update
2025-06-24 16:21:25 -04:00
d612a95be9 Move restoring character backup to it's own page 2025-06-23 21:42:30 -04:00
ddb67383af Fix more easy Clippy warnings 2025-06-23 21:14:38 -04:00
The Dax
86310c7c22 Address warnings:
warning: usage of `contains_key` followed by `insert` on a `HashMap`
warning: you seem to want to iterate on the values of a map
2025-06-23 15:28:24 -04:00
The Dax
5b5e998286 Address warning: "deref which would be done by auto-deref" 2025-06-23 15:28:24 -04:00
The Dax
efb7a7e126 Address warning: "empty line after outer attribute" 2025-06-23 15:28:24 -04:00
The Dax
ab3bcfc365 Address warning: "name NPC contains a capitalized acronym" 2025-06-23 15:28:24 -04:00
The Dax
75b34cb959 Address warning: "struct update has no effect, all the fields in the struct have already been specified" 2025-06-23 15:28:24 -04:00
The Dax
32d978d82b Address warning: "unneeded return statement" 2025-06-23 15:28:24 -04:00