Hey,
habe ein kleines System gebastelt mit dem man sich Schilder also Werbetafeln mieten kann. Nun will ich einen Dialog erstellen der alle verfügbaren also alle zum Verkauf stehenden Schilder anzeigt. Das habe ich auch gemacht nur wird er im Spiel nicht angezeigt. Die Schilder werden ordnungsgemäß geladed und erstellt, nur der Dialog will nicht. Was mache ich falsch ?
stock ShowSigns(playerid)
{
new signFormat[800];
new signLocation[30];
for(new i=0;i<sizeof(SignInfo);i++){
if(SignInfo[i][ID] == 0)continue;
if(SignInfo[i][ForSale] != 1) continue;
Get3DZoneForCoords(signLocation, sizeof(signLocation), SignInfo[i][x], SignInfo[i][y], SignInfo[i][z]);
format(signFormat,sizeof(signFormat),"%s{FFFFFF}ID: {FF9900}%i {FFFFFF}|| Location: {FF9900}%s {FFFFFF}|| Price: {FF9900}%s\n",signFormat,SignInfo[i][ID],signLocation,FM(SignInfo[i][Price]));
}
ShowPlayerDialog(playerid,48,DIALOG_STYLE_LIST,"Available billboards",signFormat,"Select","Back");
return 1;
}
Dialog wird nicht angezeigt
- Oskaar1994
- Geschlossen
- Erledigt
-
-
Mach doch mal einen Print-Debug und 800 Zellen sind ein bisschen viel? Mach das mal nur auf 512...
mfg.
-
stock ShowSigns(playerid)
{
new signFormat[800];
new signLocation[30];
for(new i=0;i<sizeof(SignInfo);i++)
{
printf("i: %d", i);
if(SignInfo[i][ID] == 0)continue;
if(SignInfo[i][ForSale] != 1) continue;
printf("passed.");
Get3DZoneForCoords(signLocation, sizeof(signLocation), SignInfo[i][x], SignInfo[i][y], SignInfo[i][z]);
print(signLocation);
format(signFormat,sizeof(signFormat),"%s{FFFFFF}ID: {FF9900}%i {FFFFFF}|| Location: {FF9900}%s {FFFFFF}|| Price: {FF9900}%s\n",signFormat,SignInfo[i][ID],signLocation,FM(SignInfo[i][Price]));
print(signFormat);
}
ShowPlayerDialog(playerid,48,DIALOG_STYLE_LIST,"Available billboards",signFormat,"Select","Back");
return 1;
}
Was steht im Log?lukas1177: Nicht dein Ernst, oder?
Kaliber: Die Zeile an sich hat schon fast 100 Zeichen, wenn er also mehr als 10 Schilder hat, dann wird er sogar mehr als die 800 brauchen. -
Das Problem hatte ich auch mal. Probier mal dieses Array Global zu schreiben. Also signFormat[800] irgendwo ganz am Anfang des. Scriptes. Ansonsten kannst Du es, wie Kaliber es schon geschrieben hat, die Zelle Anzahl verkleinern.
#Handy
-
Also ich habe das Array mal verkleinert, hilft leider nichts. Und geprintet wird nur das erste, und das 200mal. Also halt immer: i: 0 // i: 1 // i: 2 usw.
-
Gut, dann ändere den print mal zu:
printf("i: %d -> ID: %d ForSale: %d", i, SignInfo[i][ID], SignInfo[i][ForSale]);Eins von beidem wird entweder immer 0 sein, oder immer nicht 1.
-
Ups, habe gerade gemerkt, dass ich zum Testen eine Funktion gemacht hatte die ForSale bei allen Schildern auf 0 setzt. Trotzdem danke für die Hilfe Ich hätte da aber noch eine bzw. zwei Fragen. Wie kann ich es machen wenn bei allen Schildern ForSale 0 ist, also wenn es nicht zum Verkauf steht, dass eine Nachricht returnt wird ? Und die zweite Frage wäre bezüglich der Anzahl der Schilder. Da ein String ja höchstens 1024 Zeichen groß sein kann, wie mache ich es wenn ich sehr viele Schilder habe ?
-
1.
Nach dem Loop
if(strlen(signFormat) == 0) return SendClientMessage...2. Eine zweite Seite, die die weiteren Schilder anzeigt.
Entweder über einen zweiten Befehl, oder über einen der Buttons. -
breadfish.de
Hat das Thema geschlossen.