benilla-editor

A content editor for 1.12.1 servers on top of benilla's world engine. Content is authored over the player's own install and exported as vMaNGOS migrations. Nothing from the install is ever committed or written to.

Layout

Crate What
editor-project The project model: targets, reserved id ranges, spawns, the last-export baseline. No Bevy.
editor-vmangos Pending changes to one vMaNGOS world migration, in the core's own template. No Bevy.
editor-cli benilla-editor-cli new / check / export, for CI and the release pipeline.
editor-app benilla-editor, the window: benilla's WorldPlugins, a free camera, placement, preview.

benilla is a sibling checkout (../benilla) at the commit in BENILLA_REV. The app's build fails against any other commit: benilla promises no stable API, so moving the pin is a change of its own (BENILLA_PIN_ANY=1 builds anyway, to try one).

Running

# A project with a guid range the server owner has reserved for it.
cargo run -p editor-cli -- new camp.json --vmangos-rev <core commit> \
    --guid-first 9000000 --guid-last 9000999

# Place spawns: entry is creature_template.entry, display a CreatureDisplayInfo id to preview.
WOW_DATA=<path to WoW/Data> cargo run -p editor-app -- camp.json --entry 197 --display 1430

# What would be exported, then write the migration into the server repository.
cargo run -p editor-cli -- check camp.json
cargo run -p editor-cli -- export camp.json --out ../core/sql/migrations

An export writes only what changed since the last one, records the migration and its SHA-256 in the project, and refuses to overwrite a migration file. Re-exporting an unchanged project writes nothing.

The migration

The core's world tables are MyISAM, which cannot roll back. So every check runs before the migrations row and the first write, and a failed check SIGNALs out with nothing written: a new guid must be free; an updated or deleted row must still have the guid, entry and map the last export wrote; a deleted spawn must have no creature_addon, creature_movement, creature_linking, pool_creature or game_event_creature row.

R0 acceptance

The run that closes R0: a spawn appears on the server at the spot and facing the editor shows.

  1. new, then in the editor place one spawn with a plain creature display (not a humanoid NPC) on terrain, one on a WMO floor (a bridge or an upper storey), turn each to a distinct facing, Ctrl+S.
  2. export into a test server's sql/migrations, apply it, restart or .reload as the core needs.
  3. In the client: .go xyz with the line the editor's status shows for each spawn. The creature stands at the editor's position and faces the editor's arrow. Record .gps next to the editor's numbers.
  4. Apply the same file again: nothing changes (the migrations row).
  5. Move one spawn, delete the other, export, apply: one row updated, one gone.

Not yet

Humanoid NPC preview (CreatureDisplayInfoExtra: the character geoset and equipment pipeline is private to benilla-app), reading the world database (entry and display come from the command line for now), animation, and everything after R1.

S
Description
No description provided
Readme 770 KiB
Languages
Rust 99%
PowerShell 1%