MapAndreas Plugin benutzen. Dann die Höhe der Map an der XY Position des Spielers abfragen und von seiner Z Position abziehen. Dann hast du den Abstand zum Boden.
Beiträge von Jeffry
-
-
Nein, das musst du nur bei der Änderung des Modells machen, bei der Farbe kannst du ja ChangeVehicleColor machen.
Außerdem musst einjährige nicht jedes Auto in jeder Farbe in deinen Code schreiben, das kannst du ja schön mit Variablen machen, das heißt um das Auto zu ändern fallen nur maximal zwei Zeilen an. Bei Modell ändern: Auto löschen und wieder erstellen. Bei Farbe: ChangeVehicleColor.Das ganze braucht eigentlich gar nicht viel Code, wenn du es richtig machst.
-
Artus, das war nicht an dich gerichtet.
Der andere Post war einfach weg.Und nicht alle ersetzen sondern nur genau an der Stelle die ich geschrieben hatte. Kann dir via Handy leider nicht den ganzen PAWN Code geben, das würde ewig dauern.
Also nur da wo ich es geschrieben hab.Zunno: Ich meine die Spalten müssen auch das ` haben.
EDIT: An den Post unten:
Ja, dann hab ich richtig gedacht, spalten brauchen auch das `. -
Das kannst du auch freundlicher sagen. Aber er sollte das schon machen, weil
SET `Besitzer` = `Python`
falsch ist. Es muss
SET `Besitzer` = 'Python'
heißen. Das hat er ja bei den anderen auch so gemacht.EDIT: War an Beavis gerichtet, dessen Post weg ist.
-
Du musst die ` ` zu ' ' machen, die die nach dem = stehen. (Python)
Und Farbe1 ist wohl nicht definiert in deiner Datenbank.
-
Gut, Ich versuch das mal zu erklären, ich hoffe du fängst was damit an.^^
- /automenu => OnPlayerCommandText natürlich
- Das setzt die CameraPos des Spielers (SetPlayerCameraPos, SetPlayerCameraLookAt) zu der stelle, wo du eben das automenu haben willst. Also entweder irgendwie vor dem spieler, obwohl das im Gelände nicht so schon wird, oder eben an einer definierten Stelle, wobei du dann jedem Spieler eine extra Virtual World zuweisen solltest, sonnst wirds chaotisch wenn 2 Leute den Command benutzen. Und Eben: PlayerVehicle[playerid] = CreateVehicle...
- Als Nächstes dann über OnPlayerKeyStateChange (oder OnPlayerUpdate mit GetPlayerKeys, für Links/Rechts/Hoch/Runter) die Keys abfragen, und mit einer Spieler Variable überprüfen, ob der Spieler auch den Command benutzt hat (die setzt du wenn der Command eingegeben wird zu 1).
- Das selbe für alle weiteren Einstellungen, musst eben wenn du die Einstellung wechselst (z.B. mit Hoch/Runter) einer anderen Spieler variable zuweisen, in welcher Einstellung der Spieler sich befindet, damit der Server bei dem jeweiligen Tastendruck auch weiß, ob er nun Farbe, Model oder sonst was zu ändern hat.
- Wenn fertig, dann den Spieler in das Auto setzen, und SetCameraBehindPlayer. Die Spieler Variablen wieder zu 0 setzen. Ende.
Naja, wenn du Fragen hast, fragen.
-
Klasse, vielen Dank. Funktioniert nun Einwandfrei!
Freut mich, dass ich helfen konnte. Danke für die Rückmeldung. -
Mach das bool weg, und speichere die variable einfach als String. Anstatt true und false nimmst du '1' und '0' (mit ').
So hab ich es bei meinem Achievement System gemacht. Ist zu empfehlen. -
Wie? Noch einer? Du bist der 5. in 2 Tagen mit dem Problem. Einer hat bisher geantwortet, bei dem hat es getan: "u" zu "d" ändern.
Kannst auch mal "r" probieren. -
Aus dem "u" in sscanf ein "d" machen. Hat bei jemand anders geholfen.
Kannst auch mal "r" ausprobieren, ob es damit geht.(Du bist der 4. mit dem Problem, innerhalb 24h)
-
Das wäre mir aber neu dass Pickups nach unten fallen. Meinst du Checkpoints? Die roten Kreise.
-
Ich denke mal der Ausgangspunkt besteht darin, Parameter "einfacher" anzuwenden, deshalb benutzt man ja SSCANF, am besten du guckst dir öfters die Liste mit allen angegebenen Parametern im Haupttheard von SScanf an.
Ich kenn die Liste, es ist mir auch klar das "u" Name bzw. ID ist. Allerdings kann es ja sein das eben genau das einen Fehler hat, wie sonst kommt er immer auf eine Falsche ID? (Ich gehe mal davon aus, dass er seinen Name bzw. seine ID richtig eingibt.)EDIT: Sieh mal einer an:
# Geeeht Danke es lag an ddPS: "einfacher", mit den Anführungszeichen haste völlig Recht. Ich sag immer das liegt im Auge des Betrachters.
Was du auch mal machen könntest: Direkt unter sscanf das hier setzen, und uns sagen was dein server log so sagt:
printf("ID Ist: %d (Und meine ID ist: %d)", pID, playerid); -
new Float:GasMax[212] = {
100.0,
50.0,
123.0,
45.55,
... usw.
100.0
}Einfach alle ID's so durchdefinieren und die Funktionen von PecToRaL benutzen.
-
Das ist schon der 3. Thread mit dem selben Problem. So langsam weiß ich warum ich sscanf nicht benutze, es schafft nur Ärger.
Naja, da ich bislang auf die anderen 2 Threads noch keine Rückmeldung bekommen habe:Probier mal in sscanf "ui" mit "dd" zu ersetzen.
-
Sollte es dann funktionieren? also ist das was oben steht soweit richtig?
Zumindest kann ich keinen Fehler finden, bis auf die zwei Fehlenden Dinge, die eine logische Erklärung für sein Problem sind. Ob es dann tut wird sich zeigen wenn er es ausprobiert. -
Alles klar. Gib dann bitte eine Rückmeldung.
Hier noch die Funktion SpielerName, falls du die nicht hast:
stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
} -
format(Autodatei,sizeof(Autodatei),"/Autos/%d.dat",vehicleid);
format(Autodatei,sizeof(Autodatei),"/Autos/%d.dat",vehicle);dini_Int(Autodatei,"Modelid");
if(!dini_Exists(Autodatei)) continue;
new Model = dini_Int(Autodatei,"Modelid");CreateVehicle(i,X,Y,Z,R,-1,-1,-1);
CreateVehicle(Model,X,Y,Z,R,-1,-1,-1);Jeweils das obige mit dem unteren ersetzen. Dann sollte es eigentlich funktionieren.
-
mysql_store_result();
Das musst du nach mysql_query einfügen.Und am Ende der Funktion:
mysql_free_result();Und dann noch die 128 in der format Linie zu 20 ändern, bzw zu sizeof(query), sonst siehts so unschön aus.
-
new PlatzID[MAX_PLAYERS] = {-1,...}, PlatzProzente[MAX_PLAYERS];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(SpielerProzente[i] > 0)
{
new a;
while(PlatzProzente[a] >= SpielerProzente[i]) a++;
for(new j=MAX_PLAYERS-2; j>=a; j--)
{
PlatzProzente[j+1] = PlatzProzente[j];
PlatzID[j+1] = PlatzID[j];
}
PlatzProzente[a] = SpielerProzente[i];
PlatzID[a] = i;
}
}
}
new msg[2048];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(PlatzID[i] != -1)
{
format(msg, sizeof(msg), "%s%s - %d%%~n~", msg, SpielerName(PlatzID[i]), PlatzProzente[i]);
}
}
TextDrawSetString(MeinTD, msg);Kann es leider grade nicht testen, aber das sollte funktionieren. Wenn nicht, sag es bitte und beschreib was passiert.
Du musst halt die Variablen mit den deinen ersetzen, aber das sollte klar sein.EDIT: Auf deine Frage: Das funktioniert für MAX_PLAYERS Spieler, also für alle im Server.
-
FraktionsAuto = CreateVehicle(...);
OnPlayerEnterVehicle:
if(vehicleid == FraktionsAuto)
{
if(Fraktion[playerid] != 2)
{
TogglePlayerControlable(playerid, false);
TogglePlayerControlable(playerid, false);
SendClientMessage(playerid, 0xFF0000FF, "ERROR: Nur Fraktion 2 kann das Auto benutzen!");
}
else SendClientMessage(playerid, 0x00FF00FF, "Hallo Fraktion 2 Mitglied!");
}Du kannst es auch mit VehicleParams machen, ist aber wesentlich umständlicher.