Kann das nicht Konflikte bei parallel laufenden Events geben, wenn man überall auf diese Var angewiesen ist?
Genau. (bzw. diese lesen den selben Pointer -> selben Switch aus)
Lösungsmöglichkeit: den Patch umstrukturieren, um per SwitchID-Array Switch[Nr. xyz] + 0 bis 99 (im Default-Fall Switch[0001] bis Switch[0100]) auf entsprechende Var[3397] + Switch-Array-Pos zuzugreifen (?)
Was dann nur mehr Mikro Management verlangt im Sinne von "...welcher Pointer wird gerade eben bereits verwendet?"
Ich habe nicht wirklich viel Platz, um die paar Byte zusätzlicher Codezeilen noch unterzubringen.
Edit:
Bzw. was ist schon parallel an einem Prozessor, der Befehle sequenziell verarbeitet? Einfach vor jedem Eventbefehl Condition"Switch[0001] = ON/OFF" die Variable mit dem SwitchPointer entsprechend setzen und der Switch wird eindeutig zugewiesen.
Geändert von bugmenot (12.08.2013 um 11:32 Uhr)
Parallele Events laufen nicht komplett durcheinander. Ein Event läuft solange ungestört, bis es entweder einige Tausend Befehle ausgeführt hat (weiß gerade die Zahl nicht) oder an einen Befehl kommt, der bis zum nächsten Frame wartet (dazu gehört Wait, aber auch das Ende eines PPs oder Befehle wie Open Save Menu, etc.). Daher, wenn man nicht eine Schleife ohne Wait baut (was man eh nicht sollte), sodass man an das Befehlslimit kommt, kann man davon ausgehen, dass zwischen zwei Befehlen die nicht auf das nächste Frame warten (und dazu gehören ja Variablen-/Switch-Operationen und Bedingungen) nichts anderes dazwischenfunkt. So funktionieren letztenendes auch der Item/Eventpointerpatch, der BetterAEP und einige DynRPG-Plugins.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
Ich nehme die Bug-Meldung hiermit wieder zurück. (Bloß der MessageSwitchPatch(Switch_ID = 1 in 0x70844(2k) oder 0x92ED9(2k3)), der den Switch anflippte...)
Der SwitchPointer wirkt sich nicht auf die Event Conditions aus.
P.S.
Nutzen die Event Conditions (links im Event Editor) etwa nicht die selbe Funktion, wie der Eventbefehl zu den Conditions?
Und wird vorher irgendwo die eigene Event_ID hinterlegt?
P.P.S.
Ist der Raum hinter dem BetterAEP nur im 2k3 schon belegt?
Hey das könnte ich auch für mein Projekt gebrauchen ^^ Erfahrungspunkte, Geldwert und das gedroppte Item des Monsters dazu fände ich auch sehr nützlich
Gibt es eigentlich eine Möglichkeit in den String eines Heldennamens (z.B. mit ID 14) zu schreiben und einen anderen String einzutragen, so dass ich dann im Maker das ganze wieder mit \n[14] auslesen könnte?
Ich weiß gerade nicht wie das beim 2k ist, aber beim 2k3 gibt es auf der ersten Seite den Befehl Change Hero Name. Dort kannst du den Helden und den neuen Namen aussuchen.
--YetAnotherDungeonCrawler Makern
Ich mein doch in C++ für ein DynRPG PluginWobei das bringt mich auf den Gedanken... kann man denn nicht durch irgendeinen Ausdruck den Befehl aufrufen? Was sagt mir das hier?
Zitat
Naja z.B. ein Stehlen Script...
Je nachdem welches Item gestohlen wird, müsste man einfach nur per DynRPG den Itemnamen lesen und diesen in den Heldennamen eintragen... dann bräuchte man nur eine Messagebox die ausgibt: \n[14] gestohlen!
Allerdings fällt mir gerade auf, dass man dann irgendwie so was bräuchte wie @store 14 32 (slot 14, itemid 32) und das müsste man wieder per Hand eingeben, wenn sowas nicht funktioniert: @store 14 \v[123]....
Außerdem fällt mir jetzt noch auf, dass wenn man nicht will, dass alle Gegenstände geklaut werden können... müsste man für jedes Item sowieso die ID per Hand eintragen... dann kann man aber gleich alle Namen per
Hand eintragen...
Eigentlich hatte ich noch was... aber mir fällt leider gerade nicht mehr ein, wo ich schon mal so ein Problem hatte, wo ich das schon mal hätte gebrauchen können...
Da hat doch neulich wer ein Plugin gebaut wo man sowas wie "\i[\v[123]]" in Messages verwenden kann... (war das nicht eh Corti?)
Btw: In allen Plugins kann man Zahlenwerte durch Variablen angeben, indem man ein V (oder mehrere für mehrfache Indirection) voranstellt. Dasselbe gilt für N für Heldennamen anstelle von Strings (NV funktioniert dann auch). Das ist ein DynRPG-Feature, das Plugin muss nix extra dafür tun und bekommt gleich den intepretierten Wert geliefert.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
Du meinst sicher den MessageExtender von Morden.
Ah ja, stimmt. Danke.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
Meh...
(RPG_RT 2k3 v1.08 )
[0x98E75 .. 0x98F16]
//GetBattleSpoils-Loop //[0x73935 .. 0x739D6] in RPG_RT 2k v1.07
0x98E7E call sub_4BE860 (get enemy ID's Data(?))
0x98E9B call sub_4BDCEC* (get ExpSpoils)
0x98EB0 call sub_4BDD08* (get GoldSpoils)
0x98EC6 call sub_4BDD24* (get ItemSpoils' ID)
0x98EDD call sub_4BDD40* (get ItemSpoils' %)
0x98EE8 (get Drop = true/false(?))
-> 0x98EF0 jmp if Drop = false (jump over 'AddItem')
0x98F00 call sub_4BDD24* (get ItemSpoils' ID)
0x98F0A call sub_4175DC (AddItem)
Edit:
*GetEnemyData_structure:
push ebx
mov ebx, eax
mov eax, DS: off_4CDE0C //EnemyParamPtr
//DS: off_49AD20 in RM2k
mov eax, [eax]
mov edx, [ebx+0D8]
//[ebx+48] in RM2k
call sub_482A80
//sub_4627EC in RM2k
mov eax, [eax+**]
pop ebx
ret
** (EnemyData)
04 = Enemy_ID
08 = Enemy_Name
0C = EnemyGraphic_Name
10 = Coloration
14 = Enemy_max.HP
18 = Enemy_max.MP
1C = Enemy_Atk
20 = Enemy_Def
24 = Enemy_Int
28 = Enemy_Agi
2C = Transparency_Flag
30 = Drop: Exp
34 = Drop: Gold
38 = Drop: Item_ID
3C = Item_Drop%
40 = Crit_Flag //0|1 = false|true
44 = Crit_Chance (1 in X)
48 = Miss_Flag //0|1 = false|true //256+0|1 in RM2k
4C = highest Condition ID(?)
50 = Condition Resist
//assigned by ID, exists temporarily
54 = highest Attribute ID(?)
58 = Attribute Resist
//assigned by ID, exists temporarily
5C = Move Pool(?)
Geändert von bugmenot (16.08.2013 um 12:35 Uhr)
Zitat von Cherry
DankeZitat von MagicMaker
Klappt sehr fein!
oO; Danke... ich seh leider jetzt erst, das Corti was von Speicheradressen geschrieben hat ^^; das und der Assembler? Code sagen mir leider nix T^T; Hauptsache er kann was damit anfangen ^^Zitat von bugmenot
Wenn DynRPG die Möglichkeit bietet das Ziel eines angewendeten Skills in eine Variable zu schreiben, dann kann man damit (muss nur noch in einen vernünftigen Patch/Plugin) Gegnerdaten direkt aus der Database auslesen. (zB. für einen Analyse-Skill, welcher max.HP/max.MP, Statuswerte, etc. in Variablen schreibt, die man in einer Message wieder ausgeben kann)
Problem bei deinem Stehlen-Skill ist ersteinmal, dass vermerkt werden muss, dass der Gegner schon erfolgreich bestohlen wurde. (nebenbei: Crit% lässt sich ganz gut für Stehl-Erfolg% missbrauchen wenn man die Crit_Flag in der Database ausstellt)
Edit:
Und vielleicht noch im Feld für gedropptes Geld die Item_ID des zu stehlenden Items schreiben (damit man dies einfach in der Database von Hand verwalten kann), die Abrechnung des gedroppten Geldes im BattleWon entfernen, weil: warum tragen die erlegten Wölfe Gold und einen magischen Feuerring bei sich?
...oder im Feld für gedropptes Geld die Item_ID eines zweiten möglichen Monsterdrops (seltenerer Drop) und die entsprechenden % in die Crit% schreiben...
P.S.
Ja, ich suche noch weiter nach Enemy_Battler-Daten (aktuelle HP/MP, Resistenzen, etc.).
Geändert von bugmenot (15.08.2013 um 12:23 Uhr)
Hey :-) In DynRPG kann man direkt im Speicher lesen und schreiben.
So macht Cherry das: (Beispiele)
Lesen:
Schreiben:Zitat
Da die Adressen da mit 4 anfangen und 6-stellig sind nehm ich mal an es sind virtuelle Adressen.Zitat von Umrechnen by Cherry
Handelt es sich dabei um Monster in der Datenbank oder Monster im Kampfsystem?
So greift Chery auf die Monster im Kampf zu:
--CortiWins GitHub DynRPG < Charguide < [2k3] Zahlen und Werte < [2k3] Kurven als Wertetemplates < [2k3] DynRPG Werkstatt
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Hello from the otter side
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Datenbank. Ich schaue mir mal 004CDE64 (0xCD264) an.
Edit: Ich gehe mal davon aus, das ist Teil der durch DynRPG gepatchten RPG_RT?
Könntest du mir auch den Offset für RPG:: Action verraten? (zwecks Skill_ID des eingesetzten Skills und dessen Ziel)
Wie regelt DynRPG eigentlich function calls von außerhalb? Und wird Assembler-Roh-Code in einem Plugin ausreichen?
Geändert von bugmenot (15.08.2013 um 14:10 Uhr)
Das übersteigt mein Wissen.
--CortiWins GitHub DynRPG < Charguide < [2k3] Zahlen und Werte < [2k3] Kurven als Wertetemplates < [2k3] DynRPG Werkstatt
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Hello from the otter side
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
@bugmenot: Nein, das ist die ganz normale VA für Monster im Kampf, nichts gepatcht. In der Datei steht da natürlich nichts, weil die Objekte ja erst zur Laufzeit erzeugt werden...
Du könntest dir ja einfach DynRPG holen und damit rumspielen. Sollte viele Fragen beantworten.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
@Corti Soll man die Resistenzen auch zur Laufzeit in der Datenbank ändern können oder nur die der aktiven Battler?
Wenn ja:
@Cherry Hat man von der RPG_RT aus Schreibrechte auf eine Datenbank, aus der die RPG_RT im Kampf möglicherweise noch ausliest?
Ansonsten ein kleines Update:
Und etwas Kram: (RPG_RT 2k v1.07 )
sub_47413C <>DrawBattleScene
sub_47F476 <>CreateEnemyBatller
Geändert von bugmenot (16.08.2013 um 12:38 Uhr)