• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Plugin] FCNPC for open.mp - the classic FCNPC API, ported
#1
FCNPC for open.mp - the classic FCNPC API, ported
Repo: https://github.com/Mac-Andreas/open.mp-FCNPC
Download (DLL + SO + INC + test script): releases/latest



What is this
Fully Controllable NPC - the classic FCNPC FCNPC_* Pawn API, re-implemented for open.mp.

The original FCNPC is a SA-MP plugin: it drives NPCs by patching the samp03svr binary at fixed memory addresses and injecting raw RakNet packets. That cannot work on open.mp - a different, open-source binary with a proper component SDK. open.mp instead ships a built-in NPC engine (INPCComponent).

This component is a compatibility layer: it re-exposes the FCNPC_* natives on top of INPCComponent, plus the remaining ~5% of FCNPC that open.mp's NPC engine does not provide. Existing FCNPC gamemodes run largely unmodified.

Status
All 182 FCNPC_* natives are declared in FCNPC.inc and implemented: 180 ported, 2 pending. Most call open.mp's INPC / INPCComponent / IPlayer directly; the features open.mp lacks are hand-rolled in this component. Full per-native breakdown is in port-status.md.

A couple of the gaps it fills (things bare INPCComponent does not do):
  • FCNPC_GoToPlayer - open.mp's moveToPlayer defaults autoRestart = false, so the NPC walks to the player's initial spot then stops. This port forces continuous re-tracking, so the NPC keeps chasing a moving player.
  • FCNPC_SetMoveMode (MAPANDREAS / COLANDREAS) - INPC::move does no terrain grounding (NPCs float / sit on roofs). The component samples ground Z each tick via the companion plugin while the NPC moves.
Nothing falls back to SA-MP.

Install
  1. Download the latest release.
  2. Put FCNPC.dll (Windows) / FCNPC.so (Linux) into your server's components/.
  3. Put FCNPC.inc into your Pawn qawno/include/.
  4. Make sure the NPC component is enabled in config.json (ships with open.mp).

Code:
#include <open.mp>
#include <FCNPC>

public OnGameModeInit()
{
    new id = FCNPC_Create("Bot");
    FCNPC_Spawn(id, 0, 1958.33, 1343.12, 15.36);
    return 1;
}

public OnPlayerConnect(playerid)
{
    // walk every bot to the new player
    new npcs[100], count = FCNPC_GetValidArray(npcs);
    for (new i = 0; i < count; i++)
        FCNPC_GoToPlayer(npcs[i], playerid, FCNPC_MOVE_TYPE_RUN);
    return 1;
}

Test it in-game (and see exactly what is ported)
The release ships fcnpc_test.pwn (also in the repo under test/). It is two things at once: a feature test that drives every category of the API live, and a showcase of what this port adds over the bare open.mp engine - so you can verify, in-game, the parts of FCNPC that INPCComponent never implemented.

Load it as a filterscript and type /fcnpc for a dialog menu:
  • Commands - spawn / walk / run / sprint / follow (chase) / aim / shoot / melee / animation / enter+exit vehicle / move-path patrol / play node / invulnerable / kill / respawn / stop all / destroy. One button per native group, run on a demo NPC in front of you.
  • Config - live tunables (move type/mode/pathfinding/speed, weapon/ammo/reloading/fighting style/accuracy, skin/health/armour, plugin update+tick rate, global ColAndreas/raycast modes) with defaults shown + restore-to-defaults.
  • Ported features (INPC vs FCNPC) - the important one. It spawns a native INPC NPC and an FCNPC NPC side by side, labelled with floating 3D text ("INPC" / "FCNPC") so you can tell them apart, and lets you fire the same action at both to compare. Every test prints three lines in chat: the intended behaviour, what bare INPC does, and what FCNPC does. Current comparisons:
    • Chase / autoRestart - INPC NPC_MoveToPlayer defaults autoRestart = false: it walks to your starting spot and stops, even as you move. FCNPC keeps re-tracking and chasing you. (This is the headline gap the port fills.)
    • Rotation - SetAngleToPlayer on the native INPC vs the FCNPC NPC, so the facing/orientation behaviour is directly comparable.
    This section is how the "remaining ~5% open.mp's NPC engine does not provide" stops being a claim and becomes something you watch happen.
  • Debug - on-screen HUD (state, health, weapon, moving, speed, distance to you).
Needs <open.mp>, <omp_npc> and <FCNPC> - no other dependencies.

Companion plugins
The collision / heightmap / surfing natives call the standalone plugins at runtime (the same companion-plugin model the original FCNPC used) - install the open.mp builds:
  • MapAndreas (heightmap Z) - Philip
  • ColAndreas (full map collision / raycasting) - Pottus, uL Chris42O, Slice
  • Streamer (dynamic objects, for FCNPC_*SurfingDynamicObject) - Incognito

Build from sourceopen.mp's Windows server is x86 and components must use the Microsoft C++ ABI. The repo includes a no-Visual-Studio cross-build (clang-cl + lld against the MSVC SDK via msvc-wine), a Windows CMake path, and a Linux .so path. CI builds FCNPC.dll + FCNPC.so and attaches them with FCNPC.inc to every tagged release.

Credits
  • Original FCNPC: OrMisicL (2013-2015), ziggi (2016-2024).
  • open.mp NPC engine (INPCComponent): the open.mp team.
  • open.mp port: Xyranaut.
  • Companion plugins: MapAndreas (Philip), ColAndreas (Pottus, uL Chris42O, Slice), Streamer (Incognito).


Bug reports / PRs welcome on the repo. Tested against open.mp 1.5.x.
Xyranaut
Founder & Developer
Mac Andreas

Open Source Projects:
  • Using a MacBook with Apple Silicon? Play open.mp natively on macOS. Get it here
  • Need to host an open.mp server on macOS? Run open.mp servers natively on Apple Silicon. Get it here
  • Need Windows server compatibility on macOS? Run open.mp through Wine32 or CrossOver. Get it here
  • Need a Pawn IDE for macOS? Qawno brings the classic experience to Mac. Get it here
  • Coding in VS Code? Open Pawn provides modern Pawn tooling. Get it here
  • Need a modern command processor? omp-cmd simplifies open.mp development. Get it here
  • Upgrade your MySQL with omp-MySQL: TLS, Argon2id and prepared statements. Get it here
  • Migrating an FCNPC server? omp-fcnpc Adapter helps bring servers to open.mp. Get it here
  • Is San Andreas Multiplayer dead? Check the live stats and previous trends on the dashboard Open Dashboard

Looking for Beta Testers for my open.mp Mac project! [Apply here]
  • Must have MacBook Air M1 (Base: 8C CPU, 7C GPU, 8GB Ram) or above with Wine32 or Crossover
  • Experience in plugin development, scripting and debugging, using crossover and navigating Wine32
  • European Region preferred - for low latency testing (UK best)
  • Experience in using AI applications and analytics to understand behaviour patterns collected by telementary data.

Quote:
~ "Talent will have to deal with the world where writing code will not be the goal. It will be actually making AI work."
Away
  Reply
#2
i love you
  Reply
#3
I installed it, used the code im using from my samp 0.3.7 server, and the NPC are not walking they are just teleporting. Do You know what could be causing this issue?
  Reply


Forum Jump: