Bei deinem Code wir immer nur rand--; ausgeführt.
Oh, stimmt.
for(new j = 0; j < rand; j++)
zu:
for(new j = 0; j < sizeof(used); j++)
Dann sollte es klappen. Wollte es erst anders umsetzen und habe dann die Schleife nicht mehr angepasst.
Bei deinem Code wir immer nur rand--; ausgeführt.
Oh, stimmt.
for(new j = 0; j < rand; j++)
zu:
for(new j = 0; j < sizeof(used); j++)
Dann sollte es klappen. Wollte es erst anders umsetzen und habe dann die Schleife nicht mehr angepasst.
Funktioniert soweit, danke dir! Gibt es eventuell eine Möglichkeit das noch zufälliger zu machen? Aktuell kommt es vor das ein Spieler 3-4 mal hintereinander das selbe Fahrzeug bekommt. @Jeffry
Was für ein System soll das denn werden? Wenn es z.B. ein Derbysystem werden soll, kannst du natürlich einfach per random() eine zufällige modelid aus einem Array ziehen - dann wäre die "Zufälligkeit" höher.
Also z.B.
Dann würde er dir zufällig ein Fahrzeug-Modell aus dem Array modelids geben.
Fahrzeuge werden komischerweise nicht gespeichert.
public SavePlayerVehicles()
{
new query[1024], mainquery[1024], secondquery[1024];
for(new i=0; i<MAX_VEHICLES; i++)
{
if(PlayerVehicle[i][cID] == i)
{
GetVehiclePos(PlayerVehicle[i][cID], PlayerVehicle[i][cPos_X], PlayerVehicle[i][cPos_Y], PlayerVehicle[i][cPos_Z]);
GetVehicleZAngle(PlayerVehicle[i][cID], PlayerVehicle[i][cPos_R]);
new Float:vHealth;
GetVehicleHealth(PlayerVehicle[i][cID], vHealth);
format(query, sizeof(query), "UPDATE server_playervehicles SET Besitzer = '%s', Key1 = '%s', Key2 = '%s', ModelID = '%d', Color1 = '%d', Color2 = '%d', Color2 = '%d', Pos_X = '%f' , Pos_Y = '%f', Pos_Z = '%f', Pos_R = '%f'",
PlayerVehicle[i][cOwner], PlayerVehicle[i][cKey1], PlayerVehicle[i][cKey2], PlayerVehicle[i][cModel], PlayerVehicle[i][cColor1], PlayerVehicle[i][cColor2], PlayerVehicle[i][cPos_X], PlayerVehicle[i][cPos_Y], PlayerVehicle[i][cPos_Z], PlayerVehicle[i][cPos_R]);
format(mainquery, sizeof(mainquery),"%s Fuel = '%f', DayKM = '%f', KM = '%f', Zustand = '%f', Crashed = '%d', NumberPlate = '%s', Preis = '%d', Paintjob = '%d', Spoiler = '%d', Hood = '%d', Roof = '%d'",
query, PlayerVehicle[i][cFuel], PlayerVehicle[i][cDayKM], PlayerVehicle[i][cKM], PlayerVehicle[i][cZustand], PlayerVehicle[i][cCrash], PlayerVehicle[i][cNumberPlate], PlayerVehicle[i][cPreis], PlayerVehicle[i][cPaintjob], PlayerVehicle[i][cSpoiler], PlayerVehicle[i][cHood], PlayerVehicle[i][cRoof]);
format(secondquery, sizeof(secondquery),"%s Lamps = '%d', Nitro = '%d' , Sideskirt = '%d', Exhausts = '%d', Wheels = '%d', Stereo = '%d', Hydraulics = '%d', FrontBumper = '%d', RearBumper = '%d', VentRight = '%d', VentLeft = '%d' WHERE ID = '%d'",
mainquery, PlayerVehicle[i][cLamps], PlayerVehicle[i][cNitro], PlayerVehicle[i][cSideskirt], PlayerVehicle[i][cExhausts], PlayerVehicle[i][cWheels], PlayerVehicle[i][cStereo], PlayerVehicle[i][cHydraulics], PlayerVehicle[i][cFrontBumper], PlayerVehicle[i][cRearBumper], PlayerVehicle[i][cVentRight], PlayerVehicle[i][cVentLeft], i);
mysql_tquery(MySQL, mainquery);
}
}
return 1;
}
[code][00:27:07] [ERROR] mysql_tquery: invalid connection handle '1'
[00:27:07] [ERROR] mysql_tquery: invalid connection handle '1'
[00:27:07] [ERROR] mysql_tquery: invalid connection handle '1'[/code]
Aktuell kommt es vor das ein Spieler 3-4 mal hintereinander das selbe Fahrzeug bekommt. @Jeffry
rand = random(SpielerInRunde - count);
zu:
rand = random(sizeof(RoundCars) - count);
Ist halt nicht passend, wenn die Fahrzeuge hintereinander stehen. Falls wild durcheinander, dann geht das so und es ist viel zufälliger bei geringen Spielerzahlen.
rand = random(SpielerInRunde - count);zu:
rand = random(sizeof(RoundCars) - count);
Ist halt nicht passend, wenn die Fahrzeuge hintereinander stehen. Falls wild durcheinander, dann geht das so und es ist viel zufälliger bei geringen Spielerzahlen.
Okay danke dir @Jeffry :3
Ein Problem habe ich noch... aktuell ist es ja so das maximal so viele Spieler wie Fahrzeuge existieren auf den Seat 0 gesetzt werden. Sprich, wenn mehr Spieler als Fahrzeuge existieren, würden diese die anderen Spieler aus dem Fahrzeug werfen. Wie kann ich es am besten machen das die Spieler die in die Fahrzeuge gesetzt werden wenn schon jemand anderes im Fahrzeug sitzt auf einen anderen Platz gesetzt werden?
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8034) : error 008: must be a constant expression; assumed zero
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8034) : error 036: empty statement
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8035) : error 017: undefined symbol "driver"
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8035) : warning 215: expression has no effect
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8035) : error 001: expected token: ";", but found "]"
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8035) : error 029: invalid expression, assumed zero
C:\Users\Patri\Desktop\Reallife\gamemodes\LRS.pwn(8035) : fatal error 107: too many error messages on one line
public OnPlayerExitVehicle(playerid, vehicleid)
{
new driver[] = Flastdriver[vehicleid]; //8034
if(driver[0] == EOS) driver = "Niemand"; //8035
return 1;
}
Warum meckert der da rum :o?
Sprich, wenn mehr Spieler als Fahrzeuge existieren, würden diese die anderen Spieler aus dem Fahrzeug werfen.
Diese würden dann kein Fahrzeug bekommen, da used = true ist.
Wie kann ich es am besten machen das die Spieler die in die Fahrzeuge gesetzt werden wenn schon jemand anderes im Fahrzeug sitzt auf einen anderen Platz gesetzt werden?
Versuche es mal so:
new string[128], count, rand, bool:used[sizeof(RoundCars)], placed, seat = 0;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
{
rand = random(sizeof(RoundCars) - count);
for(new j = 0; j < sizeof(used); j++)
{
if(!used[j])
{
if(rand == 0)
{
if(seat == 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],seat);
format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i, Seat: %i",j,i,SpielerInRunde, seat);
SendClientMessageToAll(-1,string);
used[j] = true;
count++;
placed++;
if(placed >= sizeof(RoundCars))
{
placed = 0;
seat++;
for(new u = 0; u < sizeof(used); u++) used[u] = false;
}
break;
}
else
{
rand--;
}
}
}
}
}
Das heißt, sobald alle Fahrzeuge vergeben sind, zählt der Sitz-Zähler um eins hoch und setzt die restlichen Spieler random auf Sitz 1, solange bis alle Sitz 1 Plätze voll sind, das gleiche dann für Platz 2, etc.
Und nochmal:
Bitte keine Voll-Zitate von Posts, das macht doch keinen Sinn! Zumal der Post direkt drüber steht. Das macht das Lesen nur absolut unübersichtlich.
Die Spieler, die auf die anderen Sitze verteilt werden sollten, werden nicht in die Fahrzeuge gesetzt.
Stimmt, der Wert von dem der Random-Wert genommen wird, läuft dann ins negative.
Versuche es so:
new string[128], count, rand, bool:used[sizeof(RoundCars)], seat = 0;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"JointInRunde") == 1 && IsPlayerConnected(i))
{
rand = random(sizeof(RoundCars) - count);
for(new j = 0; j < sizeof(used); j++)
{
if(!used[j])
{
if(rand == 0)
{
if(seat == 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],seat);
format(string,sizeof(string),"[DEBUG] Fahrzeug: %i, PlayerID: %i, SpielerInRunde: %i",j,i,SpielerInRunde);
SendClientMessageToAll(-1,string);
used[j] = true;
count++;
if(count >= sizeof(RoundCars))
{
count = 0;
seat++;
for(new u = 0; u < sizeof(used); u++) used[u] = false;
}
break;
}
else
{
rand--;
}
}
}
}
}
Guten Abend, kleines Problem warum Zeigt er beim Skin eine Box an ???
Habe im Editor keine Box ( Die Schwarze nur um den Skin )
Persoskin[playerid] = CreatePlayerTextDraw(playerid, 147.999984, 137.303588, "LD_SPAC:white");
PlayerTextDrawLetterSize(playerid, Persoskin[playerid], -0.184333, -8.885335);
PlayerTextDrawTextSize(playerid, Persoskin[playerid], 100.000167, 172.977813);
PlayerTextDrawAlignment(playerid, Persoskin[playerid], 1);
PlayerTextDrawColor(playerid, Persoskin[playerid], -1);
PlayerTextDrawUseBox(playerid, Persoskin[playerid], true);
PlayerTextDrawBoxColor(playerid, Persoskin[playerid], 0);
PlayerTextDrawSetShadow(playerid, Persoskin[playerid], 0);
PlayerTextDrawSetOutline(playerid, Persoskin[playerid], 0);
PlayerTextDrawFont(playerid, Persoskin[playerid], 5);
PlayerTextDrawSetPreviewModel(playerid, Persoskin[playerid], 5);
Alles anzeigen
PlayerTextDrawUseBox(playerid, Persoskin[playerid], true);
Versuch mal das auf false zu setzen.
Ne das habe ich schon Probiert aber ändert sich nichts
Ne das habe ich schon Probiert aber ändert sich nichts
Kannst es einfach so machen:
Persoskin[playerid] = CreatePlayerTextDraw(playerid, 147.999984, 137.303588, "LD_SPAC:white");
PlayerTextDrawLetterSize(playerid, Persoskin[playerid], -0.184333, -8.885335);
PlayerTextDrawTextSize(playerid, Persoskin[playerid], 100.000167, 172.977813);
PlayerTextDrawBackgroundColor(playerid, Persoskin[playerid], 0x00000000);
PlayerTextDrawFont(playerid, Persoskin[playerid], 5);
PlayerTextDrawSetPreviewModel(playerid, Persoskin[playerid], 5);
Guten Tag,
Ich hab keine ahnung warum nur "Server: unknown command" kommt habe den Befehl schon mehrfach überprüft, entweder ich bin Total blind oder keine Ahnung ich hoffe ihr könnt mir weiter helfen.
ocmd:setleader(playerid, params[]) {
if(!eUser[playerid][e_USER_ONLINE])
return SendClientMessage(playerid, -1, Text_NoConnected);
if(eAdmin[eUser[playerid][e_USER_ADMIN_LEVEL]][e_ADMIN_PERMISSION] < ePermission[e_PERMISSION_ADMIN_SETLEADER])
return SendClientMessage(playerid, -1, Text_NoRights);
new buffer_pID, buffer_fID;
if(sscanf(params, "ui", buffer_pID, buffer_fID))
return SendClientMessage(playerid, -1, Text_Use"/setleader [playerid]");
if(!eUser[buffer_pID][e_USER_ONLINE])
return SendClientMessage(playerid, -1, Text_NotConnected);
new string1[128],string[258], bool:buffer_check=true;
strcat(string, "ID\tFraktions Name\n", sizeof(string));
for(new i=0; i < MAX_FRAKTION; i++) {
if(strlen(eFraktion[i][e_FRAKTION_NAME]) > 0) {
if(buffer_check) {
buffer_check = false;
format(string1, sizeof(string1), "%i\t%s", i, eFraktion[i][e_FRAKTION_NAME]);
} else {
format(string1, sizeof(string1), "%s\n%i\t%s",string1, i, eFraktion[i][e_FRAKTION_NAME]);
}
}
}
strcat(string, string1, sizeof(string));
strdel(string1, 0, strlen(string1));
SetPVarInt(playerid, "SetLeaderpID", buffer_pID);
return Dialog_Show(playerid, SetLeaderDialog, DIALOG_STYLE_LIST, "Fraktionsverwaltung - SetLeader", string, "Bestätigen", "Abbrechen");
}
Lade dir das Crashdetect Plugin herunter und füge es in deinen Server ein:
http://forum.sa-mp.com/showthread.php?t=262796
Erstelle zusätzlich im Ordner /pawno/ eine Datei "pawn.cfg" und schreibe dort "-d3" rein.
Dann öffne die pawno.exe aus diesem Ordner heraus und kompiliere deinen Code erneut.
Reproduziere dann den Fehler, dann sollte die Problemzeile im server.log ausgegeben werden.