Alles klar, vielen Dank für diese Information
Sonst hätte ich mir wahrscheinlich noch 2 weitere Tage den Kopf darüber zerbrochen.
Viele Grüße
Gimbo
Alles klar, vielen Dank für diese Information
Sonst hätte ich mir wahrscheinlich noch 2 weitere Tage den Kopf darüber zerbrochen.
Viele Grüße
Gimbo
Wenn du es vor-definierst, dann kannst du es so machen:
new test[][][testEnum] = { //hier ist der Fehler. {1, "NULL", 0}, {2, "NULL", 0}, {3, "NULL", 0}, {4, "NULL", 0}, {5, "NULL", 0}};
Alternativ so:
new test[5][3][testEnum] = { //hier ist der Fehler. {1, "NULL", 0}, {2, "NULL", 0}, {3, "NULL", 0}, {4, "NULL", 0}, {5, "NULL", 0}};
Das ist aber beides 1:1 identisch.
Wenn ich es für "MAX_PLAYERS" definieren möchte, wo füge ich das dann ein? Ich habe versucht jeweils in das erste oder zweite Array einzufügen.
Viele Grüße
Ich hab bereits alle Recordings fertig und möchte auch meine Version benutzen.
Das ist soz. die letzte Abfrage die ich brauche.
Viele Grüße
Gimbo
Guten Tag,
ich kriege folgendes Problem: error 052: multi-dimensional arrays must be fully initialized
Habe schon alles mögliche durchprobiert. Kennt jemand die Lösung?
enum testEnum{
ID,
Name[50],
Gewicht
}
new test[MAX_PLAYERS][5][testEnum] = { //hier ist der Fehler.
{1, "NULL", 0},
{2, "NULL", 0},
{3, "NULL", 0},
{4, "NULL", 0},
{5, "NULL", 0}
};
Alles anzeigen
Viele Grüße
Gimbo
stock GetVehicleNPCDriver(playerid){ new vID = GetPlayerVehicleID(playerid), string[64]; for(new i = 0; i < MAX_NPCS; i++) { if(!IsPlayerConnected(i) && !IsPlayerNPC(i)) continue; if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vID) { format(string, sizeof(string), "NPC %i sitzt als Fahrer in deinem Fahrzeug!", i); SendClientMessage(playerid, -1, string); return i; } } return -1;}
Beispiel:
ocmd:drive(playerid, params[]){ if(!IsPlayerInVehicle(playerid)) return SendClientMessage(playerid, -1, "Du musst in einem Fahrzeug sitzen."); if(GetPlayerState(i) == PLAYER_STATE_DRIVER) return SendClientMessage(playerid, -1, "Du darfst nicht der Fahrer von dem Fahrzeug sein."); new GetVehicleNPCDriver(playerid); if(npcdriver == -1) return SendClientMessage(playerid, -1, "Dein Fahrzeug hat keinen NPC-Fahrer."); // "npcdriver" wäre jetzt dann die NPC ID, mit der kannst du weiterarbeiten return 1;}
Have fun
@Jeffry, @m4a_X: Danke für eure Antworten, jedoch ist das nicht genau das was ich möchte.
Ich möchte nicht in meinem Gamemode abfragen ob ein NPC in meinem Fahrzeug sitzt, sondern in der NPC Datei abfagen ob ein Spieler in dem Fahrzeug des NPC sitzt.
Kurz zur Verständnis: Ich habe Chauffeure auf meinem Server, die auf schriftliches Kommando los fahren. Aber nicht ein Command wie z.B.: '/go' sondern bei einer Textnachricht wie z.B.: "Fahr los".
Wenn die Chauffeure jetzt aber alle nebeneinander stehen und ein Spieler davor "Fahr los" schreibt, fahren alle los. Deshalb muss der NPC wissen, ob der Spieler der gerade "Fahr los" geschrieben hat, in seinem Fahrzeug sitzt, bevor er lös fährt.
new Float:x, Float: y, Float:z;
GetMyPos(x, y, z);
if(!IsPlayerInRangeOfPoint(playerid, 4, x, y, z)) return 1; // hier hab ich mal als Alternativlösung abgefragt ob er 4 Meter weit entfernt ist von dem jeweiligen Bot.
if(strfind(text, "fahr los", true) != -1) {
if(IsPlayerInRangeOfPoint(playerid, 50, 488.0621,-1500.0964,21.9101) && BotIsRecording == 0) {
StartPlayback("record");
}
}
Viele Grüße
Gimbo
Guten Tag,
ich habe mehrere NPCs auf meinem Server und man kann sie auf Befehl losfahren lassen.
Das Problem ist, wenn ich in der Nähe von 2 oder mehreren NPC bin, fahren alle los. Kann ich über den NPC irgendwie abfragen ob der Spieler mit ihm zusammen im Fahrzeug sitzt?
Viele Grüße
Gimbo
Alles klar, danke für die Aufklärung
Viele Grüße
Gimbo
Ja, die eckige Klammer war ein Optikfehler, im Script hab ichs richtig.
@Tusk, so wie du es gemacht hast. Das sind doch 3 dimensionale Arrays oder so ?
Hatte mal sowas gelesen, es funktioniert wunderbar, danke dafür!
Ich hatte es davor so versucht, arr[0][array[0]]. Das funktionierte nicht, ich kann mir aber nicht erklären warum
Viele Grüße
Gimbo
Guten Tag,
ich hätte eine Frage. Und zwar, wie erstellt man Arrays in enums?
Zum Beispiel:
wie kann man nun damit arbeiten?
Ich kriege bereits beim definieren Warnings (tag mismatch):
Viele Grüße
Gimbo
Ich habe ein System erstellt, welches folgendes bewirkt:
Ein NPC wartet in einer Limousine auf dich, bis du einsteigst und ihm etwas schreibst. Dann fährt er einen Record ab. Wenn du ihm wieder etwas schreibst, fährt er den nächsten ab.
Fahren und sowas tut er ja, nur zwischen den einzelnen Strecken steht er ja und wartet bis ein Spieler etwas schreibt. In diesem Moment steht er halt neben oder auf dem Auto.
Also trifft ja genau das zu, was du sagst. Aber wie löse ich das denn am besten, dass der NPC im Auto wartet, anstatt auf dem Dach zu stehen oder sonst was?
//edit: kann sein, dass ich dich missverstanden habe. Was genau meinst du mit NOV ? Zur Klarheit: Ich möchte ja eigentlich auch, dass er nur im Fahrzeug ist.
Moin,
ich hab ein Problem mit meinem NPC, und zwar erstelle ich ihn, lasse ihn spawnen und möchte ihn dann in sein Fahrzeug rein setzen.
Irgendwie funktioniert es nicht, ich dachte der NPC wird herausgeworfen, weil er kein Führerschein hat. Jedoch funktioniert es ebenso nicht, wenn ich den NPC als Beifahrer ins Auto setze.
Mein Code:
new ChauffeurCar[1];
public OnGameModeInit() {
ChauffeurCar[0] = CreateVehicle(409, 490.8375,-1485.9340,19.6493,347.8822, 203, 203, 60);
ConnectNPC("Fahrer", "fahrer");
}
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid)) return 1;
}
public OnPlayerSpawn(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
//NPC load
if(IsPlayerNPC(playerid)) {
if(!strcmp(name, "Fahrer", true)) {
TogglePlayerControllable(playerid, 1);
SetPlayerSkin(playerid, 255);
PutPlayerInVehicle(playerid, ChauffeurCar[0], 1); //mal als Beifahrer, ohne Erfolg
}
return 1;
}
}
Alles anzeigen
Hoffe ihr könnt mir helfen.
Viele Grüße
Gimbo
Hey!
Hab es auf einem leeren Server versucht, dort hat es funktioniert und deswegen habe ich die Unterschiede zwischen meinem Gamemode und einem leeren neuen Server unter die Lupe genommen.
Ein leerer Server hat die Funktion OnPlayerText gar nicht aufgelistet weshalb ich meine Funktion auch direkt ausgeklammert habe.
Den selben Bot, wie auf dem neuen Server 1:1 übernommen und getestet - keine Wirkung. Funktionierte immer noch nicht.
Ich habe mich gefragt, was meinen Server mit einem normalen unterscheidet und habe bei OnGameModeInit nachgeforscht.
Habe nun gemerkt das ich den LimitGlobalChatRadius auf 0 gesetzt hatte (ich kannte die Funktion damals nicht und war so dumm und hatte sie auf 0 gesetzt, war 12 Jahre alt als ich diesen Server angefangen habe). Direkt ausgeklammert und siehe da, es funktioniert!
Ich möchte das mit OnPlayerText ja nur anstatt OnClientMessage verwenden, weil ich noch bestimmte Bedingungen setzen möchte, bevor der Bot darauf reagiert. Beinahe hätte ich einfach nur über diese Bedingungen die Nachrichtenfarbe so verändert, dass ich die bei der Funktion "OnClientMessage" abfragen könnte. Es wäre mehr Arbeit gewesen und auch ziemlich scheiße meiner Meinung nach. Gut das ich am Ball geblieben bin und weiter nach dem Fehler gesucht habe.
Ich bedanke mich herzlich bei dir für deine Geduld.
Und JustMe, dir ebenfalls für die Hilfe jetzt und in dem anderen Beitrag.
Ohne euch hätte ich es wahrscheinlich schon aufgegeben weil ich endlich mal mein Botsystem fertig machen möchte anstatt den ganzen Tag an einem Fehler rumzustochern. Deshalb vielen Dank!
Viele Grüße
Gimbo
Nein, kannst du es eventuell in deinem Script versuchen ob es überhaupt klappt, falls du eins mit Bots zur Verfügung hast?
Danke für deine weitere Antwort!
Die Nachricht wird leider nicht vom NPC gesendet. Das ist ja das was ich erreichen möchte
Es hat sich nichts verändert, nur dass jetzt wegen dem return 1 in der "OnPlayerText" funktion meines GameMods die eigentliche "Standardnachricht" ausgegeben wird, wenn ein Spieler auf dem Server etwas schreibt (also die, die für alle lesbar ist). Desweiteren wird meine formatierte Nachricht ausgegeben (%s sagt %s), also 2 Mal der selben Text.
Das Callback wird nach wie vor noch nicht von dem NPC erkannt
Ach natürlich. Wenn nichts returnt wird, kann auch nichts abgefragt werden
Da wäre ich bestimmt auch noch drauf gekommen, nach 2-3 Stunden.
Vielen Dank fürs Augen öffnen
Viele Grüße
Gimbo
//edit: Es klang logisch, funktioniert jedoch immer noch nicht.
Komischerweise wird jetzt der Text den ich geschrieben habe 2 mal ausgegeben. Also einmal der normale und einmal die "SMessage".
Ich hatte davor das Beispiel aus der Wiki genutzt, er ging jedoch nicht. Deshalb hab ich versucht beim Aufruf der Funktion bereits ein einfaches "test" vom Bot ausgeben zu lassen um zu kommen ob das überhaupt funktioniert...
Das ist der Code für mein Bot:
#define RECORDING_TYPE 1
#include <a_npc>
main(){}
public OnPlayerText(playerid, text[])
{
if (strfind(text, "Hallo Bot") != -1)
{
new string[80], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "Hallo %s! Wie geht es dir?!", name); //Hier packst du die Funktion rein die passieren soll wenn Spieler X Hallo Bot sagt.
SendChat(string);
}
return 1;
}
#if RECORDING_TYPE == 1
public OnNPCExitVehicle() StopRecordingPlayback();
public OnClientMessage(color, text[])
{
if(strfind(text,"test") != -1) {
SendChat("test");
}
}
#endif
Alles anzeigen
Wenn ich "test" schreibe, funktioniert die Funktion "OnClientMessage" ordnungsgemäß und gibt mir auch "test" aus.
Wenn ich nun "Hallo Bot" schreibe, geschieht nichts.
Hier mal mein OnPlayerText vom Gamemode, hab das Gefühl es könnte was damit zu tun haben:
public OnPlayerText(playerid, text[])
{
new ssname[MAX_PLAYER_NAME];
GetPlayerName(playerid,ssname,sizeof(ssname));
new sstring[128];
format(sstring, sizeof(sstring), "%s(%d) sagt: %s",ssname,playerid,text);
SMessage(playerid,0xFFFFFFFF, sstring,20);
return 0;
}
Viele Grüße
Gimbo
Guten Tag,
ich möchte mein NPC ansprechen können und er soll eine Funktion ausführen wenn er etwas bestimmtes hört.
Wenn ich es nun über OnClientMessage versuche, funktioniert es. Über OnPlayerText jedoch nicht.
Warum funktionert es über OnPlayerText nicht? Es ist mir wichtg es über OnPlayerText zu machen, weil ich die playerid vom Spieler benötige.
public OnClientMessage(color, text[])
{
SendChat("test"); //funktioniert
}
public OnPlayerText(playerid, text[])
{
SendChat("test"); //funktioniert nicht
}
Ich hab schon überall gegoogelt wo man nur googlen kann und finde nichts zu diesem Thema.
Ich hoffe sehr, ihr könnt mir dabei helfen.
Viele Grüße
Gimbo
Ich kriege die Fehlermeldung "it's not implemented".
Benutze ich die falsche a_npc?
Woher kriege ich das Include für diese Publics?
//hat sich erledigt, hab eine geschweifte Klammer übersehen, womit ich das Public im Public eingefügt habe.
Danke nochmal!
Du bist ein Schatz!
Die Publics die du mir gelistet hast, werden mir gar nicht in meiner a_npc Include angezeigt.
Viele Grüße
Gimbo
//edit:
Aus diesem Grund werden die Befehle bei mir auch nicht erkannt,
woher kriege ich dieses Include?
Genau sowas habe ich gesucht, vielen Dank!
Ich hätte noch eine Frage bezüglich zu NPC's.
Mein NPC reagiert auf seine Recordings in dem der Spieler etwas schreibt.
Z.B. schreibt der Spieler BSN und dann fährt der Bot auch zum BSN.
Das Problem ist, dass ich es über "OnClientMessage" gemacht habe, dort wird keine playerid übergeben und ich weiß nun nicht wie ich
von diesem Spieler bestimmte Daten abfragen kann.
Kann mir da jemand helfen?