Beiträge von malE

    Hallo,


    ich bitte mit diesem Thread um eure Ideen und vor allem Erfahrung zum Thema "Berufsbildung im Wandel".
    Was kommt euch als aller erstes in den Sinn und was sind eure Sorgen und Bedenken für die Zukunft diesbezüglich. Wie wird deiner Meinung nach die Erwerbstätigkeit der Zukunft aussehen?


    Freue mich auf zahlreiche Antworten und Meinungen. :thumbup:


    Grüße

    Vielen Dank! :thumbup:
    Um nun auch andere Variablen wie z.B. das Gewicht, Funktion und Beschreibung zu beziehen, soll ich dann die Funktion entsprechend umschreiben? Oder was wäre die beste Lösung deiner Meinung nach?

    Kommt drauf an, wie die Zuweisung stattfindet, sprich welchen Wert itemID hat, den von item1ID, oder den des Indexes.


    Beim Index:


    printf("Name: %s", ItemList[Items[idx][itemID]][item1Name]);

    Ich lese die itemID aus der Datenbank aus:


    Mein Problem ist gerade allerdings, wie ich den von dir beschriebenen korrekten Index für das Item bekomme. Nebenbei: wie definiere ich MAX_PLAYER_ITEMS so, dass jeder Spieler maximal z.B. 20 verschiedene Items tragen kann. MAX_PLAYER_ITEMS (20*MAX_PLAYERS) ? :/ Ich kriege nämlich, wenn ich das Gewicht von Item 2 haben möchte, dass Gewicht von Item 3.

    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.


    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. :thumbup:
    Anschließend hab ich es noch mal getestet, jetzt wird der Befehl ausgeführt und kein Error mehr in der Konsole ausgelöst. Danke!! ^^

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

    Ja...


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

    Gleicher Fehler...


    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...

    Hast du irgendwo im Code noch etwas anderes, das "inventory" heißt?

    Keinen weiteren Befehl, aber ein enum.

    Code
    enum enum_Inventory {
        inventoryID,
        inventoryBesitzerID,
        inventorySize
    }
    new Inventory[MAX_INVENTORY][enum_Inventory];


    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.

    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.

    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". ?(

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

    Geht die Meldung im Compiler denn weg? Falls nein, hast du eine "pawn.cfg" im pawno Ordner für den Debug Modus drin? Wenn ja, entferne diese bitte mal und versuche es dann nochmal

    Danke! Das Problem lag tatsächlich daran, aber warum?
    Allerdings bleibt der gleiche Fehler, wenn ich meinen Befehl aufrufe.

    Hast du irgendwelche Warnungen im Compiler stehen, oder eine Meldung bezüglich Stack/Heap Size

    Code
    Header size:           4028 bytes
    Code size:            71924 bytes
    Data size:           339288 bytes
    Stack/heap size:      80000 bytes; estimated max. usage: unknown, due to recursion
    Total requirements:  495240 bytes


    Entferne auch mal das str[256], aus dem Befehl, das ist ungenutzt, eine Warnung müsste daher mindestens da sein.

    Gleicher Fehler.

    Warum wird beim Aufrufen des Befehls, ein "Run time error" ausgelöst?


    Code
    [debug] Run time error 5: "Invalid memory access"
    [debug] AMX backtrace:
    [debug] #0 00009960 in public ocmd_inventory (playerid=0, params[]=@00052d84 " ") at ...\sampserver\pawno\include\modules\inventory\invInventory.inc:63
    [debug] #1 native CallLocalFunction () from samp-server.exe
    [debug] #2 000004c8 in public OnPlayerCommandText (playerid=0, cmdtext[]=@00052d58 "/inventory") at ...\sampserver\pawno\include\includes\ocmd.inc:78


    [pwn=60]
    ocmd:inventory(playerid, params[]) {
    new str[256], frmt[496];
    for(new i=0; i < MAX_PLAYER_ITEMS; i++) {
    if(Items[i][itemBesitzerID] != PlayerAccount[playerid][playerDBID])continue;


    format(frmt, sizeof(frmt), "%s%d. Item: %s (%d) | Amount: %d | Total Weight: %0.2f\n", frmt, i+1, /*Items[i][itemName]*/getItemName(Items[i][itemID]), Items[i][itemID], Items[i][itemAmount], (ItemList[Items[i][itemID]][itemlWeight]*Items[i][itemAmount]));
    }
    if(!strlen(frmt))return SendClientMessage(playerid, -1, "Es befinden sich keine Items in deinem Inventar.");
    return SendClientMessage(playerid, -1, frmt);
    }
    [/pwn]