Du packst alle modelids von den Objekten in ein Array (in der Reihenfolge, wie du sie ausliest..also rot sollte am 0. index, gelb am 1. usw stehen)
Beiträge von Kaliber
-
-
Benutze
Du bist im falschen Callback.
Du musst das unter: http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange verwenden.
Dort hast das newkeys und nicht newstate, das ist etwas anderes

-
Hmm, interessant, ich mach nicht soviel mit Angular, aber probier mal:
-
if(strval(inputtext) == randomCode)
-
Wie kann ich ein Random Zahlencode zwischen 1000 und 9999 erstellen?
Gibt eine randomEx Funktion einfach mal googeln.
Oder so:
random(1000)+1000;
-
Also mal vorne weg, schau mal deine Deklaration an:
new TrunkInvGetRowItem[128][MAX_PLAYERS][MAX_ROWS];
und nutzen tust du sie so:
TrunkInvGetRowItem[playerid][r]
Naa fällt dir ein Fehler auf?

Du nutzt dein Array, als ob du es so deklariert hättest:
new TrunkInvGetRowItem[MAX_PLAYERS][MAX_ROWS][128];
Ist es falsch strmid zu nutzen?
Sagen wir mal nicht falsch, aber ungünstig.
Besser wäre hier, wie du schon erwähnt hast format oder noch besser, da dein String hier konstant ist einfach direkt setzen lassen.
Der Grund, warum dein Format nicht funktioniert ist, dass du sizeof so verwenden musst, wenn du die 3te Dimension abfragst: sizeof(TrunkInvGetRowItem[][])
Aber wie schon gesagt, einfach direkt setzen ist ja kein Problem:
TrunkInvGetRowItem[playerid][r] = "Margherita";
-
Weiterhin empfehle ich dir abzufragen ob die strings (NULL) sind, da das Resultat auch 0 wäre und so Fehler entstehen könnten
Können Sie in diesem Fall nicht sein, da sscanf das ja gerade prüft, dass diese nicht NULL sind

-
Wenn 2 string gleich sind, erfährst du es mit: !strcmp
-
kriege ich die Meldung dass dieser Befehl nicht existiert
Das liegt daran, dass am Ende return 0; steht.
C
Alles anzeigenocmd:enter(playerid, params[]) { for(new x; x<sizeof(fmInfo); x++) { if(!fmInfo[x][fff_id] || fmInfo[x][fhi_x]==0.0 || !IsPlayerInRangeOfPoint(playerid,2,fmInfo[x][fhx],fmInfo[x][fhy],fmInfo[x][fhz]))continue; SetPlayerPos(playerid,fmInfo[x][fhi_x],fmInfo[x][fhi_y],fmInfo[x][fhi_z]); SetPlayerInterior(playerid,fmInfo[x][ff_Interior]); SetPlayerVirtualWorld(playerid,x); return 1; } for(new i; i<sizeof(sbInfo); i++) { if(!IsPlayerInRangeOfPoint(playerid, 5.0, sbInfo[i][sbx], sbInfo[i][sby], sbInfo[i][sbz])) continue; SetPlayerInterior(playerid, sbInfo[i][sbint]); SetPlayerPos(playerid, sbInfo[i][isbx], sbInfo[i][isby], sbInfo[i][isbz]); SetPlayerVirtualWorld(playerid, i); return 1; } for(new e; e<sizeof(hInfo); e++) { if(!hInfo[e][h_id] || hInfo[e][ih_x]==0.0 || !IsPlayerInRangeOfPoint(playerid,2,hInfo[e][h_x],hInfo[e][h_y],hInfo[e][h_z])) continue; SetPlayerPos(playerid,hInfo[e][ih_x],hInfo[e][ih_y],hInfo[e][ih_z]); SetPlayerInterior(playerid,hInfo[e][h_interior]); SetPlayerVirtualWorld(playerid,e); return 1; } for(new u; u<sizeof(bInfo); u++) { if(!bInfo[u][b_id]||bInfo[u][ibx]==0.0||!IsPlayerInRangeOfPoint(playerid,2,bInfo[u][bx],bInfo[u][by],bInfo[u][bz]))continue; SetPlayerPos(playerid,bInfo[u][ibx],bInfo[u][iby],bInfo[u][ibz]); SetPlayerInterior(playerid,bInfo[u][b_interior]); SetPlayerVirtualWorld(playerid,u); return 1; } return SendClientMessage(playerid,-1,"* Sie befinden sich an keinem Eingang!"); } ocmd:exit(playerid, params[]) { for(new x; x<sizeof(fmInfo); x++) { if(GetPlayerVirtualWorld(playerid)!=x || !IsPlayerInRangeOfPoint(playerid,2,fmInfo[x][fhi_x],fmInfo[x][fhi_y],fmInfo[x][fhi_z]))continue; SetPlayerPos(playerid, fmInfo[x][fhx], fmInfo[x][fhy], fmInfo[x][fhz]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } if(GetPlayerInterior(playerid) != 0) { for(new i; i<sizeof(sbInfo); i++) { if(!IsPlayerInRangeOfPoint(playerid, 5.0, sbInfo[i][isbx], sbInfo[i][isby], sbInfo[i][isbz])) continue; SetPlayerInterior(playerid, 0); SetPlayerPos(playerid, sbInfo[i][sbx], sbInfo[i][sby], sbInfo[i][sbz]); SetPlayerVirtualWorld(playerid, 0); return 1; } } for(new e; e<sizeof(hInfo); e++) { if(GetPlayerVirtualWorld(playerid)!=e || !IsPlayerInRangeOfPoint(playerid,2,hInfo[e][ih_x],hInfo[e][ih_y],hInfo[e][ih_z]))continue; SetPlayerPos(playerid, hInfo[e][h_x], hInfo[e][h_y], hInfo[e][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } for(new u; u<sizeof(bInfo); u++) { if(GetPlayerVirtualWorld(playerid)!=u || !IsPlayerInRangeOfPoint(playerid,2,bInfo[u][ibx],bInfo[u][iby],bInfo[u][ibz]))continue; SetPlayerPos(playerid, bInfo[u][bx], bInfo[u][by], bInfo[u][bz]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } if(IsPlayerInRangeOfPoint(playerid, 5.0, 866.91089, 1857.31665, -30.40188))//Stadthallen Exit { SetPlayerPos(playerid, 1481.0325,-1772.2615,18.7958); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } return SendClientMessage(playerid,-1,"* Sie befinden sich an keinem Exit Punkt!"); }Probiers mal so

PS: Du kannst in den Schleifen auch die Variablen alle gleich nennen (nur so als Tipp) ist n bisschen übersichtlicher

-
Stimmt jetzt nicht so ganz da man theoretisch Pakete an den Server senden kann mit denen man hupt
...klar...man kann so einiges. Kann auch eine Bot Armada draufpacken und alle hupen lassen, damit die Tore aufgehen, Mensch jetzt hab ichs dem Server aber gezeigt

Zumal man auch durch das package sagen könnte, dass man online ist...In der 0.1 Version gab es auch mal einen Bug, dass gekickte Spieler immer noch Commands eingeben konnten haha

Aber sind wir mal realistisch und bleiben bei normalem Code Flow.
Hmm ka was Schuld ist aber es klappt nicht Pfffff
Ja, wir haben es verstanden. Es geht darum, dass du diese print Statements setzt und es herausfindest.
-
Dann printe dir mal deine Position und die, die du eingegeben hast und vergleiche diese.
Bzw checke ob OnPlayerCommandText aufgerufen wird
Irgendwo muss ja der Fehler sein
Das meinte ich...
-
Du hast nichts von dem gemacht...was ich gerade geschrieben habe.
Wie soll ich dir jetzt helfen?

-
Dann printe dir mal deine Position und die, die du eingegeben hast und vergleiche diese.
Bzw checke ob OnPlayerCommandText aufgerufen wird

Irgendwo muss ja der Fehler sein

-
aber es klappt trotzdem net das Tor geht nicht auf
Dir ist klar, dass du diese X, Y und Z Koordinaten auch mit echten Koordinaten ersetzen musst?
-
So macht dein Code mehr Sinn:
C
Alles anzeigen//Pack das mal ganz nach oben if(PlayerInfo[playerid][pTot] == 1) return SendClientMessage(playerid, COLOR_GREY, "Tote können keine Befehle nutzen!"); if(newkeys & KEY_CTRL_BACK) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)) { if(IsPlayerInRangeOfPoint(playerid,10.0, X, Y, Z)) OnPlayerCommandText(playerid,"/gate"); else if(IsPlayerInRangeOfPoint(playerid,10.0, X, Y, Z)) OnPlayerCommandText(playerid,"/gate2"); } else OnPlayerCommandText(playerid, "/enter"); }IsPlayerConnected ist da komplett überflüssig, da der Spieler ja online sein muss..um zu hupen...wird für offline Spieler eher schwierig haha xD
Und dann ein else if darauf anzuwenden..macht auch keinen Sinn...Achte mehr auf Code-Logik

-
Weil es zu einem Fehler kommt und zwar geht die Schleife MAX_PLAYERS durch und nicht bis zum maximalen PizzaTextdraw.
Und da sprengt das natürlich das Array.
Aber lass mich dir noch weitere Dinge empfehlen:
- Immer, wenn man switch benutzen kann, sollte man es unbedingt einer if-Abfrage vorziehen. (Aber war wahrscheinlich eh nur zum debuggen, anyway xD)
- Wenn du das TextDraw gefunden hast undbedingt entweder return oder break nutzen, damit die Schleife nicht danach noch weiter läuft
Die Schleife also einfach so schreiben:
PS: Sehr schöner Post! Guter Debug, gefällt mir!

-
Hier mal ein Beispiel
C//Oben im Skript new lastHotDog[MAX_PLAYERS]; //Im Command ganz oben: if(lastHotDog[playerid] > gettime()) return SendClientMessage(playeird, -1, "* Sie können den Befehl noch nicht wieder verwenden!"); //Im Command wenn er etwas bekommt: lastHotDog[playerid] = gettime()+10; //Nur alle 10 Sekunden -
Da du ja Dinge ausgibst bzw Clientseitig machst, kann der Header nicht nachträglich irgendwie noch darein geschoben werden.
Nutze eine Clientseitige Weiterleitung wie z.B.:
Die 15 steht für die Sekunden, wie lange gewartet werden soll.
-
Das kommt darauf an, was du vor hast.
Google mal nach Taxi System, da kommen ganz viele schon.
Daran kannst du dich orientieren und tutorials zu NPCs gibts auch massig.
Vor 6 Jahren hatte ich da mal ein System zu geschrieben sogar hahaha

Wie die Zeit vergeht

-
Ist es Möglich das ein Actor als "Taxifahrer" umfährt den man per Anruf rufen kann?
Nein, Actor kann man leider nicht in ein Fahrzeug setzen

Sowas wäre aber mit NPCs möglich
