Latest Updates
Stay informed about the latest news and changes in Primal Conquer.
feat: add garmentunlock gm command
- /garmentunlock
- Mirrors /wingunlock for the 3300/3305 wardrobe path, no inventory round-trip
- Resolves item by ID first, falls back to name lookup filtered to garment slot
- Enforces wardrobe capacity and per-typeId dedup (matches HandleStore)
- FullSync via CoatWardrobe.SendContents so the item appears without relog
chore: remove test title flag from pm char
docs: document arena qualifier (2205-2211) and verified packet layouts
- Add reverse_engineered.md section 57 with vtable map, Process/Create addresses (0x8C0743/0x8C0AAB/0x8C0B85/0x8C0D04/0x8C0ED0/0x8C0FB6/0x876C96), full field layout for all 7 packets, ActionType+ActionInfo tables, match lifecycle protocol trace, and UI message ID catalogue (0xC13/0xC19/0xC1A/0xC1D/0xC1F/0xC20/0xC26/0xBE7)
- Update ALL_PACKET_STRUCTURES_6609.txt with named fields for 2205/2206/2207/2208/2209/2210/2211 (previously marked as anonymous uint32 slots)
- Add migration table rows #49-55 for arena packets (DONE)
- Add Arena Qualifier row to systems.md under PvP subsystems
docs: document cmsgflower (1150) and refresh nobility board path
- reverse_engineered.md: new section 56 covering CMsgFlower::Process @ 0x92D075, sub_8A11EB counter layout, buff 46/104 aura attach, gender-aliased 4-slot model, item ID ranges, and the FrostEmu implementation map
- Index entries added for sections 55 (CMsgPeerage) and 56 (CMsgFlower)
- Fix NobilityBoard path in section 55.8 after the Core -> Structures move
- PACKET_MIGRATION_6609.md: MsgFlower row marked DONE
- ALL_PACKET_STRUCTURES_6609.txt: fill in CMsgFlower field names for both the inbound send layout (0/1) and the server-sync layout (2/3) with interleaved today/lifetime counters
chore: batch discord webhook posts under size/count limits
- Group embeds greedily up to 10 per request or ~5500 chars total
- Flush earlier when next embed would overflow either limit
- Keeps tiny chore commits in one POST while long feat bodies get their own
docs: document nobility system architecture and packet layout
- reverse_engineered.md gains section 55 with the CMsgPeerage function table, per-action layouts, entry format, MoneyType values, rank table, and the FrostEmu file map
- ALL_PACKET_STRUCTURES_6609.txt replaces the sparse 2064 stub with a full spec: all reversed entry points, per-action offsets, list entry stride, QueryRemainingSilver slot layout, rank values
- systems.md rewrites the Nobility bullet to point at NobilityBoard, the Interlocked donation shadow, the Volatile snapshot, and the WorldTask-driven Tick cadence
- database.md notes the new DBNobility column shape in the repository table
- tasks.md adds NobilityBoard.Tick to the WorldTask row so the sort pass appears in the canonical periodic-task inventory
- TODO.md checks off Nobility under the Systems list
docs: add warden_server build and deploy procedure to ciphers doc
- New 'Building libwarden_server from source' section covering layout, fresh-clone submodule init, Linux build steps, Windows preset, deploy refresh script, and a when-new-source-drops playbook
- Gotchas section documents the CPU instruction mismatch trap, Ubuntu non-PIC static archive, CMake not stripping Release debug info, and the --recursive submodule init footgun
chore: vendor libsodium via in-tree submodule for cross-platform builds
- Add warden_server/external/libsodium as a git submodule pointing at the CMake wrapper repo (pulls libsodium source as its own nested submodule)
- Rewrite warden_server/cmake/sodium.cmake to add_subdirectory the wrapper instead of depending on a system install or the retired neighbour submodule
- Builds libsodium in-tree alongside warden_server on every platform; no apt/vcpkg setup required on dev machines
feat: warden_server src
feat: new Warden bindings
docs: record DataPacket ownership model and lifecycle changes
- networking.md: add PacketFraming ctor overload, Ownership rules (5 rules), Outbound construction convention; rewrite Send (World) for the serialize-at-enqueue model; rewrite Receive (World) for the framing-mode branch split; drop stale IN PROGRESS / KNOWN LIMITATION warnings
- in_progress.md: mark DataPacket framing design STABILIZED with the ownership-rules summary; mark span API rollout DONE
- packets.md: add Outbound construction convention pointing at the outbound ctor + WriteBytes(proto, 4) pattern and flag the hand-rolled byte[] + inbound ctor anti-pattern
- tasks.md: update QueuedPacket shape (Owner, Wire, PacketId, PayloadLength) and describe the SendWire broadcast fast path
- entities.md: note Entity.Interaction is now an InteractionState POCO
chore: remove warden_srv submodule
- Deleted the warden_srv submodule from .gitmodules
- Clean up the repository, removing unnecessary dependencies and old un-used code
refactor: merge logon server into world process
- Convert FrostEmu.Logon from Exe to library; drop Main, icon, and standalone console loop
- Expose Start/ReloadConfig/Restart entry points on FrostEmu.Logon.Program for in-process hosting
- Add Stop() on LogonServer for graceful socket shutdown via Restart
- Add ProjectReference from FrostEmu.World to FrostEmu.Logon and wire LogonServer into Program.Main after config/DB init
- Add LogonServer property on World.Program alongside Server
- Add /logon restart and /logon reloadconfig console commands for managing the Logon listener from the World console