Seite 7 von 12 ErsteErste ... 34567891011 ... LetzteLetzte
Ergebnis 121 bis 140 von 232

Thema: DynRPG - Der Pluginwunschthread

  1. #121
    Irgendwas ist immer

  2. #122
    Das mit dem Shop könnte man storytechnisch erklären - vor dem Rüstungsshopbesuch entledigt sich der Held einfach der Rüstung, um neue anzuprobieren oder so. :]

  3. #123
    Genau, man kann den Helden in der Database mit Unterwäsche einstellen und im Laufe des Spiels die Rüstung drüberzeichnen.

    So hat er dann auch im Shop-Menü ein neutrales Aussehen.

  4. #124
    Hmph, ich habe in letzter Zeit wohl einige Fragen ._.

    Naja, ich will eine halbwegs funktionierende KI mit DynRPG schreiben, problem dabei ich habe keine Ahnung wie man ein Pathfinding skript bastelt, dachte ich mir benutze ich halt das Plugin das schon existiert, leider will ich kein Event bewegen sondern erstmal abfragen ob man es bewegen kann und wie viele Schritte das ganze benötigt. Und das mehrmals hintereinander somit kann ich auch nicht mit einem unsichtbaren TestEvent arbeiten...

    Und wenn ich schon dabei bin, ist es sinnvoll bestimmte Plugins innerhalb meines eigenen Plugins anzuschreiben? Zb. um das Message Box Plugin von Kazesui selber anzusprechen ohne das man dafür einen Comment benutzen muss? Ich könnte ja theoretisch einfach selber die Funktion OnComment aufrufen und meine Parameter angeben, nur keine Ahnung ob das nicht zu Problemen führt ._.

  5. #125
    Zitat Zitat von djeurissen Beitrag anzeigen
    Ich könnte ja theoretisch einfach selber die Funktion OnComment aufrufen und meine Parameter angeben, nur keine Ahnung ob das nicht zu Problemen führt ._.
    Dann würdest du aber - meines Wissens nach - nur deine eigene onComment()-Funktion aufrufen - nicht aber die der anderen PlugIns. Du weißt ja zur Laufzeit auch gar nicht, ob andere PlugIns nun vorhanden sind oder nicht.

    PeAcE
    MorDen

  6. #126
    Theoretisch könnte man GetModuleHandle und GetProcAddress verwenden, um einen Pointer auf ein Callback eines anderen Plugins zu bekommen. Das ist so aber eigentlich nicht vorgesehen; es sei denn ein Plugin stellt bewusst eine zusätzliche Funktion auf diesem Wege zu Verfügung. Es kann aber natürlich funktionieren.

  7. #127
    Naja, wollte ich auch nur wissen dann werde ich mein Plugin halt so gestalten das ich meine KI im Maker schreiben kann XD

  8. #128
    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...
    }

  9. #129
    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 =)

  10. #130
    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 -

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

  12. #132
    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.

  13. #133
    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?

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

  15. #135
    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......

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

  17. #137
    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?

  18. #138
    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 19:02 Uhr)

  19. #139
    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?

  20. #140
    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
  •