Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Jeffry schrieb:

    Die Meldung kam in dem Fall dann vom Debug Modus.

    Tritt der Fehler denn nur bei dem Befehl auf, oder auch bei anderen Befehlen?
    Hast du mal versucht, den Befehl als "strcmp" Befehl anzulegen, und den ocmd Befehl zu entfernen, klappt es dann?
    Andere Befehle funktionieren einwandfrei. /inventory funktioniert allerdings auch nicht als "strcmp". ?(

    Quellcode

    1. [debug] Run time error 5: "Invalid memory access"
    2. [debug] AMX backtrace:
    3. [debug] #0 0000d858 in public ocmdOnPlayerCommandText (0, 339204) from script.amx
    4. [debug] #1 native CallLocalFunction () from samp-server.exe
    5. [debug] #2 00000458 in public OnPlayerCommandText (0, 339160) from script.amx
  • Jeffry schrieb:

    Dem Log nach wurde erneut ocmd aufgerufen, für den Befehl. Prüfe das bitte nochmal.
    ocmdOnPlayerCommandText
    Ah, stimmt das wollte ich auch noch kommentieren! Liegt es vielleicht daran, weil sich ocmd zwischen OnPlayerCommandText klemmt? Weil der ocmd Befehl ist auf jeden Fall auskommentiert.

    Quellcode

    1. public OnPlayerCommandText(playerid, cmdtext[])
    2. {
    3. if(!strcmp(cmdtext, "/inventory", true)) {
    4. new frmt[496];
    5. for(new i=0; i < MAX_PLAYER_ITEMS; i++) {
    6. if(Items[i][itemBesitzerID] != PlayerAccount[playerid][playerDBID])continue;
    7. format(frmt, sizeof(frmt), "%s%d. Item: %s (%d) | Amount: %d | Total Weight: %0.2f\n", frmt, i+1, getItemName(Items[i][itemID]), Items[i][itemID], Items[i][itemAmount], (ItemList[Items[i][itemID]][itemlWeight]*Items[i][itemAmount]));
    8. //Items[i][itemName]
    9. }
    10. if(!strlen(frmt))return SendClientMessage(playerid, -1, "Es befinden sich keine Items in deinem Inventar.");
    11. return SendClientMessage(playerid, -1, frmt);
    12. }
    13. return 0;
    14. }
    Alles anzeigen
  • malE schrieb:

    Weil der ocmd Befehl ist auf jeden Fall auskommentiert.
    Hast du irgendwo im Code noch etwas anderes, das "inventory" heißt?


    malE schrieb:

    Liegt es vielleicht daran, weil sich ocmd zwischen OnPlayerCommandText klemmt?
    ocmd setzt sich vor OnPlayerCommandText hin, von daher kommt er wohl dort erst gar nicht an.
    Klappt es denn, wenn du den strcmp Befehl mal "/xinventoy" nennst?
  • Jeffry schrieb:

    Hast du irgendwo im Code noch etwas anderes, das "inventory" heißt?
    Keinen weiteren Befehl, aber ein enum.

    Quellcode

    1. enum enum_Inventory {
    2. inventoryID,
    3. inventoryBesitzerID,
    4. inventorySize
    5. }
    6. new Inventory[MAX_INVENTORY][enum_Inventory];


    Jeffry schrieb:

    ocmd setzt sich vor OnPlayerCommandText hin, von daher kommt er wohl dort erst gar nicht an.
    Klappt es denn, wenn du den strcmp Befehl mal "/xinventoy" nennst?
    Leider der gleiche Fehler.
  • malE schrieb:

    Leider der gleiche Fehler.
    Trotz dass du /xinventory im Spiel eingegeben hast, und den ocmd Befehl nicht geändert hast (auskommentiert gelassen)?
    Falls ja, was passiert, wenn du es zu /abcxyz umbenennst?


    malE schrieb:

    Keinen weiteren Befehl, aber ein enum.
    Es wäre ansonsten eventuell ein Versuch wert, das enum, die Werte im enum und das Array umzubenennen, von Inventory zu "xyInventar" (nur testweise, kann dann ja nochmal umbenannt werden).
    Wäre zumindest eine gewisse Erklärung, dass ocmd versucht, das Array, da es fast gleich heißt, auszuführen, was ja nicht geht.
  • Jeffry schrieb:

    Trotz dass du /xinventory im Spiel eingegeben hast, und den ocmd Befehl nicht geändert hast (auskommentiert gelassen)?
    Ja...

    Jeffry schrieb:

    Falls ja, was passiert, wenn du es zu /abcxyz umbenennst?
    Gleicher Fehler...

    Jeffry schrieb:

    Es wäre ansonsten eventuell ein Versuch wert, das enum, die Werte im enum und das Array umzubenennen, von Inventory zu "xyInventar" (nur testweise, kann dann ja nochmal umbenannt werden).
    Wäre zumindest eine gewisse Erklärung, dass ocmd versucht, das Array, da es fast gleich heißt, auszuführen, was ja nicht geht.
    Wie von dir beschrieben ein Prefix eingefügt, aber ändern tut sich leider auch nichts...
  • Hey, wie kann ich einen String anders definieren als mit:

    PAWN-Quellcode

    1. #define DELETE "Entfernen"


    Ich hab vor das man in einem Dialog erst Entfernen eintippten muss bevor man ein Objekt löschen kann.. das Problem ist das mit der #define Methode die Gänsefüße mit geschrieben werden müssen. Wie kann ich es am besten lösen das man Entfernen ohne Gänsefüße eintippen kann?
  • Jeffry schrieb:

    Trastan schrieb:

    Ja er speichert wie voher auch als wenn ich im himmel den server verlasse spawne ich auch im himmel ander selben z cordinate
    Hast du dir die Werte denn per Print mal vor und nach MapAndreas ausgeben lassen? Wenn ja, was kommt raus?

    malE schrieb:

    Danke! Das Problem lag tatsächlich daran, aber warum?
    Allerdings bleibt der gleiche Fehler, wenn ich meinen Befehl aufrufe.
    Die Meldung kam in dem Fall dann vom Debug Modus.
    Tritt der Fehler denn nur bei dem Befehl auf, oder auch bei anderen Befehlen?
    Hast du mal versucht, den Befehl als "strcmp" Befehl anzulegen, und den ocmd Befehl zu entfernen, klappt es dann?

    2102.222656 SpielerWert
    2102.222656 SpielerWert

    das bekomme ich raus so habe ich es jetzt

    PAWN-Quellcode

    1. GetPlayerPos(playerid, SpielerInfo[playerid][pLastX], SpielerInfo[playerid][pLastY], SpielerInfo[playerid][pLastZ]);
    2. printf("%f SpielerWert",SpielerInfo[playerid][pLastX], SpielerInfo[playerid][pLastY], SpielerInfo[playerid][pLastZ]);
    3. MapAndreas_FindZ_For2DCoord(SpielerInfo[playerid][pLastX], SpielerInfo[playerid][pLastY], SpielerInfo[playerid][pLastZ]);
    4. printf("%f SpielerWert",SpielerInfo[playerid][pLastX], SpielerInfo[playerid][pLastY], SpielerInfo[playerid][pLastZ]);
    C# << Das beste :thumbup:

  • malE schrieb:

    Wie von dir beschrieben ein Prefix eingefügt, aber ändern tut sich leider auch nichts...
    Füge bitte mal den Befehl ein:

    PAWN-Quellcode

    1. if(!strcmp(cmdtext, "/testabc", true))
    2. {
    3. printf("Befehl ausgrführt.");
    4. return 1;
    5. }

    Kommt der Print dann im Server Log an, oder erscheint auch wieder ein Fehler?

    Falls das geht, poste bitte, wie du "getItemName" definiert hast, und wie "Items" deklariert ist.
  • Jeffry schrieb:

    Falls das geht, poste bitte, wie du "getItemName" definiert hast, und wie "Items" deklariert ist.
    Jetzt funktioniert's! Du hast mich mit dem Satz daran erinnert, dass ich vergessen habe die Array Größe in der Variable einzutragen. :thumbsup:
    Anschließend hab ich es noch mal getestet, jetzt wird der Befehl ausgeführt und kein Error mehr in der Konsole ausgelöst. Danke!! ^^
  • malE schrieb:

    Jetzt funktioniert's! Du hast mich mit dem Satz daran erinnert, dass ich vergessen habe die Array Größe in der Variable einzutragen.
    Ahh perfekt! Sowas dachte ich mir nämlich, als es mit keinem der Befehle ging.
    Nur blöd, dass crashdetect das nicht sauber aus gibt. Eine "Index out of bound" Meldung wäre sinnvoller gewesen. Gut, dass es jetzt geht.



    Nikiark schrieb:

    @\gamemode\GTA SERVER\pawno\include\core.inc(12) : error 042: invalid combination of class specifiers
    Ich verweise hier mal auf:
    [jTool] PAWN Errors & Warnungen - Deutsche Übersetzung +++ Erklärungen

    Jeffry schrieb:

    Eine Funktion oder eine Variable ist unerlaubterweise sowohl als "public" als auch als "native" gekennzeichnet. Andere Kombinationen können ebenfalls nicht unterstützt werden, so kann eine Funktion zum Beispiel nicht gleichzeitig "public" und "stock" sein (eine Variable jedoch kann jedoch mit "public" und "stock" deklariert werden).

    Da der Fehler in der core.inc Zeile 12 kommt, welche folgende ist:

    PAWN-Quellcode

    1. native heapspace();

    Könnte es sein, dass du irgendwo nochmal "heapspace" definiert hast, in einer Include oder im Gamemode?

    Andernfalls kannst du versuchen, die aktuellen Includes nochmal herunterzuladen:
    sa-mp.com/download.php

    Achte auch darauf, die pawno.exe direkt zu öffnen, und deinen Gamemode dann über "Öffnen" auszuwählen. Sonst kann es sein, der Compiler wird aus einem anderen Verzeichnis gezogen.
  • Wie schreibt man am besten Array-Übergreifend?
    Ich habe nämlich eine kleine Struktur von drei Enums, die aber miteinander "kommunizieren" müssen.

    Als Beispiel: Ich möchte aus dem Enum "Items" über die 'itemID' den korrekten 'itemName' aus dem Enum "ItemList" herausbekommen.
    Dieses Prinzip halt auch mit anderen Variablen wie z.B. 'itemInventoryID' aus Enum "Items" um es mit der 'inventoryID" aus dem Enum "Inventory" zu vergleichen.

    Ich habe es schon mit Schleifen ausprobiert, allerdings bekomme ich nicht die gewünschte Variable heraus.

    Struktur

    Quellcode

    1. enum enum_Inventory {
    2. inventoryID,
    3. inventoryBesitzerID,
    4. inventorySize
    5. }
    6. new Inventory[MAX_INVENTORYS][enum_Inventory];
    7. enum enum_ItemList {
    8. itemlID,
    9. itemlName[24],
    10. Float:itemlWeight,
    11. itemlUseFunction[31],
    12. itemlDescription[96]
    13. }
    14. new ItemList[MAX_ITEMS][enum_ItemList];
    15. enum enum_Items {
    16. itemInventoryID,
    17. itemID,
    18. itemAmount
    19. }
    20. new Items[MAX_PLAYER_ITEMS][enum_Items];
    Alles anzeigen