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

238 commits

Author SHA1 Message Date
dfac7702fa Expose a zone's intended use ID in the Lua API 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
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
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
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
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
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
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
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
The Dax
89aee8e5d8 Address warning: "warning: casting to the same type is unnecessary (u16 -> u16)" 2025-06-23 15:28:24 -04:00
33893ff460 Fix compile error 2025-06-22 11:24:45 -04:00
4acf0c4fc8 Remove "Registered XYZ" messages from the World server
Now that we have a ton of events registered, this just becomes
log spam. I initially added it while testing the Lua API, but
I don't think it's necessary anymore.
2025-06-22 10:15:58 -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
77b6fbad7f Fix the "unknown command" message for real, now
Now it takes into account if the command exists on the Rust side,
and the message should now *only* display if no one truly handles
this command.
2025-06-22 09:28:50 -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
d35e0830d3 Don't panic when the event file doesn't exist 2025-06-22 09:05:54 -04:00
198a8a3e2c Make !reload command always available, add !finishevent
The reload command was previously implemented in Lua, but this
is a little dangerous as it could itself have an error and is
unable to work in the first place. I moved this to Rust to
ensure it's always available. I left the reload_scripts() API
in Lua as someone could still find that useful!

Additionally, I added a !finishevent debug command to forcefully
end the current event you're in. This can be useful if your script
is incomplete or has an error, as your client gets stuck very
easily.
2025-06-22 08:49:06 -04:00
a6e270d5e3 Log, don't panic for syntax errors in event scripting
Fixes #39
2025-06-22 08:35:25 -04:00
cdcce88c5f Log, don't panic for syntax errors in Global.lua
See #39
2025-06-22 08:35:25 -04:00
0cdd20fb50 Allow loading invalid zone IDs 2025-06-21 19:01:56 -04:00
53a3d5d6a4 Load the actual weather rates for zones instead of using Sunny
This doesn't match up with retail yet (I don't know why.) But this
fixes the appearance of lots of dungeons and other instanced
content that have their own special weather.
2025-06-21 14:55:17 -04:00
4146261c40 Script the Mothercrystal exit, stop panicking if warp isn't found
I guess this might be because a planevent fails to load, but I'm not
confident about that.
2025-06-21 14:23:56 -04:00
thedax
61616df842
Reimplement several commands in Lua (#37)
* Reimplement !unlockaction in Lua
Rebased on upstream master

* Unlockaction: display the action id that was unlocked

* Reimplement GM speed in Lua

* Fix warnings and errors

* Run cargo fmt

* Reimplement GM wireframe in Lua

* Reimplement GM invis command, with a caveat
It can't toggle the invis state yet, and I'm not sure where to update it.

* Lua invis: add the gm_invisible toggle, but it still doesn't revert back to false...

* Reimplement GM aetheryte in Lua, with a caveat
It's seemingly not working right now though: it doesn't add any new aetherytes to the teleport menu.
But I can't get the command `//gm aetheryte on X` to do it either, so it's possible Kawari isn't responding correctly?
Either way this needs further testing.

* Lua invis: add the forgotten Lua file

* Reimplement GM teri in Lua
Also add a TODO for UnlockAetheryte

* Make comment in lua.rs more useful

* Run cargo fmt again

* Teri: range check the territory ID

* Update USAGE.md to reflect the new commands
Rebased on upstream master

* Clarify unlockaetheryte USAGE and in-script usage

* Refactor UnlockAetheryte.lua, and make ToggleInvisibility actually work properly.
I opted to create a Task for this, because sticking it in kawari-world.rs felt like a hack to me.

* Run cargo fmt for hopefully the last time today

* Move lua.ra:toggle_invisibility down with the other queued tasks

* Fix spaces in USAGE.md, remove stray rebase message
2025-06-21 13:30:52 -04:00
f07d16b949 Allow reloading Global.lua with the new !reload debug command
Scripts are normally loaded when they are needed, with the exception of
Global.lua that's only loaded once at start-up. But now you can reload
it in-game with the !reload command, which should make event and command
scripting way less of a hassle.
2025-06-21 12:16:27 -04:00
b593d87ef7 Only execute actions at the end of their cast timer, if any
This makes actions like teleport not turn you into a zombie, because now
the action *somewhat* matches up with your client's animation. Note that
teleporting specifically still looks wrong, because I think on retail
the client is informed to preload the zone you're going to and we don't
do that.

Fixes #36
2025-06-21 11:20:21 -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
9405714e56 Emit better warnings when loading LGB files
Now the "Loading XYZ.lgb" message only shows up *if* we find the file,
and if it fails to parse then we tell people to report it to us.

See #35
2025-06-21 09:28:27 -04:00
2a1491c8f9 Make the current classjob persistent, and your levels too
This requires another database wipe, or if you're savvy enough a few
schema edits.
2025-06-20 19:08:53 -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
The Dax
749b499db6 Refactor portions of lua.rs to reduce boilerplate
-Create common methods create_segment_self and create_segment_target.
These reduce the amount of copy-paste boilerplate code since the IPC queueing stuff basically never changes
as far as I can tell. Now we simply specify the opcode and the data that goes with it, and off we go.
Create_segment_self retains the current behaviour of using the player's actor id as both the source and target,
and create_segment_target allows us to change the source and target in case commands are written that require
one or the other to be different (Sending targeted players to other coords/zones? Bringing a player to the GM/source user? Several possibilities.).
2025-06-19 08:32:06 -04:00
9567c8f38e Change default GM rank back to 90
I originally did this thinking I would engineer a user management
interface afterwards, but this hasn't materialized yet and just makes
testing Kawari harder.

This should stop having to manually edit your Kawari World database to
gain access to GM and debug commands.
2025-06-18 21:00:20 -04:00
ed08fc2fdc Reject certain debug commands based on GM rank
This only affects the commands implemented in Rust for now.
2025-06-18 20:58:32 -04:00
9770497fe5 Remove spammy log message from chat handler 2025-06-18 20:57:51 -04:00
c1dc138e3c Make !spawnclone debug command networked 2025-06-18 20:57:20 -04:00
d216bebce9 Remove !playscene debug command
This doesn't really scale right now with the new events system, and I
don't use it anymore so let's remove it for now.
2025-06-18 20:53:07 -04:00
eb6b6409da Generate new actor IDs for debug NPCs, unify actor network paths
I don't know why I created a new message kind just for spawning NPCs
when ActorSpawn does this just fine. But what this actually means is
that the debug NPCs can now be spawned more than once.
2025-06-18 20:49:05 -04:00