NPC Bot

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    ich bin derzeit daran meinen eigenen Server auf die Beine zu stellen und möchte dazu auch Bots integrieren.
    Soweit scheint alles gut funktioniert zu haben. Habe Ingame einen Record aufgenommen, dass in 'Zeug' in die notwendigen Ordner auf meinen Server geladen und mein Gamemode angepasst.


    Wenn ich allerdings Online gehe, ist kein Bot zu sehen - in den Logs habe ich auch keinen etwaige Einträge gefunden, das mir verrät, das mein Bot gejoint hätte...


    In meinem nächsten Schritt zu Fehlersuche, habe ich einen Offline-Server gestartet und wie ich dann in den Logs dort sehen konnte, ist mein Bot dort gejoint.


    Das Problem ist wie gesagt, dass er das Online nicht macht.
    Die Server.cfg ist so eingestellt, dass 10 Bots joinen könnten.



    Habt ihr vielleicht eine Idee, was die Fehlerursache sein könnte?
    Wenn ihr 'Codeschnipsel' von meinem Gamemode zur Ursachenerforschung brauchen könntet, sagt bescheid.


    Freue mich auf rege Teilnahme, um das Problem lösen zu können.



    Grüße


    Tom

  • Mein Fehler.
    Habe mich da wohl etwas unpassend ausgedrückt.


    Wenn ich die "Samp-Server.exe" ausführe, die sich in meinen Ordner befindet bzw. die sich auch im ganz normalen Server Package von sa-mp.com (Downloads) befindet.
    Ich weiß leider nicht, wie die offizielle Bezeichnung dafür ist, ich nenne das Offline-Server ... Denke das kann man auch für LANs verwenden.

  • Hast du denn mal geschaut, ob du auch alle nötigen Dateien für den Bot hast ?
    Hast du denn auch irgendwo in deinem Script ConnectNPC ?
    Wird er überhaupt nicht gespawnt ?
    Steht denn in der server_log irgendetwas, dass der Bot versucht zu Connecten zum Beispiel ?

  • Gute Morgen zusammen,


    ich habe InGame via Rcon und dem Befehl "ofrecord Beamter" den Record aufgenommen.
    Die enstandene Rec-Datei habe ich in /npcmodes/recordings abgelegt.


    Anschließend habe ich eine .pwn erstellt, die ich compiled habe und danach die .pwn und die .amx in /npcmodes/ abgelegt.



    Danach habe ich mein Gamemode angepasst.
    Hier die Auszüge, die ich bearbeitet habe.
    Habe wie gesagt nur das rauskopiert, was den NPC betrifft - Klammern sind alle richtig gesetzt. Error / Warnungen gibt es keine!




    public OnGameModeInit()

    Code
    ConnectNPC("Beamter","Beamter");



    public OnPlayerSpawn(playerid)



    public OnPlayerConnect(playerid)

    Code
    if(IsPlayerNPC(playerid))
    	{
    		gPlayerAccount[playerid] = 1;
    		gPlayerLogged[playerid] = 1;
    	}
  • Was steht denn in der Log oder im Serverfenster beim Starten deinens Gamemodes? Verbindet sich der NPC überhaupt mit dem Server?


    In welchem Codeabschnitt bei OnGameModeInit() hast du denn ConnectNPC stehen? Wir bräuchten da schon mehr. Poste doch mal deinen Callback bitte.... ansonsten prüft mit print("OK"); einfach, bis zu welchem Codeabschnitt er kommt. So mach ich das auch ;)

  • Habe gerade in den Logs reingesehen, er verbindet sich nicht - es ist nichts von einem Bot zu sehen.
    Deshalb werde ich denke ich den Log auch nicht posten, man sieht ja leider nicht viel.


    Wenn ich allerdings "samp-server.exe" starte (wie ich ihn nenne: Offline-Server) sehe ich im Serverfenster, dass dort mein Bot gejoint hat.



    //edit: Okay, kann einen Moment dauern, aber den Code bekommst du gleich.

  • Also den Bot, den ich erstellt habe, soll nur auf einem bestimmtem Punkt immer stehen bleiben - zu fuß.
    Aus diesem Grund habe ich für circa 1-2 Sekunden recorded. Länger nicht.


    Mehr Codes wie oben bereits geschrieben habe ich in meinen Gamemode leider nicht eingefügt.


  • //-----------------------------------
    // oben in deinem GM definieren
    //-----------------------------------
    #define NPC_BEAMTER 1
    new npcID[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname, "Beamter", true))
    {
    gPlayerLogged[playerid] = 1;
    //-----------------------------------
    // Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
    // Beispiel:
    npcID[playerid] = NPC_BEAMTER;
    //-----------------------------------
    SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
    SpawnPlayer(playerid);
    print("NPC Beamter ist gespawnt.");
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if (IsPlayerNPC(playerid)
    {
    if (npcID[playerid] == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
    return 1;
    }
    return 1;
    }


    Du kannst dies natürlich auch mit PlayerVars machen:

    //-----------------------------------
    // oben in deinem GM definieren
    //-----------------------------------
    #define NPC_BEAMTER 1


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid, "npcID", 0);
    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(!strcmp(botname, "Beamter", true))
    {
    gPlayerLogged[playerid] = 1;
    //-----------------------------------
    // Anmerkung: um die Verwaltung der NPC's zu vereinfachen würde ich deren playerid in eine Variable speichern
    // Beispiel:
    SetPVarInt(playerid, "npcID", NPC_BEAMTER);
    //-----------------------------------
    SetSpawnInfo(playerid, TEAM, 281, X, Y, Z, WEAPON1, W_AMMU1, WEAPON2, W_AMMU2, WEAPON3, W_AMMU3); // <-- bitte grossgeschriebenes anpassen
    SpawnPlayer(playerid);
    print("NPC Beamter ist gespawnt.");
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if (IsPlayerNPC(playerid)
    {
    if (GetPVarInt(playerid, "npcID") == NPC_BEAMTER) SetPlayerColor(playerid, TEAM_HIT_COLOR);
    return 1;
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ralf
    Link wäre nett, da ich keine Lust habe zu suchen ;) und evtl. mehr Infos wären gut


    Mr_Jones
    Da der NPC bei dir lokal spawnt, liegt es, wie in meiner PM, an deinem Server selbst. Hat die samp-npc Ausführrechte (unter Linux)? Hast du die Record Datei hochgeladen? Hast du die NPC AMX hochgeladen?

  • Schonmal einen kleinen Teilerfolg.


    Also Die Slotanzahl von 100 wurde auf 99 automatisch reduziert (kommt denk ich von dem Bot) und der Bot spawnt nun auch (also ich sehe den Bot), nur der bleibt nicht richtig stehen. Kann das nicht genau beschreiben. Er Spawnt also regelrecht immer wieder neu. Kann dir das auf meinen Server mal zeigen, wenn dir das Helfen würde. :'-)

  • Woran es genau lag, weiß ich leider nicht genau.
    Habe den Server online einmal komplett gelöscht und neu draufgeladen!


    Also der Bot Spawnt, verschwindet, spwant, verschwindet, spawnt... und das alle 0,2 Sekunden...
    Mein Rat - seh es dir vielleicht kurz an.