CPunch
1f66acfd25
started out as me making a service abstraction.. - db.Player exists again, and entity.Player uses it as an embedded struct - chunk.ForEachEntity() lets you add/remove entities during iteration now - removed account related fields from CNPeer - protocol/pool has been merged with protocol. use protocol.GetBuffer() and protocol.PutBuffer(). - new protocol/internal/service! service.Service is an abstraction layer to handle multiple CNPeer* connections and allows you to associate each with an interface{} uData. In the future it might also handle a task queue for jobs that modify/interact with the player's uData, called from service.handleEvents() - PacketHandler callback type has a new param! uData is passed as well now - much of loginserver/shardserver is now handled by the shared service abstraction - SHARD: NPC_ENTER packets are now sent on player loading complete rather than on enter. |
||
---|---|---|
.github/workflows | ||
cmd | ||
config | ||
internal | ||
login | ||
shard | ||
tdata@cc65dbb402 | ||
tools | ||
.gitignore | ||
.gitmodules | ||
build.sh | ||
compose.yaml | ||
Dockerfile | ||
go.mod | ||
go.sum | ||
README.md |
gopenfusion
A toy implementation of the Fusionfall Packet Protocol and accompanying services, written in Go.
Landwalker demo
An implementation of a landwalker server is located in login/
&& shard/
. This includes a functional login server and a dummy shard (supporting the minimum amount of packets necessary). There is minimal support for NPCs, and minimal support for player interaction (chat & player movement being mostly it).
Startup the environment using
$ chmod +x ./build.sh && ./build.sh
$ docker compose up
The environment consists of a shard service, login service, redis && postgres containers. redis is used to pass login metadata between the login and shard services, while postgres is just used to store player accounts and characters.
login server is hosted at 127.0.0.1:23000
, just join from your favorite client
Generating structures
Dump and decompile the Assembly - CSharp.dll
assembly from the fusionfall main.unity3d, using a tool like ilspycmd. The full output source can then be passed to genstructs.py
script located in tools/
, which will handle scraping constants and calculating structure padding. See the script for details on usage.