Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Selbst gelöst ().
Guten Abend zusammen,
möchte gerne mit einem Enum verschiedene Dinge bestimmen, z.B wie das mit einem Admincar, leider habe ich das Problem,
wenn ich den Enum "zurücksetzten" möchte, lädt mein Script nicht mehr richtig. Keine Errors oder Warns.
enum AdminCMDEnum{
adVeh,
Text3D:adTitel[MAX_VEHICLES]
};
new aCMDEnum[MAX_PLAYERS][AdminCMDEnum];
// Zurücksetzten
aCMDEnum[playerid][adVeh] = INVALID_VEHICLE_ID;
aCMDEnum[playerid][adTitel][aCMDEnum[playerid][adVeh]] = Text3D:INVALID_3DTEXT_ID;
Delete3DTextLabel(aCMDEnum[playerid][adTitel][aCMDEnum[playerid][adVeh]]);
Hoffe einer kann mir sagen woran es liegt.
MfG.
Du setzt das in der falschen Reihenfolge zurück.
Du solltest adVeh als letztes auf INVALID_VEHICLE_ID setzen, sonst wird versucht auf den INVALID_VEHICLE_ID index zuzugreifen, was dann zu einen Fehler führt
Mit crashdetect kannst du dir solche Fehler im server.log anzeigen lassen
Kann mir jemand sagen wo ich ein Fehler mache ?
[19:30:49] [debug] Run time error 4: "Array index out of bounds"
[19:30:49] [debug] Attempted to read/write array element at index 65535 in array of size 1000
[19:30:49] [debug] AMX backtrace:
[19:30:49] [debug] #0 000573cc in ?? (65535) from selfmade.amx
[19:30:49] [debug] #1 0002f9d0 in public ShowMembers (0) from selfmade.amx
new query[265];
mysql_format(handle, query, sizeof(query), "SELECT * FROM `Accounts` WHERE Fraktion = '%d'", pInfo[playerid][pFraktion]);
mysql_pquery(handle, query, "ShowMembers", "i", playerid);
forward ShowMembers(Showid);
public ShowMembers(Showid)
{
new rows, count, Name[MAX_PLAYER_NAME], string[250], playerid, Rang, fID = pInfo[Showid][pFraktion];
rows = cache_num_rows();
for(new i = 0; i<rows; i++)
{
cache_get_value(i, "Name", Name);
cache_get_value_name_int(i, "Rang", Rang);
playerid = GetPlayerIdFromName(Name);
if(count == 0)
{
if(IsPlayerNameOnline( SpielerName(playerid)))
{
format(string, sizeof(string), "%s\n\%s\t%d\tOnline", string, SpielerName(playerid), GetFrakRangName(Rang, fID));
count++;
}
else
{
format(string, sizeof(string), "%s\n\%s\t%d\tOffline", string, SpielerName(playerid), GetFrakRangName(Rang, fID));
count++;
}
}
else
{
if(IsPlayerNameOnline( SpielerName(playerid)))
{
format(string, sizeof(string), "%s\n\%s\t%d\tOnline", string, SpielerName(playerid), GetFrakRangName(Rang, fID));
count++;
}
else
{
format(string, sizeof(string), "%s\n\%s\t%d\tOffline", string, SpielerName(playerid), GetFrakRangName(Rang, fID));
count++;
}
}
}
format(string, sizeof(string), "{FFFFFF}Name\tRang\tOnline/Offline\n\%s", string);
ShowPlayerDialog(Showid, DIALOG_MEMBERS, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Fraktionsmember", string, "{FFFFFF}Ok", "");
return 1;
}
Alles anzeigen
An dem Code ist soviel komisch, da bin ich gerade zu faul auf das alles ein zugehen.
Ich hoffe du siehst, dass man den Code auch etwas verkürzen und vereinfachen kann:
forward ShowMembers(Showid);
public ShowMembers(Showid)
{
new rows=cache_num_rows(), Name[MAX_PLAYER_NAME], string[250], playerid, Rang, fID = pInfo[Showid][pFraktion];
for(new i = 0; i<rows; i++)
{
cache_get_value(i, "Name", Name);
cache_get_value_name_int(i, "Rang", Rang);
playerid = GetPlayerIdFromName(Name);
format(string, sizeof(string), "%s\n%s\t%d\t%s", string, Name, GetFrakRangName(Rang, fID), (IsPlayerConnected(playerid))?("Online"):("Offline"));
}
strins(string,"{FFFFFF}Name\tRang\tOnline/Offline\n",0,sizeof(string));
ShowPlayerDialog(Showid, DIALOG_MEMBERS, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Fraktionsmember", string, "Ok", "");
return 1;
}
Alles anzeigen
Versuche den Code mal
Ich denke das kam daher, dass du viel zu oft direkt auf diese playerid zugegriffen hast und wenn der Spieler nicht online ist, wird playerid = INVALID_PLAYER_ID zugewiesen.
INVALID_PLAYER_ID = 65535
Und ich denke eine andere Funktion konnte diesen Wert nicht handeln und hat dann verkackt
Weiß jemand zufällig, warum der Dialog so "buggt"?
CMD:acheckgun(playerid, params[])
{
new playerID, string[128], waffenid, waffenmuni, waffenname[24], header[128];
if(PlayerInfo[playerid][pEingeloggt] != 1)return SendClientMessage(playerid, COLOR_ORANGE, "Info"HTML_WHITE": Du bist derzeit nicht eingeloggt.");
if(PlayerInfo[playerid][pAdminlevel] < 2)return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Diesen Befehl darfst du nicht benutzen.");
if(sscanf(params,"u", playerID))return SendClientMessage(playerid, COLOR_GREEN, "* Verwendung"HTML_WHITE": /acheckgun [SpielerID/Teilname]");
if(!IsPlayerConnected(playerID))return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Der angegebene Spieler ist nicht online.");
if(PlayerInfo[playerID][pEingeloggt] != 1)return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Der angegebene Spieler ist nicht eingeloggt.");
strdel(DialogString, 0, sizeof(DialogString));
for (new i = 0; i <12; i++)
{
GetPlayerWeaponData(playerID, i, waffenid, waffenmuni);
GetWaffenName(waffenid, waffenname, sizeof(waffenname));
if(waffenmuni != 0)
{
format(DialogString, sizeof(DialogString),""HTML_WHITE"Slot\t"HTML_WHITE"Waffe\t"HTML_WHITE"Munition"HTML_WHITE"\n\%s\n%d\t%s\t%d", DialogString, i, waffenname, waffenmuni);
}
}
format(header, sizeof(header), ""HTML_ORANGE""#SERVER_NAME" "HTML_WHITE"- Waffen von (%s)", PlayerInfo[playerID][pName]);
ShowPlayerDialog(playerid, DIALOG_ADMINS, DIALOG_STYLE_TABLIST_HEADERS, header, DialogString, "Schließen", "");
return 1;
}
Man sollte dafür keine globalen Strings nutzen.
Da kommt es öfters mal zu Überschreibungen und Fehlern, vermutlich ist das dein Problem hier
Achso das meinst du mit "buggt" ahja.
Ja, das liegt daran, dass du in der Schleife immer wieder den Header mit rein packst.
format(DialogString, sizeof(DialogString),"%s\n%d\t%s\t%d", DialogString, i, waffenname, waffenmuni);
Also das reicht in der Schleife und unterhalb der Schleife machst du dann einfach sowas:
if(!strcmp(cmd, "/anmelden", true))
{
if(!IsPlayerInRangeOfPoint(playerid,2.0, 2316.22998, -12.66090, 26.74220))return SendClientMessage(playerid, COLOR_GRAU,"Du bist nicht am Fahrzeuganmeldeamt.");
for(new slot=0;slot<MAX_SPIELERAUTOS;slot++)
{
if(!strcmp(GetName(playerid), SpielerAutoInfo[playerid][slot][saBesitzer], true))
{
if(GetPlayerVehicleID(playerid) == SpielerAutoInfo[slot][playerid][vehID])
{
new Fahrzeug1[64], Fahrzeug2[64], Fahrzeug3[64], gesstring[256];
if(SafeGetPlayerMoney(playerid) < 65) return SendClientMessage(playerid, COLOR_GRAU, "Du hast nicht genug Geld!");
if(SpielerAutoInfo[playerid][0][saModelID] >= 400 && SpielerAutoInfo[playerid][0][saModelID] <= 611)
{
if(SpielerAutoInfo[playerid][0][slot][saAnmeldungsOrt] == 0) format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); //28584
else format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]);
}
else format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: Nicht belegt");
if(SpielerAutoInfo[playerid][1][saModelID] >= 400 && SpielerAutoInfo[playerid][1][saModelID] <= 611)
{
if(SpielerAutoInfo[playerid][1][slot][saAnmeldungsOrt] == 0) format(Fahrzeug2, sizeof(Fahrzeug2), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][1][saModelID]-400]);
else format(Fahrzeug2, sizeof(Fahrzeug2), "{FFFFFF}Schlüssel 2: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][1][saModelID]-400]);
}
else format(Fahrzeug2, sizeof(Fahrzeug2), "Schlüssel 2: Nicht belegt");
if(SpielerAutoInfo[playerid][2][saModelID] >= 400 && SpielerAutoInfo[playerid][2][saModelID] <= 611)
{
if(SpielerAutoInfo[playerid][2][slot][saAnmeldungsOrt] == 0) format(Fahrzeug3, sizeof(Fahrzeug3), "Schlüssel 3: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][2][saModelID]-400]);
else format(Fahrzeug3, sizeof(Fahrzeug3), "{FFFFFF}Schlüssel 3: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][2][saModelID]-400]);
}
else format(Fahrzeug3, sizeof(Fahrzeug3), "Schlüssel 3: Nicht belegt");
format(gesstring, sizeof(gesstring), "1\t%s{FFFFFF}\n2\t%s{FFFFFF}\n3\t%s", Fahrzeug1, Fahrzeug2, Fahrzeug3);
if(GetPlayerVirtualWorld(playerid) == 0) ShowPlayerDialog(playerid, DIALOG_KFZANMELDUNG, DIALOG_STYLE_LIST, "{FFBF00}KFZ Anmeldung LS: {FFFFFF}Wähle das Fahrzeug aus!", gesstring, "Auswählen", "Schließen");
}
}
else if(IsPlayerInRangeOfPoint(playerid, 2, 2316.22998, -9.98090, 26.74220))//Fraktion
{
if(PlayerInfo[playerid][pLeader] == 0) return SendClientMessage(playerid, COLOR_GRAU, "Du bist kein Leader!");
new iItem, vehiclename[24];
new gesstring[5000];
for(new vid = 1; vid < MAX_VEHICLES; vid++)
{
if(!IsFraktionsCar[vid]) continue;
if(FFahrzeugInfo[vid][fFrakID] != GetPlayerFraktion(playerid)) continue;
GetVehicleName(vid, vehiclename, sizeof(vehiclename));
if(FFahrzeugInfo[vid][fAnmeldungsOrt] == 0) format(string, sizeof(string), "{FFFFFF}%s {FF0000}[Nicht Angemeldet]\n", vehiclename), strcat(gesstring, string);
else format(string, sizeof(string), "{FFFFFF}%s {2EFE2E}[Angemeldet]\n", vehiclename), strcat(gesstring, string);
FFahrzeugItem[playerid][iItem] = vid;
iItem ++;
}
ShowPlayerDialog(playerid, DIALOG_FKFZANMELDUNG, DIALOG_STYLE_LIST, "{FFBF00}FF-KFZ Anmeldung: {FFFFFF}Wähle ein Fahrzeug aus!", gesstring, "Auswählen", "Abbrechen");
}
}
return 1;
}
Alles anzeigen
Hallo,
Ich habe eine frage wen ich /anmelden eingebe steht immer das die Schlüssel nicht belegt sind warum?
C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 001: expected token: ")", but found "["
C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 029: invalid expression, assumed zero
C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : warning 215: expression has no effect
C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 001: expected token: ";", but found "]"
C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : fatal error 107: too many error messages on one line
Weil
SpielerAutoInfo[playerid][0][saModelID]
außerhalb von 400 und 611 ist.
Wo ist das außerhalb bitte?
if(SpielerAutoInfo[playerid][0][saModelID] >= 400 && SpielerAutoInfo[playerid][0][saModelID] <= 611) -> Meiner Meinung richtig.
if(SpielerAutoInfo[playerid][0][slot][saAnmeldungsOrt] == 0) format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); //28584
else format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]);
-> Meiner Meinung auch richtig aber scheinbar nicht
Wie kann ich machen, dass wenn man in Fahrzeug "MIETCAR" einsteigt, man ein Dialog kriegt? Also soll dann mieten etc. kommen aber das krieg ich alleine hin.
Alle Fahrzeuge sind definiert, aber das mit dem Dialog fehlt, wenn man in das einsteigt.
OnPlayerEnterVehicle
if auto == mietwagen
ShowPlayerDialog
Alles anzeigenWo ist das außerhalb bitte?
if(SpielerAutoInfo[playerid][0][saModelID] >= 400 && SpielerAutoInfo[playerid][0][saModelID] <= 611) -> Meiner Meinung richtig.
if(SpielerAutoInfo[playerid][0][slot][saAnmeldungsOrt] == 0) format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); //28584else format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); -> Meiner Meinung auch richtig aber scheinbar nicht
Der Code macht doch auch was er soll. SpielerAutoInfo[playerid][0][saModelID] ist außerhalb von 400 und 611. Deswegen bekommst du die Meldung.
Lass dir die Variable doch mal ausgeben, dann weißt du Bescheid.
Die Warnings und errors gehn ja nicht weg das ich das Compeilen kann und mir dann ausgeben lassen kann.
Ohh, ach soo. Markier mal die Zeile in der der Fehler sein soll.
if(SpielerAutoInfo[playerid][0][slot][saAnmeldungsOrt] == 0) format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); //28584
Jemand Ahnung, warum das Label nicht erstellt wird?
new Vehicle = CreateVehicle(560, Pos[0], Pos[1], Pos[2], Pos[3], 3, 3, -1, 0);
SetVehicleNumberPlate(Vehicle, ""HTML_ORANGE"Supporter-Car");
PutPlayerInVehicle(playerid, Vehicle, 0);
format(string, sizeof(string), ""HTML_WHITE"Supporter Car von "HTML_ORANGE"%s",PlayerInfo[playerid][pName]);
SupCarLabel[Vehicle] = CreateDynamic3DTextLabel(string, COLOR_WHITE, Pos[0], Pos[1], Pos[2], Pos[3], 25, INVALID_PLAYER_ID, Vehicle, 0, 0, 0, 0, 30);