1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-06-30 19:57:46 +00:00
Commit graph

437 commits

Author SHA1 Message Date
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
The Dax
89aee8e5d8 Address warning: "warning: casting to the same type is unnecessary (u16 -> u16)" 2025-06-23 15:28:24 -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
33893ff460 Fix compile error 2025-06-22 11:24:45 -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
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
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
a6e270d5e3 Log, don't panic for syntax errors in event scripting
Fixes #39
2025-06-22 08:35:25 -04:00
6b0487f30f Log, don't panic for Lua commands
It will also try to fallback to a Rust command - if available.

See #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
thedax
92a5cc48eb
Apply a temporary-ish fix so that not all chat messages appear as unknown commands. (#46) 2025-06-21 21:16:31 -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
bdd98820e7 Stop panicking when receiving None segments from the client
This apparently happens when you send chat messages super quick, and
they seem harmless to ignore.

Fixes #40
2025-06-21 14:04:09 -04:00
0d37dd7b6e Fix the size of None segments
It should be 0, not 16 bytes.

See #40
2025-06-21 13:59:58 -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
6561e63fd4 Send a message in-game when trying to start a non-scripted event
This should make it more obvious than in the usually spammy server log.
2025-06-21 12:26:58 -04:00
bb2cc9e0ec Log in-game and in the server when encountering an unknown command
Instead of printing nothing and you're just left scratching your head.
2025-06-21 12:23:25 -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
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
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
01508fd506 Add function to get an action's cast time
For future spell-related stuff.
2025-06-21 10:36:21 -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
The Dax
a24e0a5658 Overhaul the Lua permissions:
-Renamed permissions to required_rank
-Don't panic when the script author omits required_rank
-Reset state in the global table after reading it, so scripts can refresh it each time
2025-06-20 14:02:46 -04:00
The Dax
579bef8cd6 Adjust logging slightly 2025-06-20 14:02:46 -04:00
The Dax
be20b0f604 Add a basic permission system to Lua scripts to bring them in line with ingame GM commands. 2025-06-20 14:02:46 -04:00
777cb8b2a3 When failing to parse a packet segment, print it's size
This can be helpful to determine what the heck this opcode is.
2025-06-19 16:07:39 -04:00
355572d97a Remove some unknown packet spam
The "Received UnkXX" log messages are completely useless, let's get rid
of them.
2025-06-19 16:01:31 -04:00
2dc3a899bb Run cargo fmt 2025-06-19 16:01:16 -04:00
OTCompa
efdec9b4c5 Rename added variables/functions for better consistency 2025-06-19 15:54:42 -04:00
OTCompa
6d79a365f3 Add config for world address to be served by lobby server 2025-06-19 15:54:42 -04:00
OTCompa
086cd24b09 Connect to server name instead of listening address 2025-06-19 15:54:42 -04:00