Was soll denn floatstr(params) bewirken ?
Musste jeweils entfernt werden, auch in sscanf (siehe erster Post dieser Seite). Problem ist schon behoben ![]()
Was soll denn floatstr(params) bewirken ?
Musste jeweils entfernt werden, auch in sscanf (siehe erster Post dieser Seite). Problem ist schon behoben ![]()
So funktioniert jetzt alles, eine Frage ist jedoch noch da. Im Dialog zeigt er mir nur eine Zeile an, ist da bei der Schleife was falsch wo es um das Fahrzeug geht ?
command(garage, playerid, params[])
{
new Float:x, Float:y, Float:z, string[128], mainstring[2000];
GetPlayerPos(playerid, x, y, z);
for(new i=0;i<MAX_HAUS;i++){
if(HausInfo[i][h_erstellt] == 1){
if(IsPlayerInRangeOfPoint(playerid, 5.0, HausInfo[i][g_x], HausInfo[i][g_y], HausInfo[i][g_z])){
for(new ii=0;ii<3;ii++){
printf("%d pHaus", Spieler[playerid][pHaus][ii]);
if(Spieler[playerid][pHaus][ii] == i){
if(IsPlayerInAnyVehicle(playerid)){
ShowPlayerDialog(playerid, DIALOG_GARAGE, DIALOG_STYLE_LIST, "Test", "Fahrzeug reinstellen","Weiter","Abbruch");
}
else{
for(new g=0;g<3;g++){
if(HausInfo[i][g_slot][ii] == 0 && HausInfo[i][g_fahrzeug][ii] == 0){
format(string, sizeof(string), "Frei\n");
strcat(mainstring, string);
}
else if(HausInfo[i][g_slot][ii] != 0 && HausInfo[i][g_fahrzeug][ii] != 0){
format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][ii], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][ii]) - 400]);
strcat(mainstring, string);
}
}
ShowPlayerDialog(playerid, DIALOG_GARAGE_RAUS, DIALOG_STYLE_LIST, "Test", string, "Rausholen", "Abbruch");
}
}
}
}
}
}
return 1;
}
Ändere im ShowPlayerDialog den "string" zu "mainstring" und nimm den ShowPlayerDialog aus der Schleife raus, ganz ans Ende vor das return 1.
So hab ich es jetzt und das Script sagt, Nein.
command(garage, playerid, params[])
{
new Float:x, Float:y, Float:z, string[128], mainstring[2000];
GetPlayerPos(playerid, x, y, z);
for(new i=0;i<MAX_HAUS;i++){
if(HausInfo[i][h_erstellt] == 1){
if(IsPlayerInRangeOfPoint(playerid, 5.0, HausInfo[i][g_x], HausInfo[i][g_y], HausInfo[i][g_z])){
for(new ii=0;ii<3;ii++){
if(Spieler[playerid][pHaus][ii] == i){
SetPVarInt(playerid, "Haussss", i);
if(IsPlayerInAnyVehicle(playerid)){
ShowPlayerDialog(playerid, DIALOG_GARAGE, DIALOG_STYLE_LIST, "Test", "Fahrzeug reinstellen","Weiter","Abbruch");
}
else{
for(new g=0;g<3;g++){
if(HausInfo[i][g_slot][g] == 0 && HausInfo[i][g_fahrzeug][g] == 0){
format(string, sizeof(string), "Frei\n");
strcat(mainstring, string);
}
else if(HausInfo[i][g_slot][g] != 0 && HausInfo[i][g_fahrzeug][g] != 0){
format(string, sizeof(string), "%d - %s\n", HausInfo[i][g_fahrzeug][g], VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]);
strcat(mainstring, string);
}
}
}
}
}
}
}
}
ShowPlayerDialog(playerid, DIALOG_GARAGE_RAUS, DIALOG_STYLE_LIST, "Test", mainstring, "Rausholen", "Abbruch");
return 1;
}
[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at negative index -400
[debug] AMX backtrace:
[debug] #0 0002ad60 in public cmd_garage (0, 13685620) from selfmade.amx
[debug] #1 native CallLocalFunction () from samp-server.exe
[debug] #2 00000720 in public OnPlayerCommandText (0, 13685588) from selfmade.amx
Das liegt dann daran, dass dir
VehicleNames[GetVehicleModel(HausInfo[i][g_fahrzeug][g]) - 400]
den Fehler ausgibt, weil GetVehicleModel 0 zurück gibt, das das Fahrzeug in der Variable nicht existiert.
Ändere eventuell
else if(HausInfo[i][g_slot][g] != 0 && HausInfo[i][g_fahrzeug][g] != 0){
zu:else if(HausInfo[i][g_slot][g] != 0 && GetVehicleModel(HausInfo[i][g_fahrzeug][g]) != 0){
Danke, die Frage wäre ja nur, weshalb es 0 ausgibt.
Mittlerweile kann ich nichtmal mehr ein Fahrzeug reinstelle, was zuvor ja noch ging. ![]()
Hey,
was brauche ich, damit mein UCP mit meinem Server "verbunden" ist. Mir fällt leider gerade nicht der Name ein.
Als Beispiel: Das ich im UCP einen Spieler banne und er vom Server gekickt wird o.Ä.
Nächste Frage: Würde das auf meinem localhost funktionieren oder bräuchte ich einen Server?
Hi, warum erstellen sich manchmal die Textlabels mehrmals?
In OnPlayerUpdate
new pInfosStr[90];
{
format(pInfosStr, sizeof pInfosStr, "{%06x}Ping: {FFFFFF}%d\n{%06x}FPS: {FFFFFF}%d\n{%06x}PL: {FFFFFF}%0.2f", GetPlayerColor(playerid) >>> 8, GetPlayerPing(playerid), GetPlayerColor(playerid) >>> 8, pFPS[playerid], GetPlayerColor(playerid) >>> 8, GetPlayerPacketLoss(playerid));
Update3DTextLabelText(pInfos[playerid], 0xFFFFFFFF, pInfosStr);
}
Bild
Wo wird es erstellt ?
Und zeig uns mal bitte den Code vom erstellen
new Text3D:pInfos[MAX_PLAYERS];
OnPlayerConnect
pInfos[playerid] = Create3DTextLabel("", -1, 0.0, 0.0, 0.0, 15.0, 0, 1);
Attach3DTextLabelToPlayer(pInfos[playerid], playerid, 0.0, 0.0, -0.7);
Das ist alles..
Wird bereits bei OnPlayerDisconnect gelöscht. Frage 1 verstehe ich nicht.
Yo, will nen einfachen Skinwechsel machen indem sich die Variable einfach jedes mal um +1 erweitert.
if(skin[playerid] < 280) skin[playerid]; //falls alter skin unter 280 ist
if(skin[playerid] > 287) skin[playerid] = 303; //soll skinid 202-310 überspringen
if(skin[playerid] > 310) skin[playerid] = 280;//wieder von vorne anfangen
SetPlayerSkin(playerid, skin[playerid]);
skin[playerid]++;//+1
Es geht bis auf, dass wenn der Skin bei 303 angelangt ist er sich jedes mal wiederholt.
Weiß jemand woran das liegt? ![]()
@[LnD]JustMe.77:
Ist das direkt nach dem Serverrestart auch ?
Da liegt der Fehler Sobald der Skin über 287 ist wird er auf 303 Gesetzt
@[LnD]JustMe.77:
Ist das direkt nach dem Serverrestart auch ?
Da liegt der Fehler Sobald der Skin über 287 ist wird er auf 303 Gesetzt
Soll er auch ![]()
Er soll Skins von 287 bis 303 überspringen. ![]()
if(skin[playerid] < 280) skin[playerid]; //falls alter skin unter 280 ist
else if(skin[playerid] > 287) skin[playerid] = 303; //soll skinid 202-310 überspringen
else if(skin[playerid] > 310) skin[playerid] = 280;//wieder von vorne anfangen
SetPlayerSkin(playerid, skin[playerid]);
skin[playerid]++;//+1
Und so?
Dann startet er bei 0. ![]()
Das 2te Else if wird nie ausgelöst. Musst beim 1sten Else if eine 2te Condition einbauen
if(skin[playerid] < 280) skin[playerid]; //falls alter skin unter 280 ist
else if(skin[playerid] > 287 && skin[playerid] <= 310) skin[playerid] = 303; //soll skinid 202-310 überspringen
else if(skin[playerid] > 310) skin[playerid] = 280;//wieder von vorne anfangen
SetPlayerSkin(playerid, skin[playerid]);
Hey, habe ein kleines Problem.
Ich kann per Shop ein Skin kaufen, doch wenn ich der Runde beitrete, erhalte ich meinen alten Skin (siehe Video)
new cQuery[256];
SpawnPlayer(playerid);
SetPlayerSkin(playerid, pData[playerid][P_Skin]);
TogglePlayerAllDynamicAreas(playerid, 0);
TogglePlayerDynamicArea(playerid, ZoneInfo[Round[r_areaid]][z_Ids], 1);
GangZoneShowForPlayer(playerid, ZoneInfo[Round[r_areaid]][z_id], GangZoneColor); //Gangzone color 6
format(cQuery, sizeof(cQuery), "{%06x}%s{FFFFFF} joined the round {00FF00}back!", GetPlayerColor(playerid) >>> 8, GetName(playerid));
SendClientMessageToAll(-1, cQuery);
IsInLobby[playerid] = false;
Video: