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?
a_npc Include in Gamemode einfügen
- Rocky--BANNED
- Geschlossen
- Erledigt
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
-
-
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 -
Naja. Da ich aber auch die anderen Funktionen aus der a_samp Include brauche, funktioniert das nicht. Ich brauche da sowas wie IsPlayerInVehicle etc.
-
Ja, das ist ja schon in a_samp drinnen.
-
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.
-
-
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
-
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.
-
Wie soll den der Bot auf KEY_JUMP drücken o.O?
-
//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 ändernWie soll den der Bot auf KEY_JUMP drücken o.O?
Mit FCNPC wäre das z.B. möglich: FCNPC_SetKeysmfg.
-
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.//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
Zitaterror 017: undefined symbol "busa"
Bin gerade etwas verwirrt. -
Ja, tut mir Leid
Mein Fehler, das geht ja auch nicht, das steht ja alles in der a_players.inc
Nutze einfach CallRemoteFunction
//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.
-
Nutze einfach CallRemoteFunction
Okay. Bekomme zwar jetzt keine fehler mehr. Aber funktionieren tut das dennoch nicht.
Aber mal davon ab...
Was zum Geier ist das??
@pR();@pR() -
Aber funktionieren tut das dennoch nicht.
Sollte aber...dann mach doch n print-Debug und schau, wieso nicht@pR();@pR()
Nichts anderes als:
forward pR();
public pR() {}
nur mit pointern ausgedrückt
mfg.
-
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 nurZitat[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.
-
Okay, dann mach es mal so:
Danke dir. Mit der richtigen Taste funktioniert alles so wie es soll. -
breadfish.de
Hat das Thema geschlossen.