a_npc Include in Gamemode einfügen

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 zusammen,
    ich stehe hier gerade vor einem kleinen Problem. Ich möchte die a_npc Include in meinen Gamemode unter a_samp einfügen. Diese nimmt er aber nicht an.
    Umgekehrt geht das auch nicht. Ich möchte nämlich, dass man per Tastendruck die Aufnahme mit PauseRecordingPlayback(); pausieren kann. Da ich aber die 2 Includes nicht miteinander kombinieren kann, kann ich OnPlayerKeyStateChange nicht in verwenden.
    Hat jemand ne Idee, wie ich das dennoch umsetzen kann?

  • Ja, klar.
    So müsste das auch Funktionieren.


    Im Include
    NPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    //...
    return 1;
    }


    Im Skript
    OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    NPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
    return 1;
    }

    Versuche das mal :thumbup:

  • Ja, das ist ja schon in a_samp drinnen.


    Das ist mir schon klar.
    Aber da ich im Script NPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys); aufrufe, die mit der Funktion in der Include verbunden ist, ruft er dadurch in der Include auch die Funktionen auf, die er nicht zur Verfügung hat. Daher ja auch meine Anfangsfrage, wie ich beide Includes zusammen aufrufen kann.

  • Ich brauche da sowas wie


    In der a_npc Include gibt es die Funktion GetPlayerVehicleID, sprich man kann sich die Funktion IsPlayerInVehicle basteln:


    stock IsPlayerInVehicle(playerid,vehicleid) return (GetPlayerVehicleID(playerid) == vehicleid) ? 1 : 0;
    stock IsPlayerInAnyVehicle(playerid) return (GetPlayerVehicleID(playerid) != 0) ? 1 : 0;


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Kaliber:
    Alles schön und gut. Aber wie sieht es mit den anderen Funktionen aus?
    Vorallem, wie mache ich das, wenn ich im eigentlichen Gamemode, den Bot direkt in ein definiertes Fahrzeug setze? Ich hab vehicleid durch die Variable geändert. Diese erkennt er aber dennoch nicht an.

  • Alles schön und gut. Aber wie sieht es mit den anderen Funktionen aus?
    Vorallem, wie mache ich das, wenn ich im eigentlichen Gamemode, den Bot direkt in ein definiertes Fahrzeug setze? Ich hab vehicleid durch die Variable geändert. Diese erkennt er aber dennoch nicht an.


    Im Gamemode, musst du ohne a_npc arbeiten.


    Allerdings ist das doch kein Problem, wenn du die ID vom Bot hast, kannst du doch PutPlayerInVehicle etc...nutzen :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Im Gamemode, musst du ohne a_npc arbeiten.


    Ja das weiss ich. Pass auf. Ich erkläre es dir eben etwas genauer.


    public NPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_JUMP && IsPlayerInVehicle(playerid, auto))
    {
    PauseRecordingPlayback();
    return 1;
    }
    return 1;
    }
    So sieht das gerade aus. Ich möchte hat, dass diese Funktion nur aufrufbar ist, wenn der Bot sich in diesem Fahrzeug befindet.
    Dieses Fahrzeug habe ich bereits im eigentlichen Gamemode mit auto deklariert. Der Bot sitzt auch drin und führt seine Aktion aus. Nun möchte ich als Beifahrer eine Taste drücken wodurch die Aufnahme von dem Bot gestoppt wird.


    //Und da ich ja PauseRecordingPlayback(); nicht im eigentlichen Gamemode aufrufen kann, da ich die Include nicht einfach so verwenden kann, brauche ich dieses ja in der eigentlichen Include und in der PWN vom Bot.

  • //Und da ich ja PauseRecordingPlayback(); nicht im eigentlichen Gamemode aufrufen kann, da ich die Include nicht einfach so verwenden kann, brauche ich dieses ja in der eigentlichen Include und in der PWN vom Bot.


    Arbeite mit PVars, CallRemoteFunction oder setproperty um einen Zugriff vom Gamemode, auf das NPC-Skript zu bekommen und das dann so zu ändern ;)


    Wie soll den der Bot auf KEY_JUMP drücken o.O?


    Mit FCNPC wäre das z.B. möglich: FCNPC_SetKeys


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Wie soll den der Bot auf KEY_JUMP drücken o.O?


    Bitte erst richtig lesen.

    Nun möchte ich als Beifahrer eine Taste drücken


    Kaliber:
    Ja danke. Das hilft mir jetzt auch weiter. :rolleyes:


    //Nachtrag
    Ich habe das jetzt mit PVar versucht. Ich habe im eigentlichen Script
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetPVarInt(playerid, "busa",vehicle);
    eingetragen und im Include
    public NPC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    if(GetPVarInt(vehicle, "busa"))
    {
    if(newkeys == KEY_JUMP && IsPlayerInVehicle(playerid, busa))
    {
    PauseRecordingPlayback();
    }
    }
    return 1;
    }


    Trotzdem sagt er mir noch in der a_npc

    Zitat

    error 017: undefined symbol "busa"


    Bin gerade etwas verwirrt. :wacko:

  • Ja, tut mir Leid ^^


    Mein Fehler, das geht ja auch nicht, das steht ja alles in der a_players.inc :D


    Nutze einfach CallRemoteFunction :rolleyes:


    //Im Gamemode:
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_JUMP && IsPlayerInVehicle(playerid, auto)) return CallRemoteFunction("@pR","");
    return 1;
    }


    //Im NPC-Skript
    @pR();@pR() return PauseRecordingPlayback();


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • wieso nicht


    Weil der die Funktion in der NPC Datei nicht aufruft/ausführt.
    Hab ein print hier
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_JUMP && IsPlayerInVehicle(playerid, busa))
    {
    print("Taste wurde gedrückt!");
    return CallRemoteFunction("@pR","");
    }
    return 1;
    }
    und einen hier
    @pR();
    @pR()
    {
    print("PauseRecordingPlayback wird ausgeführt");
    return PauseRecordingPlayback();
    }
    Aber aufgerufen wird nur

    Zitat

    [15:13:52] Taste wurde gedrückt!
    [15:14:02] [part] Rocky has left the server (10:1)

  • nicht aufruft/ausführt.


    Okay, dann mach es mal so:


    //Im Gamemode
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_JUMP && IsPlayerInVehicle(playerid, busa)) return file_set_content("Bot.txt","1");
    return 1;
    }


    //Im Npc-Skript
    //Irgendwo, wo das PlayBack gestartet wird:
    SetTimer("@Check",499,1);


    @Check();@Check() {
    if(!strval(file_get_content("Bot.txt"))) return 0;
    PauseRecordingPlayback();
    return file_set_content("Bot.txt","0");
    }


    stock file_set_content(const path[], const string[]) {
    new File:f = fopen(path,io_write);
    return fwrite(f,string),fclose(f);
    }


    stock file_get_content(const path[]) {
    new e_e[4]="0";
    if(!fexist(path)) return e_e;
    new File:f = fopen(path,io_read),string[4];
    return fread(f,string),fclose(f),string;
    }


    Probier es mal so, aus dem Kopf geschrieben, sollte aber klappen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    3 Mal editiert, zuletzt von Kaliber ()