Seite 108 von 117 ErsteErste ... 85898104105106107108109110111112 ... LetzteLetzte
Ergebnis 2.141 bis 2.160 von 2331

Thema: Programmwunsch und -erstellungsthread #2

  1. #2141
    Es gibt schon Klassen für die internen Arraystrukturen ,wie z.B. DArray bzw. DList...

    was genau hast du da vor? Ich versteh das momentan grade nicht.

  2. #2142
    Direct Menu Patch
    download DirectMenuPatch(fix)





    Geändert von bugmenot (16.05.2015 um 16:07 Uhr)

  3. #2143
    Langsam verlier ich den Überblick über diese ganzen Menüpatches. xD
    Da gibt es welche, um Menüpunke direkt zu öffnen, welche um Menüpunkte auszuhebeln, dann noch VisuMenu für generelles umgestalten, Cherrys MapInMenu und von allen irgendwie zig verschiedene Versionen und dann noch für 2k/2k3 und manche als Plugin und aaaah. D8
    Ich glaub ich such die mal zusammen und mach nen "Pimp my menu"-Thread oder so. °3°

  4. #2144
    Besten Dank!

  5. #2145
    Update

    ... da ist jetzt ein Patch für 2k3 mit bei, sowie ein Bugfix für die 2k Version (bei leerer Party kein Crash mehr).

    Zitat Zitat von goldenroy Beitrag anzeigen
    "Pimp my menu"
    ... es müsste eigentlich auch möglich sein mit einem geupdateten SystemClock w/ Foreground & Background Plugin noch mehr Zeug in die ganzen anderen Menüs reinzupacken.

    Ohne mal an zusätzliche Möglichkeiten des Zugriffs von DynRPG (irgendwann vielleicht) auf Menünavigation zu denken (Ordnungsfunktion + Reihenwechsel in Einem. Wie in den gängigen klassischen Rollenspielen... so mal als Beispiel)



    Edit:
    Zitat Zitat von Cherry Beitrag anzeigen
    Es gibt schon Klassen für die internen Arraystrukturen, wie z.B. DArray bzw. DList...
    Solange ein Battler noch nie angegriffen wurde, ist
    Code:
    call sub_4A6014
    mov eax,[eax+30h]
    immernoch gleich Null. Lese- und Schreibzugriff auf das Array mit den ganzen Attributresistenzen ist somit nicht möglich. Man kann vielleicht noch über die Klassen Actor und Monster(nicht "subtype of battler") die ganzen Resistenzen auslesen.

    Andere Frage: mit
    Code:
     int MonGroupID = ( **reinterpret_cast<long ***> (0x4CDD38) ) [3];
     bool BatDefeat = ( **reinterpret_cast<char ***> (0x4CDD38) ) [132];
     bool BatVictory = ( **reinterpret_cast<char ***> (0x4CDD38) ) [133];
    kommt man an einige Informationen ran... wie dreht man das jetzt aber um (einen Pointer erhalten, über den man neue Werte setzen kann)?

    Und wie kann man Code wie
    Code:
    mov eax,[eax]
    mov eax,[eax+8]
    mov eax,[eax+8]
    gescheit in C++ umsetzen?



    Zitat Zitat von Cherry Beitrag anzeigen
    was genau hast du da vor?
    Wenn man mittels RPG:: Action die Parameter kind, basicActionId, skillId, monsterId, itemId, target, targetId setzen würde... sowie
    target an [[0x4CDD38]+B0h],
    targetId an [[0x4CDD38]+B4h] und
    Hero_ID (bzw. -1 if isMonster=true) an [[0x4CDD38]+B8h]
    schreiben würde, dann würde es noch lange nichts nützen, solange
    Code:
    call sub_4A6014
    xchg eax,edx
    mov eax,off_4CDD38
    mov eax,[eax]
    mov eax,[eax+5Ch]
    call sub_4175DC
    nicht aufgerufen wird (entspricht manuellem Ausführen eines Kampfbefehls... wäre nützlich für Kontern, eigene KI, SkillCombo, etc.)

  6. #2146
    http://rpg-maker.cherrytree.at/dynrp...c8c3785a52161a ?

    Und wegen "umdrehen": Eine Referenz erstellen - int &monGroupID, etc.

    Sowas wie dein +8 +8 Beispiel würd ich so direkt natürlich nicht einbauen (außer halt eben wenn ich noch keine Strukturen habe, aber das ist ja da nicht der Fall), sondern - mal davon ausgehend dass da von einem TCatalog die Länge willst - einen DListPtr setzen und die length property verwenden (dafür ist sie ja da).

  7. #2147
    Zitat Zitat von Cherry Beitrag anzeigen
    Habe ich übersehen. Kann mit der Information vielleicht etwas anfangen, wenn ich insgesamt mehr als 3-4 Stunden Erfahrung mit C++ habe.

    @DArray
    Du meinst, dass sich über
    Code:
    static RPG::DArrayPtr *&namegoeshere = (**reinterpret_cast<RPG::DArrayPtr ***>(0xoffset));
    mit dem angepointerten Array arbeiten lässt?

    Andere Frage: hat man per Plugin Zugriff auf den address space von der RPG_RT.exe Applikation? Lesen und Schreiben geht ja über reinterpret_cast bereits. Was mir persönlich fehlt, ist ein bequemes Angeben von Funktionsadressen aus der RPG_RT zum Ausführen jener Funktionen und um schnell mal ein paar dutzend Sachen durchzuprobieren.

    Edit³:
    Dammit... Soetwas wie:
    Code:
    function RuntimeFunction(RPG::AppropriateClass *PtrOnObject, int x, int y) {
    	int ret;
    	asm volatile("call *%%esi" : "=a" (ret), "=d" (RPG::_edx), "=c" (RPG::_ecx) : "S" (0xFunctionOffset), "a" (Object), "d" (x), "c" (y) : "cc", "memory");
    	return ret;
    }
    Werde das beizeiten mal auseinandernehmen. Der Aufbau hiervon sagt mir nur leider nicht viel, außer dem Zuweisen der %Register.



    Ach und: Bugfix.

    Im 2k3 fehlt im Database Editor der Zugriff auf einen Parameter von Skills (dieses "failure message" Ding beim 2k). Wenn man Skills löscht und neue erstellt, dann setzt sich der Parameter zurück auf 'magic type evasion' und ignoriert AGI-Werte und Conditions für die Berechnung von Trefferwahrscheinlichkeiten.

    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    SkillAccuracyFix=49C69A,38000F84
    Wenn man ATK influence auf Null setzt, dann werden AGI-Werte und Zustandsänderungen (wie Blind) ignoriert (für klassische Zauber). Damit eine Ausweichrate durch AGI berücksichtigt wird, muss man die ATK influence auf 1 oder höher setzen.


    Und nochmal:
    Wenn AGI(target) / AGI(user) gegen Null läuft:
    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    AccuracyFix=49B4E8,EB04,49B4F4,EB04,49C70E,EB04,49C71A,EB04
    Falls die Trefferrate nicht bei 50% hängen bleiben soll, egal wie blind der Nutzer eines Skills ist.



    Edit:
    Oder für Diejenigen, welche den Int Stat nicht für die Schadensberechnung nutzen
    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    SkillAccuracyFix=49C69A,3C000F85
    AGI und conditions ignorieren, solange INT influence größer/gleich 1 ist.


    Edit²:
    Oder wenn sich die Skill_ID innerhalb eines festlegbaren ID-Bereiches befindet, gehen AGI und conditions in die Trefferrate mit ein:
    Zitat Zitat von DynRPG.ini
    [Quickpatches]
    SkillAccuracyFix=49C698,E940A8FAFF,446EDD,817B04000000007C0D817B04000000000F8EAF570500E974580500
    SkillAccFixRange=446EE0,#1,446EE9,#2

    Geändert von bugmenot (28.10.2014 um 22:37 Uhr)

  8. #2148
    SkillSubsets sollten nun wieder funktionieren.
    Und ein paar kleine Änderungen... nützlich für "Stehlen" Fähigkeiten oder Ähnliches (siehe Readme).
    "Miss!" Verarbeitung wurde etwas verbessert.
    Einen Fehler beseitigt, bitte nocheinmal herunterladen:

    Update/BugFix (19.02.2015); Crash bei explodierenden Gegnern.
    RowPhysSkills[+] (2k3)
    download RPS[+]













    Ich hatte eigentlich vorgehabt Sachen nicht mit reinzunehmen, die man per Plugin erreichen kann... was soll's.

    Edit:
    download DBX.ini
    (höhere DmgMul[A|B|C|D|E] für Attribute)

    Geändert von bugmenot (19.02.2015 um 01:42 Uhr)

  9. #2149
    Nur interessehalber? Was für ne Form von Logik steckt hinter so einem fix? Steht da irgendwo in der AddCondition-Funktion ein StopMovement oder wie hat man sich sowas vorzustellen?

    Btw. führt das Wechseln von Waffen zu einem ähnlichen Effekt.

  10. #2150
    Zitat Zitat von Corti Beitrag anzeigen
    Btw. führt das Wechseln von Waffen zu einem ähnlichen Effekt.
    Ähm... Beispiel? (greift der Fix da nicht mehr?)

    Zitat Zitat von Corti Beitrag anzeigen
    Was für ne Form von Logik steckt hinter so einem fix? Steht da irgendwo in der AddCondition-Funktion ein StopMovement oder wie hat man sich sowas vorzustellen?
    Standardmäßig wird in dieser AddCondition-Funktion der Animation2-Parameter von RPG :: Battler sofort auf "Bad Status" gesetzt. Der Animation2-Parameter "Move back" liegt in dem Moment nicht mehr vor und das Zurückbewegen nach x/y-Pos(return) wird dadurch in der UpdateBattler-Funktion nicht abgehandelt.

  11. #2151
    Hab den Fix nicht ausprobiert. Hab mich nur dran erinnert, dass ich den Effekt daher kannte. Wenn man direkt nach einem Angriff die Waffe eines Helden tauscht, bevor er wiedr an seinem Platz ist, so bleibt er an der Stelle stehen.

  12. #2152
    Edit (18.11.14):
    Edit (24.11.14):
    Kleiner Fix, neue Version:

    StatusAnimationFix[+] (2k3)
    download StatusAnimationFix[+]





    Ersetzt den Vorgänger (SAF.ips)

    Das ist weniger eine Behebung des eigentlichen Fehlers, sondern eher ein Exception Handling für den Fall:
    Animation2 = Idle mit x|y(now) ungleich x|y(return)
    Animation2 (bzw. animationId) wird auf "Move back" gesetzt, FrameCounter der Aktion auf 23 gesetzt. Idle erst, wenn die Bewegung vorbei ist.

    Wer jetzt mit der Positionierung der Battler-Sprites rumspielt, muss darauf achten, dass beim RPG :: Battler die Attribute x, und originalX gleichgesetzt werden müssen (das Selbe für y).

    Geändert von bugmenot (24.11.2014 um 13:57 Uhr)

  13. #2153
    Ich habe noch ein Phänomen für dich.

    Es gibt die Möglichkeit eine Event-Seite in den Monstergroups anzulegen mit der Bedingung "Hero X does Y command". Diese Eventseite wird ausgeführt, wenn der Held beginnt diese Sache zu tun, nicht nachdem er das getan hat.

    • Befehl auswählen
    • Eventseite "does Y command"
    • Held macht Y

    Wenn man nun in dieser Eventseite "does Y command" ein Switch setzt, dass eine andere Eventseite schaltet, dann passiert das hier:

    • Befehl auswählen
    • Eventseite "does Y command" -> Switch1=on
    • Held macht Y
    • Eventseite (if switch1==on) -> Switch1=off


    Das ist genau richtig so. Auf diese Weise kann man vor und nach der Handlung Eventcode ablaufen lassen.
    Leider gibt es Ausnahmen.

    • Wenn der Spieler ein Item anwendet, wird die SwitchEventseite nicht ausgeführt.
    • Wenn der Spieler den Abwehrbefehl anwendet, wird die SwitchEventseite nicht ausgeführt.
    • Wenn der Spieler einen Skill nutzt und mit dieser Skil eine Condition auf den Helden selbst ausgeführt wird, wird die SwitchEventseite nicht ausgeführt.

  14. #2154
    BugFix(2k3)
    download ClassChangeEquipFix

    Wenn man einen Klassenwechsel macht, wurde vorher einfach die gesamte Ausrüstung abgelegt.

    Und: StatusAnimationFix-Update

    @Corti
    Sehe ich mir schon noch an. Ich habe die Dokumentation von BattleEvents irgendwo rumflattern.


    Edit:

    BugFix:
    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    DmgCapper(p1)=49D03B,E8F69DFAFF,446E36,B800000000680F270000E922080000
    DmgCapper(p2)=447667,83FA007C06E83B2CFEFF9258C3
    DmgCapper(min)=446E37,#0
    DmgCapper(max)=446E3C,#9999
    Die Zeilen mit DmgCapper, minDMG, maxDMG damit ersetzen. Der QuickPatch hat vorher negative Schadenszahlen nicht beachtet.
    Edit²:
    Das Ding hat ein Problem damit, wenn absorbierter Schaden durch zu hohe Abwehr auf 0 runtergerechnet wird (Ziele, welche Schaden absorbieren würden, machen nun den oben angebenen Mindestschaden.)
    Edit:
    Falls damit etwas nicht zu funktionieren scheint, proiert die #Zahlen mit HexDezimal-Zahlen zu ersetzen:

    HexConverter
    Setzt die Zahl in das rechte Feld neben dem "big-endian" und nehmt die Zahlenfolge des linken Feldes neben dem "little-endian", fügt die Zahl hinter das Komma eines QuickPatches ein:
    Bsp. DmgCapper(max)=446E3C,0F270000

    (Oder im Windows Rechner -> Alt+3 halten)




    Und: RPS[+]-Update



    Edit³:

    BattleMessenger(2k3)
    download BattleMessenger

    Ausmaße und Position der message box im Kampf über Variablen steuern.
    Dafür müssen alle QuickPatches entfernt werden, die direkt mit der message box im Kampf zu tun haben.

    Geändert von bugmenot (04.12.2014 um 16:47 Uhr)

  15. #2155
    Ich träume immer noch von einem Pixelmovement für die Kamera vom RM2k3. Auch toll wäre es sogar wenn man die Kamera auf ein bestimmtes Bild scrollen lassen könnte. Gibt es dazu schon etwas?

  16. #2156
    Zitat Zitat von Stray Beitrag anzeigen
    Pixelmovement für die Kamera vom RM2k3
    Code:
    int mapOffsetX;     //positiv=rechts, negativ=links
    int mapOffsetY;     //positiv=hoch, negativ=runter
    int scrollSpeed;
    
    //[...] Argumente zuweisen
    
    mapOffsetX = mapOffsetX*16;     //16 je pixel
    mapOffsetY = mapOffsetY*16;     //16 je pixel
    scrollSpeed = scrollSpeed*32;   //"normal" speed = 32 (2x = 64; 1/2x = 16; ...)
    ( **reinterpret_cast<long ***> (0x4CDE54) ) [45] -= mapOffsetX;
    ( **reinterpret_cast<long ***> (0x4CDE54) ) [46] -= mapOffsetY;
    ( **reinterpret_cast<long ***> (0x4CDE54) ) [47] = scrollSpeed;
    Zuweisung der Argumente mapOffsetX/Y und scrollSpeed per onComment callback oder so.
    Frag jemanden (versuch es mal an Schalter 2), der Ahnung von C++ hat.

    Edit:
    Und die originalen Kamerapositionen wiederherstellen:
    Code:
    ( **reinterpret_cast<long ***> (0x4CDE54) ) [45] = 2304;
    ( **reinterpret_cast<long ***> (0x4CDE54) ) [46] = 1792;

    Geändert von bugmenot (18.12.2014 um 19:43 Uhr)

  17. #2157
    Danke. Seit ich im Juli dort nachgefragt habe hat keiner mehr einen Beitrag geschrieben.

  18. #2158
    Zitat Zitat von Corti Beitrag anzeigen
    Wenn man nun in dieser Eventseite "does Y command" ein Switch setzt, dass eine andere Eventseite schaltet, dann passiert das hier:
    [...]
    Das ist genau richtig so. Auf diese Weise kann man vor und nach der Handlung Eventcode ablaufen lassen.
    Leider gibt es Ausnahmen.

    • Wenn der Spieler ein Item anwendet, wird die SwitchEventseite nicht ausgeführt.
    • Wenn der Spieler den Abwehrbefehl anwendet, wird die SwitchEventseite nicht ausgeführt.
    • Wenn der Spieler einen Skill nutzt und mit diesem Skill eine Condition auf den Helden selbst ausgeführt wird, wird die SwitchEventseite nicht ausgeführt.
    Bei einem RPG :: Battler von Typ Actor wird direkt nach einer Aktion das reguläre updateBattleEvents nur mit RPG :: BattleEventUpdateMode = BEUM_BEFORE_ACTION durchgeführt. Bei Battlern vom Typ Monster wird jedoch zuerst RPG :: BattleEventUpdateMode = BEUM_BEFORE_ACTION und dann noch ein RPG :: BattleEventUpdateMode = BEUM_AFTER_ACTION durchgeführt.

    Es gibt jetzt (mindestens) zwei Sachen, die man machen kann:
    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    BatEvUpdate(TypeB)=498985,9090
    Hiermit wird sowohl für Actors/Heroes als auch für Monster erst BEUM_BEFORE_ACTION und dann noch ein BEUM_AFTER_ACTION abgehandelt.

    Oder:
    Zitat Zitat von DynRPG.ini
    [QuickPatches]
    BatEvUpdate(TypeC)=498985,75
    Hiermit gilt für Monster nur BEUM_BEFORE_ACTION, für Actors/Heroes jedoch auch wieder Beides.


    Warum das vorher nur für Monster verwendet wurde, kann ich nicht sagen. Es scheint jetzt zumindest keine Crashes oder irgenwelchen anderen Kram auszulösen*. (*citation needed)

    Geändert von bugmenot (22.12.2014 um 19:38 Uhr)

  19. #2159
    Ich fänds toll, wenn man per Event erkennen könnte, welche der beiden Fenstergrößen gerade aktiv ist und
    dass man diese auch umschalten kann. Ich halte es für verwirrend, wenn man Spielern ein Menü mit vielen
    Einstellungen bietet, aber dann dabei steht, dass dieser Wechsel ausschließlich per F5-Hotkey funktioniert.

    Falls jemand also richtig Langeweile hat: Betrachtet es einfach als kleinen Anstoß [RPG2000-107]

  20. #2160
    Zitat Zitat von MagicMaker Beitrag anzeigen
    Falls jemand also richtig Langeweile hat
    download VarExtender[+]






    Ich würde die Änderung am Eventeditor ja in eine 2k9 uimod packen, aber dazu müsste mir erstmal jemand sagen, wie man in Delphi5 auf eine StringList / Array / was-auch-immer-das-ist zugreift.

    Geändert von bugmenot (21.03.2015 um 01:41 Uhr)

Berechtigungen

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