Ergebnis 1 bis 20 von 506

Thema: +++ DynRPG - Das RM2k3-Plugin-SDK +++

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erstmal:
    Sowohl onBattlerAction als auch onBattlerActionDone werden pro Charakter mehrfach in Folge ausgelöst. Wenn du eine Handlung genau ein mal abfragen willst, dann solltest du dies in onBattlerActionDone mit success == true machen.

    Code:
    bool onBattlerActionDone (RPG::Battler *battler, bool success)
    {
        if(success && !battler->isMonster() ) // Bei Helden, nur das eine mal nach dem die Handlung wirklich ausgeführt wurde
        {
            if(battler->action->kind == RPG::AK_BASIC &&
               (battler->action->basicActionId == RPG::BA_ATTACK ||
               battler->action->basicActionId == RPG::BA_DEFEND))
            {
                battler->mp = battler->mp + 10;
            }
        }
        return true;
    }
    Ob BA_ATTACK bei mir funktioniert kann ich derzeit nicht testen, da musste dich gedulden ;-)

  2. #2
    @Corti: onDoBattlerAction sollte eigentlich nicht mehrfach ausgeführt werden... Bist du sicher? Das hat nämlich auch keinen success-Parameter.

  3. #3
    Grad getested:

    Helden (BA_DEFEND):
    • onDo 1x
    • onDone 1x

    Monster (AK_SKILL):
    • onDo 11x
    • onDone 12x (davon 1 mal success)

    Immer abwechselnd onDo onDone(!success) ~ 11 mal in Folge, dann passiert die Handlung dann nach ner halben Sekunde kommt "onDone" mit Success.

  4. #4
    Interessante Eigenheit des Makers, ich dachte bisher dass nur onDone mehrmals kommt. Muss ich mal anschauen und berücksichtigen...

  5. #5
    Tja, man lernt nie aus. Btw. hattest du schon Zeit dir meinen Speicherzugriffsfehler anzusehen?

  6. #6
    Oje, ich hab noch nichtmal in die PM geschaut und so die liebe Geburtstagsüberraschung versäumt...!!

    Naja, zum Problem:

    1) Du überprüfst nicht ob ev != NULL, dadurch crashst du natürlich sofort weil im Titelscreen kein Event #1 vorhanden ist.
    2) doesEventPageExist funktioniert nicht weil ich einen Fehler gemacht habe.

    Du kannst derweil diese gefixte Version von doesEventPageExist verwenden:

    Code:
    bool doesEventPageExist(RPG::Event *event, int id) {
    		void **script;
    		asm volatile("call *%%esi" : "=a" (script), "=d" (RPG::_edx) : "S" (0x47A0D0), "a" ((**reinterpret_cast<void ****>(0x4CDD14))[15]), "d" (event->id) : "ecx", "cc", "memory");
    		NamedCatalogPtr<void *> pages;
    		pages.ptr = reinterpret_cast<NamedCatalog<void *> *>(script[5]);
    		return pages[id] != NULL;
    }

  7. #7
    Geil, dankeschööön =D

  8. #8
    @Corti MP wird immernoch nicht regeniert bei einem Angriff und wenn ich nun Abwehr ausführe crasht mir das Spiel XD


  9. #9
    Welche GCC-Version hast du?

  10. #10
    Uhm 4.6.1
    das spielt crasht auch nur wenn ich isMonster() abfrage :>

    Geändert von Tokio (13.02.2013 um 20:17 Uhr)

  11. #11
    Kann ich die DLL mal haben? isMonster kann nämlich eigentlich gar nicht crashen (außer "battler" wäre ein ungültiger Pointer), schon gar nicht mit Adresse 0x00000001, weil es nämlich nur den (nicht in der Dokumentation verzeichneten) ersten Member von jeder Makerklasse, nämlich vTable, mit einem Wert vergleicht.

    Wen es interessiert:
    Code:
    	bool Battler::isMonster() {
    		return vTable == reinterpret_cast<void **>(0x4BD35C);
    	}

  12. #12
    Habe die DLL per PM erhalten.

    Es sieht eigentlich so aus als würde der Compiler davon ausgehen dass die Klassenmethoden thiscall (die MS Visual C++ Variante) als Calling Convention verwenden, sie verwenden aber cdecl mit this als erstem Parameter. Dadurch geht das ganze schief. Daher wurdert es mich gerade sehr dass das Problem bei 4.6.1 auftritt (bist du sicher dass du diese Version hast, und nicht etwa Code::Blocks seinen eigenen GCC verwendet? Überprüfe die Pfadeinstellungen mal.), weil das nämlich erst in GCC 4.7.x geändert wurde.

    Du könntest versuchen in den Projekteinstellungen einzustellen dass dem GCC der Parameter -mabi=sysv mitgegeben wird.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •