Pickup erstellen - Was ist falsch?

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
  • Hallo, ich habe folgenden Code:
    Pickup[MAX_PICKUPS][pid] = dini_IntSet(Format,pickupID);
    Pickup[MAX_PICKUPS][style] = dini_IntSet(Format,Style);
    Pickup[MAX_PICKUPS][funktion] = dini_IntSt(Format,Funktion);
    Pickup[MAX_PICKUPS][ptext] = dini_Set(Format,pText);


    Jedoch bekomme ich dafür folgende Errors:
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(233) : error 032: array index out of bounds (variable "Pickup")
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(234) : error 032: array index out of bounds (variable "Pickup")
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(235) : error 032: array index out of bounds (variable "Pickup")
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(236) : error 032: array index out of bounds (variable "Pickup")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.



    Hier der ganze Befehl:
    ocmd:pickup(playerid,params[])
    {
    new pickupID,Style,Funktion,pText[128],pName[128],Format[20];
    if(sscanf(params,"dddss",pickupID,Style,Funktion,pText,pName))return SendClientMessage(playerid,-1,"/pickup [ID] [Style] [Funktion] [Text] [PickupName]");
    format(Format,sizeof(Format),"Pickups/%s.ini",pName);
    Pickup[MAX_PICKUPS][pid] = dini_IntSet(Format,pickupID);
    Pickup[MAX_PICKUPS][style] = dini_IntSet(Format,Style);
    Pickup[MAX_PICKUPS][funktion] = dini_IntSt(Format,Funktion);
    Pickup[MAX_PICKUPS][ptext] = dini_Set(Format,pText);
    return 1;
    }



    MfG

  • Du solltest deinen Text schon als String definieren.


    #undef MAX_PICKUPS
    #define MAX_PICKUPS 4000
    enum pickup_daten
    {
    pid,
    style,
    funktion,
    ptext[64],
    name[64],

    }
    new Pickup[MAX_PICKUPS][pickup_daten];


    #Edit: Nein eigentlich nicht.

  • Logisch, du weist auch jeder Variable den Wert "MAX_PICKUPS" zu, welche 4000 besagt. Deiner Variable kann jedoch den Wert 4000 nicht annehmen, da sie von 0 - 3999 definiert ist.


    Daher folgender Code.


    ocmd:pickup(playerid,params[])
    {
    new pickupID,Style,Funktion,pText[128],pName[128],Format[20];
    if(sscanf(params,"dddss",pickupID,Style,Funktion,pText,pName))return SendClientMessage(playerid,-1,"/pickup [ID] [Style] [Funktion] [Text] [PickupName]");
    format(Format,sizeof(Format),"Pickups/%s.ini",pName);
    Pickup[MAX_PICKUPS-1][pid] = dini_IntSet(Format,pickupID);
    Pickup[MAX_PICKUPS-1][style] = dini_IntSet(Format,Style);
    Pickup[MAX_PICKUPS-1][funktion] = dini_IntSet(Format,Funktion); // Hier hast du dich zusätzlich verschrieben, habe es grade geändert.
    Pickup[MAX_PICKUPS-1][ptext] = dini_Set(Format,pText);
    return 1;
    }

  • Hi geht nun alles..
    ocmd:pickup(playerid,params[])
    {
    new pickupID,Style,Funktion,pText[128],pName[128],Format[20],str[128];
    if(sscanf(params,"dddss",pickupID,Style,Funktion,pText,pName))return SendClientMessage(playerid,-1,"/pickup [ID] [Style] [Funktion] [Text] [PickupName]");
    format(Format,sizeof(Format),"Pickups/%s.ini",pName);
    format(str,sizeof(str),"%s",pText);
    if(pickupID == sizeof(PickUpIds1))
    {
    Pickup[MAX_PICKUPS-1][pid] = dini_IntSet(Format,"pid",pickupID);
    Pickup[MAX_PICKUPS-1][style] = dini_IntSet(Format,"style",Style);
    Pickup[MAX_PICKUPS-1][funktion] = dini_IntSet(Format,"funktion",Funktion);
    Pickup[MAX_PICKUPS-1][ptext] = dini_Set(Format,"ptext",str);
    }
    return 1;
    }
    Habe ich nun...
    Jedoch bekomme ich folgenden Warning:
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(268) : warning 203: symbol is never used: "PickUpIds1"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.


    Mein PickUpIds1:
    new PickUpIds1 [][] =
    {
    "1210","1212","1239","1240","1241","1242","1247","1248","1252","1253","1254","1313","2894",
    "1272","1273","1274","1275","1276","1277","1279","1314","1316","1317","1318","1559","1582"
    };

  • Ja, du benutzt die Informationen, die du in "PickUpIds1" definiert hast nicht, sondern nur die Größe der Variable. Deshalb der Warning.
    Der Warning ist aber nicht weiter schlimm, du kannst das Script dennoch wie gewohnt nutzen. Wenn er dich stört benutze:


    #pragma unused PickUpIds1

  • Dann verwende sie ? Hast du im Code nirgends getan, du kannst sie wie eine normale, mehr dimensionale Variable benutzen, da es genau so eine ist.


    Möchte ich doch mit dem hier:
    if(pickupID == sizeof(PickUpIds1))
    Aber du sagst ja, dass ich die Infos nicht "verwendet" werden,
    könntest du mir ein Beispiel dafür geben, wie es verwendet wird?


    MfG


    :S


    MfG


    Text: edit

    Einmal editiert, zuletzt von Blood. ()

  • Folgenden Error
    C:\Users\pc\Desktop\Server\gamemodes\Pickup.pwn(279) : error 047: array sizes do not match, or destination array is too small


    Bekomm ich auf folgende Zeile:
    Pickup[MAX_PICKUPS-1][ptext] = dini_Get(Format,"ptext");


    Wo könnte der Fehler liegen?


    Edit: Code & Text

    Einmal editiert, zuletzt von Blood. ()