Samp 0.3 Bots Erstellen [überarbeitet]

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
  • *3.8.10 - Update, Tutorial komplett neu geschrieben und um "Bots zu Fuß" erweitert


    Inhalt:

    • Was sind Bots?
    • Was wird für die Erstellung von Bots benötigt?
    • 1. Bots in Fahrzeugen
    • 2. Bots zu Fuß


    Was Sind Bots?
    Bots (auch NPC oder KI genannt) sind "Spieler", die Aktionen ausführen, die zuvor aufgenommen wurden.
    Nicht-Spieler-Charakter (Wikipedia)
    Bot (Wikipedia)



    Was wird für die Erstellung von Bots benötigt?

    • SAMP 0.3 Client
    • SAMP Server (egal ob Windows oder Linux)
    • Mindestens Basiswissen (!!)




    Bots in Fahrzeugen
    (Der Fahrzeugbot wird hier BulletLS genannt, ersetzt BulletLS einfach überall gegen euren Botnamen zB Taxi)

    • Starte den Homeserver
    • Logge dich als Rcon Admin ein (/rcon login PASSWORT)
    • Lade den Filterscript für das Aufnehmen von Bots (/rcon loadfs npc_record)
    • Setzte dich in ein Fahrzeug (Ich empfehle das Fahrzeug das Später von den Bot gefahren wird!)
    • Beginne die Aufnahme (/vrecord BulletLS) BulletLS steht hier für den Aufnahmenamen.
    • Fahre bzw fliege die Strecke die der Bot dann zurücklegen soll
    • Aufnahme beenden (/stoprecord)
    • Gta schließen oder minimieren
    • Sampserver schließen
    • BulletLS aus den Scriptfiles ordner ausschneiden und in den Ordner npcmodes/recordings einfügen
    • Nun öffnet ihr Pawno und klickt oben auf "File-->new"
    • In dieser neuen Datei wird nun dieser Code für den Bot benötigt:

      #include "a_npc"//Baut die Include "a_npc" ein
      #define RECORDING "BulletLS"// BulletLS gegen euren Aufnahmenamen ersetzen!


      main()
      {
      }


      public OnRecordingPlaybackEnd()
      {
      StartRecordingPlayback(1, RECORDING);//1 = Aufnahmetyp - Fahrzeug, Recording = Der oben definierte Aufnahmename
      }


      public OnNPCEnterVehicle(vehicleid, seatid)
      {
      StartRecordingPlayback(1, RECORDING);//1 = Aufnahmetyp - Fahrzeug, Recording = Der oben definierte Aufnahmename
      }
      public OnNPCExitVehicle()
      {
      StopRecordingPlayback();
      }

    • Datei im Ordner "npcmodes" unter den gleichen Name speichern wie die Aufnahme hat. (Hier: BulletLS)
    • Datei Kompilieren (Wichtig! Erst NACH dem Speichern Kompilieren!)
    • Nun öffnet ihr den Gamemode in den der Bot eingebaut sein soll
    • Hier wird der Bot auf den Server verbunden, sobald der Server gestartet wird, das heißt, wir müssen den Bot unter OnGameModeInit verbinden lassen dazu wird folgendes gemacht:

      ConnectNPC("BulletLS","BulletLS");//Das erste BulletLS steht für den Namen hier im Script, das 2te für den Namen der .rec Datei
      car_BulletLS = CreateVehicle(541, 1000.0,1000.0, 1000.0, 0.0, 10, 1, -1);//car_BulletLS ist der Name des Autos mit dem der Bot fahrt, Die Positionen von CreateVehicle sind egal,
    • Nun müssen wir noch den Autonamen erstellen (oben im Script zu den anderen new's hinzufügen): new car_BulletLS;
    • Jetzt muss der Bot die Rechte bekommen, das er verbinden darf:
      public OnPlayerConnect(playerid)
      {
      //Hier Aufpassen! Der Bot wird hier eingeloggt
      //In jeden Login&Register Script wird entweder in OnPlayerconnect oder erst später überprüft ob bereits ein Account mit diesen Namen besteht oder nicht,
      //deswegen unbedingt die Bedingungen bei diesen Scripts anpassen!
      if(IsPlayerNPC(playerid))
      {
      new botname[MAX_PLAYER_NAME];
      GetPlayerName(playerid, botname, sizeof(botname));
      if(!strcmp(botname, "BulletLS", true))
      {
      gPlayerLogged=1;//Der Bot ist gleich eingeloggt (Anpassen!)
      }
      }
      ......
    • So, jetzt muss der Bot noch spawnen:
      public OnPlayerSpawn(playerid)
      {
      if(IsPlayerNPC(playerid))
      {
      new botname[MAX_PLAYER_NAME];
      GetPlayerName(playerid, botname, sizeof(botname));
      if(!strcmp(botname, "BulletLS", true))
      {
      pCarLic[playerid]=1;//Hier muss der Führerschein gegeben werden! (Anpassen!)
      PutPlayerInVehicle(playerid, car_BulletLS, 0);//car_BulletLS = das Fahrzeug was wir oben erstellt haben, 0 = der Fahrersitz
      }
      }
      ......
    • Nicht vergessen - Login & Register System anpassen!!
    • Kompilieren
    • in der server.cfg die anzahl der bots (maxnpc) anpassen
    • Das war es auch schon....


    Bots zu Fuß erstellen
    (Dieser Bot wird hier "Zivi" genannt)

    • Starte den Homeserver
    • Logge dich als Rcon Admin ein (/rcon login PASSWORT)
    • Lade den Filterscript für das Aufnehmen von Bots (/rcon loadfs npc_record)
    • Starte jetzt die Aufnahme (/ofrecord Zivi) - Zivi steht für den Botnamen
    • Führe nun die Aktionen aus die der Bot machen soll (gehen, ......)
    • Sobald du fertig bist, beende die Aufnahme (/stoprecord)
    • Gta schließen oder minimieren
    • Sampserver schließen
    • "Zivi" aus den Scriptfiles ordner ausschneiden und in den Ordner npcmodes/recordings einfügen
    • Nun öffnet ihr Pawno und klickt oben auf "File-->new"
    • In dieser neuen Datei wird nun dieser Code für den Bot benötigt:

      #include <a_npc>
      #define RECORDING "Zivi"// Zivi gegen euren Aufnahmenamen ersetzen!


      main()
      {
      }


      public OnRecordingPlaybackEnd()
      {
      StartRecordingPlayback(2, RECORDING);//2 = Aufnahmetyp - Zu fuß, Recording = Der oben definierte Aufnahmename
      }


      public OnNPCExitVehicle()
      {
      StartRecordingPlayback(2, RECORDING);//2 = Aufnahmetyp - Zu fuß, Recording = Der oben definierte Aufnahmename
      }


      public OnNPCSpawn()
      {
      StartRecordingPlayback(2, RECORDING);//2 = Aufnahmetyp - Zu fuß, Recording = Der oben definierte Aufnahmename
      }

    • Datei im Ordner "npcmodes" unter den gleichen Name speichern wie die Aufnahme hat. (Hier: Zivi)
    • Datei Kompilieren (Wichtig! Erst NACH dem Speichern Kompilieren!)
    • Nun öffnet ihr den Gamemode in den der Bot eingebaut sein soll
    • Hier
      wird der Bot auf den Server verbunden, sobald der Server gestartet
      wird, das heißt, wir müssen den Bot unter OnGameModeInit verbinden
      lassen dazu wird folgendes gemacht:

      ConnectNPC("Zivi","Zivi");//Das erste "Zivi" steht für den Namen hier im Script, das 2te für den Namen der .rec Datei
    • Jetzt muss der Bot die Rechte bekommen, das er verbinden darf:
      public OnPlayerConnect(playerid)
      {
      //Hier Aufpassen! Der Bot wird hier eingeloggt


      //In jeden Login&Register Script wird entweder in
      OnPlayerconnect oder erst später überprüft ob bereits ein Account mit
      diesen Namen besteht oder nicht,
      //deswegen unbedingt die Bedingungen bei diesen Scripts anpassen!
      if(IsPlayerNPC(playerid))
      {
      new botname[MAX_PLAYER_NAME];
      GetPlayerName(playerid, botname, sizeof(botname));
      if(!strcmp(botname, "Zivi", true))
      {
      gPlayerLogged=1;//Der Bot ist gleich eingeloggt (Anpassen!)
      }
      }
      ......

    • So, jetzt muss der Bot noch spawnen:
      public OnPlayerSpawn(playerid)
      {
      if(IsPlayerNPC(playerid))
      {
      new botname[MAX_PLAYER_NAME];
      GetPlayerName(playerid, botname, sizeof(botname));
      if(!strcmp(botname, "Zivi", true))
      {
      //Hier den Bot sachen geben, wie Waffen oder Ähnliches
      }
      }
      ......
    • Nicht vergessen - Login & Register System anpassen
    • Kompilieren
    • in der server.cfg die anzahl der bots (maxnpc) anpassen
    • Fertig


    Leider sind beim einfügen die Klammern verrutscht, bitte selbst wieder richtig einrücken :D

    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

    11 Mal editiert, zuletzt von Toby ()

  • das hab ich vorhin selbst gemacht -.-


    credits an samp für die bot funktion oder was meinst du? xD

    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

  • bekomme diesen error:


    C:\Dokumente und Einstellungen\Dominik\Desktop\samp 0.3 server\gamemodes\grandlarc.pwn(13) : fatal error 100: cannot read from file: "a_npc"


    aber hab die include drin oO

    [align=center]

  • könnte sein, das du mit einen anderen pawno compilierst, zB du hast die include in script1/pawno/includes reingegeben, aber compilierst mit script2/pawno.exe


    @ bl4ckdice, ist es aber nicht

    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

  • @ Toby mahr frage. Wenn ich Stope Sprich. Mit mein auto Steht bleibe. Bleibt er dann auch da stehn?

  • gutes tut 10/10
    aber iwie geht das bei mir nicht..der bot steht nur dumm in der gegend rum 8|

  • blitz, nein, NUR wenn du verbindung verlierst, oder mit dem cmd es beendest, ich würde immer cmd nehmen!


    sampi, hast du "ConnectNPC("CARBOT","CARBOT");" gemacht? und sicher die richtige include?

    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

  • Bei mir ist alles richtig kein Error nix und trozdem taucht der Bot nicht auf :(
    #include <a_npc>



    #define RECORDING "CARBOT"


    #define RECORDING_TYPE 1


    main()
    {
    }


    public OnRecordingPlaybackEnd()
    StartRecordingPlayback(RECORDING_TYPE, RECORDING);


    public OnNPCEnterVehicle(vehicleid, seatid)
    StartRecordingPlayback(RECORDING_TYPE, RECORDING);


    public OnNPCExitVehicle()
    StopRecordingPlayback();




    #include <a_samp>
    #include <a_npc>


    new CARBOTCAR; Bot.pwn(48) :// warning 203: symbol is never used: "CARBOTCAR"
    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript Filterscript by Your Name here");
    print("--------------------------------------\n");



    return 1;
    }


    ConnectNPC("CARBOT","CARBOT");
    CARBOTCAR = CreateVehicle(496,1849.3740,-1313.0804,13.1078, 180.4862, 86, 86, -1);



    public OnPlayerSpawn(playerid)


    if(IsPlayerNPC(playerid))
    {
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname));
    if(!strcmp(npcname, "CARBOTCAR", true))
    {
    PutPlayerInVehicle(playerid, CARBOTCAR, 0);
    }
    if(!strcmp(npcname, "CARBOT", true))
    {
    PutPlayerInVehicle(playerid, CARBOTCAR, 0);
    }
    }





    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    #endif

    Meine Werke


    Minecraft Signatur Buggt



    Sowas wie 10/10 gibt es nicht. Ausser bei Satan

    2 Mal editiert, zuletzt von Fabian95qw ()

  • toby : ich wette mit dir das ist das wie drüben nur auf deutsch mit ein paar eigen eingriffe. so schnell und so ähnlich kann eig kein zufall sein.aber dennoch gute arbeit ich habs anderst gemacht. aber :D so ist besser sogar.


    10/10

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • @ fabian95, ich denke, onplayerspawn wird da nicht so ganz passen, probiers ma so (PS: ich empfehle es dir, in den gamemode zu machen, wo du alles andere hast, ist übersichtlicher meiner meinung, aber hier mal ausgebessert dein onplayerspawn



    public OnPlayerSpawn(playerid)
    {
    if(IsPlayerNPC(playerid))
    {
    new NPCname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, NPCname, sizeof(NPCname));
    if(!strcmp(npcname, "CARBOT", true))
    {
    PutPlayerInVehicle(playerid, CARBOTCAR, 0);
    }
    }
    return 1;
    }



    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

  • du hast nen fehler ^^


    if(IsPlayerNPC(playerid))
    {
    new NPCname[MAX_PLAYER_NAME]; //NPCname ist hier groß
    GetPlayerName(playerid, NPCname, sizeof(NPCname));
    if(!strcmp(npcname, "Pilot", true)) // und hier ist npcname klein geschrieben ^^
    {
    PutPlayerInVehicle(playerid, flieger, 0);
    }
    }
    groß und kleinschreibung nicht beachtet bzw villeicht nicht aufgefallen ^^


    /edit
    und bei mir verlassen die bots immer gleich wieder den server -.-

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

    Einmal editiert, zuletzt von PaddyBoy ()

  • wow. erster efolgt. npc crasht net =D. nur will er nicht ins auto =(. woran kann das liegen?



    public OnPlayerSpawn(playerid)
    {
    ClearAnimations(playerid);
    if(IsPlayerNPC(playerid))
    {
    new NPCname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, NPCname, sizeof(NPCname));
    else if(!strcmp(NPCname, "BusBot1", true))
    {
    PutPlayerInVehicle(playerid, NPCAutos[0], 0);
    SetPlayerSkin(playerid, 29);
    }
    return 1;
    }
    return 1;
    }

  • nochmal editiert xD

  • verlassen sie bei dir auch gleich wieder den Server ???


    Zitat

    [18:55:16] [npc:join] Cop has joined the server (1:127.0.0.1)
    [18:55:17] PaddyBoy has logged in.
    [18:55:18] [npc:part] Cop has left the server (1:2)

    aus der log


    /edit die pwn datei ^^


    //am header


    #include <a_npc>


    new CopCar;


    //unter ongamemodeinit
    ConnectNPC("Cop","Cop");
    CopCar = CreateVehicle(596, 1535.4481,-1654.0950,13.2313, 7.0, 0, 1, -1);


    //unter onplayerspawn
    if(IsPlayerNPC(playerid))
    {
    new NPCname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, NPCname, sizeof(NPCname));
    if(!strcmp(NPCname, "Cop", true))
    {
    PutPlayerInVehicle(playerid, CopCar, 0);
    }
    }

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

    Einmal editiert, zuletzt von PaddyBoy ()

  • also ich hab jetzt 2 bots. einer crasht dann sofort. der andere bleibt (endlich mal 1 erfolgt xD) aber der will net ins auto