Ah sorry, stand eine 11 drin, für die gesamten Textdraws.
new PlayerText:PlayerTachoTextDraw[MAX_PLAYERS][11];
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
-
-
TextDrawHideForPlayer
zu:
PlayerTextDrawHide -
Beitrag von Syno ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: zu langsam und nicht ganz richtig (). -
Warum wird das Fahrzeug beim gemappten boden abgekoppelt wen ich das Fahrzeug beim Normalen standart boden abschleppe funktioniert das...
Mit dem Boden hat das nichts zu tun?!
Der Code sieht schäußlich aus...das kann man doch schöner schreiben
C
Alles anzeigenif ((newkeys & KEY_ACTION) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { new veh = GetPlayerVehicleID(playerid); if(GetVehicleModel(veh) != 525) return 1; if(IsTrailerAttachedToVehicle(veh)) return DetachTrailerFromVehicle(veh); new trailer = GetClosestNotOwnVehicle(playerid,veh); if(trailer == INVALID_VEHICLE_ID) return SCM(playerid,-1,"* Es befindet sich kein Auto in deiner Nähe!"); AttachTrailerToVehicle(trailer, veh); } stock GetClosestNotOwnVehicle(playerid,veh,Float:range=20.0) { new i,Float:ref=3000.0,Float:x,Float:y,Float:z; GetPlayerPos(playerid,x,y,z); for(new Float:tmp,v=GetVehiclePoolSize(); v!=0; v--) { if(v==veh) continue; tmp=GetVehicleDistanceFromPoint(v,x,y,z); if(tmp < ref) ref=tmp,i=v; } return (ref > range) ? INVALID_VEHICLE_ID : i; }
PlayerText
Du deklarierst die Variable als PlayerText verwendest dann aber eine normale TextDraw Funktion. Du musst [wiki]PlayerTextDrawHide[/wiki] verwenden
Und wie mein Hündchen schon sagte, das i da macht keinen Sinn.
-
Hey,
Normal ne kurze frage.
Ich lasse das bei OnVehicleExit ausgeben:
strmid(Flastdriver[vehicleid], GetName(playerid), 0, strlen(GetName(playerid)), strlen(GetName(playerid)));
Um den Letzten Fahrer zu bestimmen funktioniert auch.
Aber wen keiner Gefahren ist wie mache ich das am besten? -
1. Du solltest das einfach mit format machen:
format(Flastdriver[vehicleid],MAX_PLAYER_NAME, GetName(playerid));
2. Das kannst du doch abfragen:
Cif(Flastdriver[vehicleid][0] == EOS) { //Hier ist noch niemand damit gefahren } else { //Hier ist bereits jemand damit gefahren }
PS: Nur um das anzumerken (evtl spielt es ja keine Rolle), aber wenn der Spieler fährt und sich beispielsweise ausloggt/crasht oder geportet wird, dann wird der Callback nicht aufgerufen, sondern nur [wiki]OnPlayerStateChange[/wiki]
-
Das ding ist.
Man kann ja per /carinfo nachsehn wer gefahren ist.
Wen ich /carinfo ID eingebe steht statt niemand Garnichts?
Wen ich einsteige und aussteige steht ja mein Name da -
Wen ich /carinfo ID eingebe steht statt niemand Garnichts?
Ja...mir schon klar, deshalb ja mein Tipp.
Die Umsetzung sieht dann z.B. so aus:
new driver[] = Flastdriver[vehicleid];
if(driver[0] == EOS) driver = "Niemand";
//und dann eben im format die Variable driver nutzen. -
-
Nein, mach dein Zeug weg...nur mein Code, das reicht.
-
Hallo,
Fahrzeuge explodieren/brennen erst ab 250 Health.
Wie stelle ich meine Berechnung so an, dass das Fahrzeug bei 100% vollkommen heile ist und erst ab 0% anfängt zu brennen.
Derzeit brennt es ja bereits bei 25%.
GetVehicleHealth(GetPlayerVehicleID(i), vHealth);
vHealth = floatdiv(vHealth, 10.0);
format(DLString, sizeof(DLString), "%.0f%", vHealth);
PlayerTextDrawSetString(i, PlayerTachoTextDraw[i][11], DLString); -
vHealth = floatdiv((vHealth-250), 7.5);
So sollte es klappen denke ich -
Hey, wie bekomme ich es hin das bei der random Funktion jeder Wert nur einmal rauskommen kann.
for(new i=0;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
{
new rand = random(SpielerInRunde);
RoundCars[i][carID] = CreateVehicle(RoundCars[i][carModel],RoundCars[i][X],RoundCars[i][Y],RoundCars[i][Z],RoundCars[i][R],RoundCars[i][color1],RoundCars[i][color2],0);
if(!IsPlayerInAnyVehicle(i))
{
PutPlayerInVehicle(i,RoundCars[rand][carID],0);
}
new string[128];
format(string,sizeof(string),"[DEBUG] Random: %i, PlayerID: %i, SpielerInRunde: %i",rand,i,SpielerInRunde);
SendClientMessageToAll(-1,string);
}
}
Sprich das von 0 - 10 jede Zahl nur einmal ausgegeben wird. Aktuell ist es so das sagen wir mal der Wert 2 doppelt vorkommt und somit zwei Personen in ein Fahrzeug setzt. Das soll halt vermieden werden so das jedes Fahrzeug einen Insasse hat. -
Warum muss es denn random() sein? Passt hier nicht viel mehr eine Variable, die du einfach hoch zählst?
-
Warum muss es denn random() sein? Passt hier nicht viel mehr eine Variable, die du einfach hoch zählst?
Ich lasse pro Runde mehrere Fahrzeuge spawnen. Damit nicht jeder Spieler jede Runde das selbe Fahrzeug hat, sollen die Fahrzeuge bei jedem Runden beginn neu verteilt werden. Lässt sich mit einer Variable die hochzählt schlecht machen weil dann alle immer die selben Fahrzeuge bekommen, oder nicht? :o
-
-
Hey, wie bekomme ich es hin das bei der random Funktion jeder Wert nur einmal rauskommen kann.
new string[128], count, rand, bool:used[sizeof(RoundCars)];
for(new i=0;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
{
rand = random(SpielerInRunde - count);
for(new j = 0; j < sizeof(used); j++)
{
if(!used[j])
{
if(rand == 0)
{
RoundCars[j][carID] = CreateVehicle(RoundCars[j][carModel],RoundCars[j][X],RoundCars[j][Y],RoundCars[j][Z],RoundCars[j][R],RoundCars[j][color1],RoundCars[j][color2],0);
PutPlayerInVehicle(i,RoundCars[j][carID],0);
format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i",j,i,SpielerInRunde);
SendClientMessageToAll(-1,string);
count++;
used[j] = true;
break;
}
else
{
rand--;
}
}
}
}
}Was macht der Code?
Er gibt einen Random Wert aus, für die noch übrige Anzahl an Spieler, die noch kein Fahrzeug erhalten haben. Das heißt, mit jedem Durchlauf einer weniger, da ja auch ein Fahrzeug weniger zur Verfügung steht.
Anschließend nimmt der das x-te freie Auto, welches entsprechend dem Random-Wert gefunden wurde. Heißt, wenn random 3 ist, dann nimmt er das vierte freie Auto in der Liste.
Somit kommt kein Auto zwei mal dran. -
Danke dir schonmal aber ab if(rand == 0) wird nichts ausgeführt.
-
Danke dir schonmal aber ab if(rand == 0) wird nichts ausgeführt.
Inwiefern?
PS: Bitte keine Code-Zitate / Kompletter-Post-Zitate.
-
Inwiefern?
PS: Bitte keine Code-Zitate / Kompletter-Post-Zitate.Naja, durch die Schleife sollen ja alle Spieler in ein random Fahrzeug teleportiert werden. Leider passiert das nicht. Bei deinem Code wir immer nur rand--; ausgeführt.
-