Integer gibt komische nie definierte Zahlen aus



  • Ganz einfach: action hat keinen der aufgelisteten Werte, im default-Zweig wird npc nicht gesetzt und ist damit undefiniert.



  • Cyres schrieb:

    Den richtigen Code posten: reduziertes compilierbares Beispiel

    Wäre nett, wenn du Dir das mal zu Herzen nehmen würdest, 900 Zeilen sind nicht gerade übersichtlich, auch wenn davon sehr viel ähnlich ist.

    Ja ich hab noch vor die x hundert if's zu einer einzigen Anweisung umzubasten, aber vorerst funktioniert müssen alle codezeilen enthalten sein, damit das Script überhaupt soweit kommt den integer zu benutzen ^^

    Benutzt wird der int ab Zeile 636..


  • Mod

    npc = action - (GOSSIP_ACTION_INFO_DEF+10) + 200001;
    

    ?


  • Mod

    Bitte nicht über diese riesige WAND an un- optimierten Code meckern mir ging es vorerst um die Funktion, da bisher niemand wusste, ob sowas überhaupt machbar ist..

    Der Kritikpunkt ist nicht die Suboptimalität, sondern DRY. Und dieses resultiert definitiv nicht aus fehlender Optimierung.



  • Schreib mal nach allen default:s einfach

    throw "What is this?";
    

    und guck was passiert. 😉



  • cooky451 schrieb:

    Schreib mal nach allen default:s einfach

    throw "What is this?";
    

    und guck was passiert. 😉

    Vor oder nach dem break;?


  • Mod

    Baeumchen schrieb:

    Vor oder nach dem break;?

    Ich hoffe, dass ist Sarkasmus.

    Nebenbei:
    Die String-Makros im Header sind auch nicht zu beschönigen.



  • Falls das kein Sarkasmus war, erst mal ein totales Anfängerbuch kaufen scheint mir eine gute Idee zu sein.
    http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list



  • Erklärungen:

    GOSSIP_ACTION_INFO_DEF+x Beschreibt einen Menü eintrag...
    OnGossipSelect - Wird jedes Mal beim Klick auf einen Menü Eintrag (GOSSIP_ACTION_INFO_DEF+x) aufgerufen

    Das ganze ist ein Menü mit verschiedenen Untermenüs:

    Bei klick auf einen Eintrag im 1. Menü (GOSSIP_ACTION_INFO_DEF+1 - GOSSIP_ACTION_INFO_DEF+9) wird ein zweites Menü aufgerufen... Beim klick auf einen Eintrag im zweiten Menü (GOSSIP_ACTION_INFO_DEF+10 - GOSSIP_ACTION_INFO_DEF+102) soll npc eine einzigartige id bekommen, um ein Monster im Spiel zu spawnen, dass dem Klick des Menü Eintrags entspricht...

    Alle IF- Anweisungen, inder npc einen Wert bekommen soll werden später noch zu einer if zusammen gefasst...


  • Mod

    Alle IF- Anweisungen, inder npc einen Wert bekommen soll werden später noch zu einer if zusammen gefasst...

    Wieso führst du so triviale Aufgaben nicht sofort durch? Das würde die Lesbarkeit und dadurch die Fehlersuche erheblich beinflussen.

    Edit: Dir fehlen Grundlagen, ich bekräftige cooky451' Post.


  • Mod

    • schrieb:

    Alle IF- Anweisungen, inder npc einen Wert bekommen soll werden später noch zu einer if zusammen gefasst...

    Wieso führst du so triviale Aufgaben nicht sofort durch? Das würde die Lesbarkeit und dadurch die Fehlersuche erheblich beinflussen.

    Oder diese Zwischenstation gleich ganz auslassen und bei Menüaktionen gleich die gewünschte Aktion durchführen:

    if (event)
     action = X;
    if (anderes_event)
     action = Y;
    
    if (action == X)
     tu_was();
    if (action == Y)
     tu_was_anderes();
    

    ->

    if (event)
     tu_was();
    if (anderes_event)
     tu_was_anderes();
    

    Natürlich nicht unbedingt hardcodiert (außer es handelt sich wirklich um fundamentale Vorgänge) sondern dynamisch. Code ist als Pseudocode zu verstehen. if-Kaskaden besser durch geeignete Datenstruktur (z.B. map) ersetzen.



  • cooky451 schrieb:

    Schreib mal nach allen default:s einfach

    throw "What is this?";
    

    und guck was passiert. 😉

    Danke 🙂 Das Problem war also eine fehlerhafte Verschachtelung..

    Ich habe nun alle if's, die eine npc id setzen sollen zusammengefasst und im default npc = 0 gemacht.. Nun läuft alles einwandfrei.. Das Problem ist also gelöst.

    PS: Ich bin in der Tat ein Anfänger, aber zum Glück hab ich solch ein Buch hier schon liegen 😃



  • Zumal man in diesem Fall eh

    npc = 200000 + action - GOSSIP_ACTION_INFO_DEF - 9
    

    schreiben könnte.



  • Nathan schrieb:

    Zumal man in diesem Fall eh

    npc = 200000 + action - GOSSIP_ACTION_INFO_DEF - 9
    

    schreiben könnte.

    dann würde npc aber eine andere id bekommen, als gewünscht.. Es soll ja keine Rechnung, sondern eine Zuweisung sein 🙂



  • Nehmen wir mal an GOSSIP_ACTION_INFO_DEF ist 0 und action ist 10.
    Dann erhält npc den Wert 200000 + 10 - 0 - 9 = 20001, also wie gewünscht.


  • Mod

    Baeumchen schrieb:

    dann würde npc aber eine andere id bekommen, als gewünscht..

    Wieso? Was wäre denn anders?

    Es soll ja keine Rechnung, sondern eine Zuweisung sein

    Wenn das im allgemeinen keine einfache Rechnung ist (hier ist es eine einfache Rechnung!) dann mach es trotzdem nicht mit einer if/switch-Kaskade. Ein einfaches Feld, mit der Verbindung Feldindex<->gewünschte ID wäre schon eine sehr große Verbesserung. Allgemeiner geht es mit anderen Datenstrukturen, die in deinem Lehrbuch (hoffentlich) bald drankommen.

    P.S.: Außerdem habe ich diese Rechnung schon auf Seite 1 vorgeschlagen, aber anscheinend hat es niemand bemerkt 🙂 .



  • SeppJ schrieb:

    Außerdem habe ich diese Rechnung schon auf Seite 1 vorgeschlagen, aber anscheinend hat es niemand bemerkt 🙂 .

    Was? Oh, stimmt. KOmisch, ist mir echt nicht aufgefallen.
    Wenn ich es nicht besser wüsste, würde ich sagen, du hättest dich nachträglich reingeschummelt. 😉


  • Mod

    Ich dachte indes, SeppJ hätte sich über eine Code-Zeile gewundert, daher habe ich diese tatsächlich im Header gesucht...


Anmelden zum Antworten