Ergebnis 1 bis 20 von 232

Thema: DynRPG - Der Pluginwunschthread

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Der Code hier müsste theoretisch gehen, für deinen Fall. Aber nur unter der Annahme, dass das Plugin, was du aufrufst, wirklich nur parsedData verwendet und nicht versucht, irgendwas mit text, nextScriptLine oder so zu machen:

    Code:
    typedef bool __cdecl (*ONCOMMENT_CALLBACK)(const char *, const RPG::ParsedCommentData *, RPG::EventScriptLine *, RPG::EventScriptData *, int, int, int, int *);
    
    HINSTANCE hInstOtherPlugin = GetModuleHandle("name_of_other_plugin");
    if(hInstOtherPlugin) {
    	ONCOMMENT_CALLBACK alienOnComment = GetProcAddress(hInstOtherPlugin, "onComment");
    	if(alienOnComment) {
    		RPG::ParsedCommentData fakeCommentData = {0};
    
    		strcpy(fakeCommentData.command, "command_to_be_called");
    		fakeCommentData.parametersCount = 2;
    
    		fakeCommentData.parameters[0].type = RPG::PARAM_NUMBER;
    		fakeCommentData.parameters[0].number = 1234;
    
    		fakeCommentData.parameters[1].type = RPG::PARAM_STRING;
    		strcpy(fakeCommentData.parameters[2].text, "Hello World!");
    
    		try {
    			if(!alienOnComment(NULL, &fakeCommentData, NULL, NULL, 0, 0, 0, NULL)) {
    				// Yesss! The other plugin seems to have handled our fake request!
    			} else {
    				// The other plugin returned true, i.e. it probably didn't handle the request
    			}
    		} catch(...) {
    			// Oops, something crashed - maybe the other plugin tried to access something we didn't provide, such as the event script data
    		}
    	} else {
    		// The other plugin seems not to have an onComment handler...
    	}
    } else {
    	// The other plugin seems not to be loaded...
    }

  2. #2
    Ist es möglich, die Menü-Dinger von Row und Aktiv/Passiv in einen Switch umzuwandeln, der irgendwas aktiviert? Mit Save_Switch_1005 hattest du das ja bereits wunderbar für die Menü-Speicherfunktion umgemodelt =)

  3. #3
    Zitat Zitat von Davy Jones Beitrag anzeigen
    Ist es möglich, die Menü-Dinger von Row und Aktiv/Passiv in einen Switch umzuwandeln, der irgendwas aktiviert? Mit Save_Switch_1005 hattest du das ja bereits wunderbar für die Menü-Speicherfunktion umgemodelt =)
    So, wie ich das verstanden habe, gibt es so etwas schon:
    http://rpgmaker.net/forums/topics/13468/

    Unter CMS Tools: Menu Transition Tweaks.

    Aber mein Englisch ist mies, also noch einmal besser selbst durchlesen

    - Das Inno -

  4. #4
    Nein, das bezieht sich darauf, den Übergang vom Menü auf ein eigenes Untermenü (mit dem Save oder Order Switch Plugin) besser zu machen.

  5. #5
    Yo, gibt es die Möglichkeit, irgendwie die Positon der Textbox anzupassen? Es muss nicht die Box sein, die Position der 4 Zeilen text alleine reicht theoretisch.

  6. #6
    Ich sehe, dass man dort Order und Quit für Switches gebrauchen kann, nicht aber Row und Aktiv/Passiv.

    @Cherry: Ist es überhaupt möglich, diese beiden Menüpunkte für Switches zu benutzen?

  7. #7
    Alles ist möglich, es müsste nur wer anpassen. (Nein, ich jetzt nicht.) Du kannst PepsiOtaku ja fragen...

  8. #8
    Wäre es möglich ein Plugin zu schreiben welches den Text aus einer Spritefont zieht und damit die Schriftart des Makers ersetzt?

    Verzweifle nämlich langsam an der Schriftart des Makers und würde diese gerne ersetzen....nur passende Fonts habe ich bis jetzt nur
    auf Spritefonts auf Spriters-Resource gefunden......

  9. #9
    Wenn ich denn mal ein onDrawCharacter-Callback mache (was ich vorhabe), hoffentlich. Im Moment wirds wohl schwierig.

  10. #10
    Nun zu etwas eher Exzentrischen: Ich überlege seit längerem, ob es nicht eine Möglichkeit gibt, Monster in ihrem Level skalieren zu lassen. Das Feature würde ich gerne als Plugin lösen, ich bräuchte also ( mal wieder ) Speicheradressen-Knowhow.

    Ich bräuchte:
    - lesenden und schreibenden Zugriff auf die in der aktuellen Monsterguppe befindlichen Status-Werte ( Atk, Def, Int, Agi , Exp, Gold )
    - lesenden und schreibenden Zugriff auf die Monsterdatenbank und deren Werte. Ich gehe mal davon aus, dass die getMaxHp-Funktionen etc. der Monster auf die Einträge der Datenbank verweisen.

    Was ich tun würde:
    - Werte des Monsters aus der DB auslesen und in eigener Datenstruktur sichern
    - MonsterEintrag in DB und in Monstergruppe mit aktuellen Werten überschreiben
    - Nach Kampfende die Originalwerte zurückschreiben

    Was ich beisteuern kann: (weniger für Cherry als für bugmenot )
    static RPG::CatalogPtr<RPG::Monster *> &monsters = (**reinterpret_cast<RPG::CatalogPtr<RPG::Monster *> **>(0x4CDE64));
    Dort sind die aktuellen Monster.

    Monster (TLcfgMonsterItem) erbt von ( TLcfgUnitItem ), die Aufrufe von getMaxHp werden in DynRPG über die vTable gemacht. Was sind das, Funktionszeiger?

  11. #11
    Zitat Zitat von Corti Beitrag anzeigen
    lesenden [...] Zugriff auf die in der aktuellen Monsterguppe befindlichen Status-Werte

    Keine Ahnung, wie man den Zugriff von RT -(read)-> DB auf RT -(write)-> DB umdrehen kann.

    Zitat Zitat von Corti Beitrag anzeigen
    *> **>(0x4CDE64));
    Da steht mehr als nur die PartySize drin? Hm...

    Zitat Zitat von Corti Beitrag anzeigen
    Monster (TLcfgMonsterItem) erbt von ( TLcfgUnitItem ), die Aufrufe von getMaxHp werden in DynRPG über die vTable gemacht. Was sind das, Funktionszeiger?
    vTable? Nevermind...

    Unter TLcfgMonsterItem und TLcfgUnitItem befinden sich Funktionen zur Vergabe und Berechnung von Werten/Schaden/Logik:

    Geändert von bugmenot (22.01.2014 um 18:02 Uhr)

  12. #12
    Hey, danke für deine Mühen. So hardwarenahes entspricht nicht unbedingt meinem Metier, als verzeih, wenn ich blöde Sachen frage ;-)

    In deiner Tabelle gibt es
    481748(2k)|4BFB28(2k3) <>GetStr

    Die Adresse entspricht dabei der hier aus Cherrys Battler-Klasse.
    Zitat Zitat
    int Battler::getAttack() {
    int ret;
    asm volatile("call *%%esi" : "=a" (ret) : "S" (0x4BFB28), "a" (this) : "edx", "ecx", "cc", "memory"); // GetATK
    return ret;
    }
    D.h. eigentlich müsste ich mir analog dazu mit dem hier 4BD7AC(2k3) <>SetEnemy_Atk, eine setAttack-Funktion basteln können, wenn ich anstatt des this den Zeiger auf das Monsterobjekt übergebe, oder inwiefern irre ich mich da?

  13. #13
    Zitat Zitat von Corti Beitrag anzeigen
    [...]setAttack-Funktion basteln können, wenn ich anstatt des this den Zeiger auf das Monsterobjekt übergebe, oder inwiefern irre ich mich da?
    Also das this als Input ist eigentlich ein Verweis auf die Adresse, an der alle notwendigen Daten für die Kampfteilnehmer geschrieben stehen. Das Problem ist, dass die SetEnemy[XYZ]-Funktionen sich daraus nur die Enemy_ID rauspicken und anhand dieser den Eintrag aus der .ldb laden.

    Also:
    Basteln: ja (Den output hinter jedem call sub_482A80 <>GetEnemyParam mit einem zugewiesenen Wert multiplizieren)
    Aber eher: nein (Ich habe 86 byte Spielraum bei den ganzen SetEnemy[XYZ]-Funktionen. Ich schaue mal, was sich machen lässt. Gib mir einen oder besser zwei Momente.)



    +Post #137 nochmal in Ruhe durchles+

    Du brauchst also eine Funktion, die die gesamte RPG_RT.ldb ausliest und in eine RPG_RT.cdb schreibt, auf die du vollen Zugriff hast, und die Funktionen, die normalerweise aus der .ldb lesen, müssen auf die .cdb umgeleitet werden?

    An offset 0047DDB8 kann man auf den Dateinamen der Datenbank verweisen, aus der gelesen wird. Würde jetzt heißen, man müsste onStartUp "copy RPG_RT.ldb -> create RPG_RT.cdb" machen und dann halt Werte in der .cdb umschreiben. In der RM Interna stand irgendwas über die Struktur der LcfDataBase. Mehr kann ich nicht sagen, weil ich habe keine Ahnung von EDV und so...

Stichworte

Berechtigungen

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