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

224 commits

Author SHA1 Message Date
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
90a4f4ea0c Switch to new physis sheets name
Nothing changed API-wise apart from that. We also have the ability to
now pin on a game version, which is super helpful.
2025-05-10 09:25:22 -04:00
477380c8b9 When using the !spawnmonster command, send it to all players
You can't attack it and see it on other clients yet, that will take some
more plumbing.
2025-05-09 20:09:22 -04:00
2e50d1f7ad Move some common code out of ZoneConnection and into a new common module 2025-05-09 19:49:40 -04:00
dba4edc32d Remove some dead, unused code 2025-05-09 19:45:08 -04:00
95fb6a149f Remove ToServer::ActorSpawn
This should be handled in the global server state instead.
2025-05-09 19:42:23 -04:00
0139fbc8c6 Remove the now unused ToServer::ActorDespawned
This is handled in the much-better-named LeftZone message.
2025-05-09 19:30:37 -04:00
cbeaa83307 Implement basic zone isolation for multiplayer
Now you don't see every player from every zone, like some kind of
madman. The code still sucks, but it works.
2025-05-09 19:27:18 -04:00
9787126a1b Replace (most of) the remaining Excel parsing with Physis Sheets
The only one remaining is for Item data, but that can't be ported yet
because the new API only fetches the first page for now.
2025-05-09 18:35:44 -04:00
99c92d1b67 Update and use the nice, new Physis ColumnData API
Now the GameData::get_warp function looks much closer to how I want it
to!
2025-05-09 18:03:25 -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
7c96edc9a4 "Implement" the Crystal Bell
Like the Unending Journey, just tell the player they aren't authorized
to summon him.
2025-05-06 22:39:57 -04:00
ed44de8956 "Implement" the Unending Journey
Apparently there's a scene that's super easy to use, that omniously says
"You cannot consult The Unending Journey at this time". That's cool,
though.
2025-05-06 22:37:02 -04:00
515ec59d92 Port classjob debug command to Lua 2025-05-06 22:03:31 -04:00
4c17f28eb0 Add Lua API for commands
This is super simple, you get the player and the args (which you can
choose to split if you so choose.) I reimplemented the !setpos, and will
start doing the rest of the commands.
2025-05-06 21:57:52 -04:00
ca8d36e48c Fix remaining inn warps, prevent the player from getting stuck
This means the three ARR inns are now "functional" (as in, you can enter
and exit them.) I also added some code to give you control of your
character in case you hit an unimplemented event.
2025-05-05 23:45:22 -04:00
e237cbe84d Create GenericWarp script to handle simple warps
It turns out that most warps are just a yes/no, and can be handled by
one single script. I scripted the lift attendants from Bulwark Hall <->
Airship Landing <-> Drowning Wench this way.
2025-05-05 23:30:36 -04:00
6dc8194aa8 Add inn bed handling, let event scripts decie when they are finished
The inn bed is the most complex script we have written so far, and needs
a little bit more logic to when it finishes. I also made it play the bed
animation, although you *will* sleep forever as we don't know how to
disconnect you yet.
2025-05-05 23:04:53 -04:00
00671ae741 Add script for limsa inn door 2025-05-05 22:28:45 -04:00
fec6665d8d Make Limsa Inn warp functional
This was surprisingly easy, so now this works. You can't exit the inn
yet, though!
2025-05-05 22:04:39 -04:00
afbadf85c4 Clean up talk event handling, use Event struct 2025-05-05 21:15:03 -04:00
873d7f5951 Move custom IPC handling to a separate file 2025-05-05 21:03:47 -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
7e0b0d1bfc Move global world server logic to it's own module 2025-05-02 23:51:34 -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
29aba2748b Switch out rand crate with fastrand
It's just smaller, the less crates we compile the better.
2025-05-02 23:06:59 -04:00
76583ed744 Add config flag to disable outgoing packet compression 2025-05-02 22:41:31 -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
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
0f98bfde52 Implement Default trait for PacketSegment
This reduces a *ton* of places where I had to set
source_actor/target_actor to zero because it wasn't relevant.
2025-05-02 00:28:05 -04:00
fb69689f2a Change server_id field in IpcSegment to option 2025-05-02 00:17:15 -04:00
54fd1b90b1 Move chat connection initialization out of WorldConnection
I think this just causes more confusion, it's not really it's job to do
this.
2025-05-02 00:11:37 -04:00
f3f25eb219 Overhaul segment types, their names and their order 2025-05-02 00:03:36 -04:00
b426de677f Begin separating chat IPC, fix tests 2025-05-01 23:34:06 -04:00
5420225c74 Update world IPC packets with better fitting names, fields 2025-05-01 23:20:56 -04:00
afed151488 Add "character backup import" feature to the account management page
We have had an import feature for a while, allowing you to easily
recreate your retail character from Auracite backups. But the feature
was implemented *before* we had proper service accounts, and it always
assigned it to ID 1.

Now it's moved to the user-visible account management page.
2025-05-01 15:35:51 -04:00
ed8ccb86ee Move model id grabbing to Inventory, fixup ClientSelectData
I wanted to make the lobby screen reflect your currently equipped items,
but that doesn't yet for some reason. These are still good refactorings
though!
2025-04-30 23:05:43 -04:00
614e470669 Add an option to enable packet obsfucation for the World server
There's no point in doing this yet:
1. This *crashes* the client, nice. Most likely because we're not
actually obsfucating anything, only tricking the client into thinking we
were. Why this can crash the client is beyond me?
2. Obsfucation is still optional.
2025-04-30 22:37:57 -04:00
20030c18c8 Move work definitions to their own module 2025-04-22 16:07:39 -04:00
ef58358756 Expose Damage kind, element and type in Lua API 2025-04-18 14:32:39 -04:00
fa2caa6647 Make EquippedContainer iteratable, simplify sending equipped item code 2025-04-18 13:52:18 -04:00
e5672e91f2 Show the currently equipped weapon on your character
Oops, I was turning u64 model ids into u16 and then changing it to
either a u32/u16. That's stupid, but now it's fixed and we can display
weapons!
2025-04-18 13:20:25 -04:00
510d07e3e4 Fill out more fields of damage action results
Now we can actually set whether the damage was physical, magical,
aspected etc. This is not yet exposed in the Lua API.
2025-04-18 13:11:29 -04:00
d507547dd3 Fix action results not working
The opcode wasn't updated for 7.20h, and I think was overlapping with
some status effect list one (hence the weird stuff happening in the
update showcase video.) Also updated the testdata, even though it wasn't
needed.

I also added back the actor hp/mp update, because I deleted that
thinking it would fix something but it didn't.
2025-04-18 12:38:02 -04:00
db877938ac Attempt to remove actors when killed
This doesn't work on the test monster yet - I don't know why, but this
is what it's supposed to do.
2025-04-18 01:38:47 -04:00