Skip to content

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 ​

  1. Reads wildm_connect.json next to the framework DLL (ShFrameworkDir()). Without it, it does nothing and checks again every 5 s.
  2. Writes wildm_status.json in the same folder about once a second, atomically — see the contract.
  3. Connects over TCP to server.host:server.gamePort (non-blocking, 5 s connect timeout), sends hello, then pos at 10 Hz while the player position is readable; reads welcome, players and error. Reconnects automatically after 1 s, 2 s, then 5 s.
  4. Declares itself blacklisted in Ghost War and Mercenaries (ShPluginBlacklist). When such a mode is detected it closes the connection, stops the outbound filter, and reports phase: "error"; when an allowed mode returns, it reconnects.
  5. 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.

WildM is an independent community project. It is not affiliated with or endorsed by Ubisoft. Ghost Recon Wildlands is a trademark of Ubisoft Entertainment.