Theme
wildm_net plugin
plugins\wildm_net\wildm_net.asi is the WildM network client. Source: forks/gamexueren/plugins/wildm_net/ — wildm_net.c (game side) and wildm_proto.h (everything testable outside the game: JSON parsing, message formats, phase logic), with unit tests in tests/test_proto.c. GPL-3.0, derived from GRW ScriptHook.
It declares SH_REQUIRES_API(2) (it uses the shared hook layer, ShHookAdd).
What it does
- Reads
wildm_connect.jsonnext to the framework DLL (ShFrameworkDir()). Without it, it does nothing and checks again every 5 s. - Writes
wildm_status.jsonin the same folder about once a second, atomically — see the contract. - Connects over TCP to
server.host:server.gamePort(non-blocking, 5 s connect timeout), sendshello, thenposat 10 Hz while the player position is readable; readswelcome,playersanderror. Reconnects automatically after 1 s, 2 s, then 5 s. - Declares itself blacklisted in Ghost War and Mercenaries (
ShPluginBlacklist). When such a mode is detected it closes the connection, stops the outbound filter, and reportsphase: "error"; when an allowed mode returns, it reconnects. - Optionally (off by default) filters the game's outbound connections — see below.
The main loop runs on fixed absolute deadlines (100 ms tick) so the 10 Hz rate does not drift with the Windows timer granularity.
Remote players are received, not shown yet
The plugin keeps the last players list it received (up to 64 players), and the count is reported in wildm_status.json, but the current version does not display other players in the world. Showing remote players is not implemented yet.
wildm_net.ini
Installed as plugins\wildm_net\wildm_net.ini.
ini
[status]
; interval for writing wildm_status.json (ms, minimum 250)
interval_ms=1000
[net]
; position send rate to the server (1 to 30 Hz)
pos_hz=10
; EXPERIMENTAL, disabled by default (see below)
restrict_outbound=0
; extra addresses or host names allowed, comma separated
allow=Settings survive updates
The launcher copies .ini files from the build only if they do not exist yet, so your changes to wildm_net.ini are kept when the client is updated. (The comment at the top of the shipped file says it is replaced at each install; the launcher's behaviour is the one described here.)
restrict_outbound (experimental)
With restrict_outbound=1, during a WildM session the plugin hooks connect, WSAConnect and ConnectEx inside GRW.exe and only lets outbound connections through to the WildM server, localhost (Ubisoft Connect talks to the game locally) and the hosts listed in allow=. Refused connections are logged in logs\wildm_net.log. No Windows setting, firewall rule or system file is changed. It is paused in Ghost War / Mercenaries.
Logs
logs\wildm_net.log (through ShLogPath, i.e. next to the framework DLL): start-up line with the framework version, the session read from wildm_connect.json, connection attempts and errors, PvP-mode pauses, filter state.
Tests
build_wildm.ps1 compiles and runs tests/test_proto.c at the end of every client build and fails the build if a test fails. The tests cover parsing wildm_connect.json (BOM, escapes, missing fields), server messages, the hello / pos formats, the phase logic and the status file format.