Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Tankentai Battle System + Atoa's Active Time Battle: BattleEvent & Skills+CE BUG beseitigen
vllt hab ihr ja mitbekommen, dass ich "Ärger" mit dem Tankentai Battle System bzw. mit dem Addon
Atoa's Active Time Battle habe.
Hier hatte ich Probleme bereits erläutert (konnten noch nicht behoben werden):
Tankentai Battle System - Battle Event fehlerhaft - RGSS 1 Probleme & Talk - RPG Studio - Make your World real
Tankentai Battle System - Skills CEs aufrufen lassen - Events & Technik - RPG Studio - Make your World real
Ich mache jetzt deshalb ein neues Thema auf, weil ich glaube, dass das Problem/die Probleme nur noch skripttechnisch
gelöst werden können.
Nochmal zur Zusammenfassung:
1.) Battle Event funktioniert nicht ordnungsgemäß:
Wenn ich eine Battle Event Page jede Runde aufrufen lassen möchte, funktioniert das nicht.
Die Seite wird nur einmal aufgerufen und dann nicht wieder.
Das Problem wird definitiv vom Atoa's Active Time Battle ausgelöst, da das Battle Event ansonsten OHNE
dieses Addon funktioniert.
2.) Common Events, die von Skills aufgerufen werden, funktionieren nicht richtig:
Wie in einem Thread bereits geschildert, habe ich versucht einen Skill, der den Helden 2x mit dem normalen Angriff angreifen lässt,
per Event zu erstellen. Allerdings wird der Eventbefehl Force Action übergangen bzw. gänzlich ignoriert.
Habe auch schon probiert, einen Force Action- Befehl nur mal in eine Battle Event Page einzubauen, um zu sehen, ob es dann aufgerufen wird, was aber
auch nicht der Fall ist.
Hier liegt das Problem ebenfalls bei Atoa's Active Time Battle, denn ohne das Addon funktioniert Force Action einwandfrei.
Ich habe schon probiert in Zeile 43 vom Atoa's Active Time Battle die Art der Rundenzählweise zu verändern, das hat
aber alles nicht gebracht.
Natürlich könnte ich auch einfach das Addon aus dem Spiel nehmen, allerdings möchte ich dem Spieler die Wahl zwischen Einhand- und Zweihandwaffen
lassen. Ebenso träg ein Held zwei Einhandwaffen. Das Tragen von Zweihandwaffen wirkt sich im Spiel auf die Schnelligkeit des Spielers aus (-30% AGI).
Ebenso soll man einen Vorteil raus ziehen können, wenn man zwei Einhandwaffen trägt, die zwar weniger Schaden verursachen, dafür aber sehr schnell angreifen.
Diese Spielmechanik ist nur mit dem Atoa's Active Time Battle möglich.
Im Anhang habe ich die Scripts.rxdata angehängt.
Das komplette Kampfsystem findet ihr auch in der Skriptdatenbank: RPG Tankentai Sideview Battle System | RPG Studio
Wäre sehr froh darüber, wenn jemand es schafft, das Atoa's Active Time Battle dahingehend anzupassen, dass es nicht mehr
zu den oben genannten Komplikationen kommt. Wenn jemand einen Weg kennt, das ohne Skripts/Skriptänderungen zu lösen, wäre ich auch sehr
verbunden! Dies ist nur ein großer Knackpunkt für mein Projekt, denn ohne das Addon bin ich genauso aufgeschmissen wie ohne funktionierendes Battle Event und
Force Action.
MfG
Mitsch93
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Suche immer noch dringend nach einer Lösung!
Für Hilfe wäre ich sehr sehr dankbar.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.

Suche immer noch dringend nach einer Lösung.
Ums kurz zu fassen:
Das KS funktioniert einwandfrei. Allerdings gibts 2 Probleme mit dem Atoa's Active Time Battle (Addon des KS)
1.) Runden werden nicht gezählt. Wenn ich im Battle Event ein Event mit der Condition Turn 0+1X aufrufe, wird es GENAU
einmal aufgerufen und nicht jede Runde.
2.) CE, die per Skill aufgerufen werden, funktionieren nicht.
Wäre echt super froh, wenn jemand das auf die Reihe bekommen würde!
Ohne eine Lösung komme ich mit dem Projekt nicht weiter.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Zu 1)
Die Sperre für Eventseiten wird am Ende einer Runde offenbar nicht zurückgesetzt.
Versuch mal die Methode atb_update im ATB-Script wie folgt zu erweitern, dann sollten die Seiten auch wieder jede Kampfrunde aufgerufen werden:
(Wahlweise kann stattdessen auch dieses Script direkt unter dem ATB-Script eingefügt werden)
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # This class performs battle screen processing. #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Scene_Battle#atb_update # Überschrieben: Setzt die Sperre für "Turn"-Events am Ende einer Runde zurück #-------------------------------------------------------------------------- def atb_update @wait_on = wait_on return if @wait_on @atb_turn_count += 1 if Custom_Turn_Count == 2 if @atb_turn_count >= @abt_turn_speed @update_turn_end = true $game_temp.battle_turn += 1 ### Edit: ### $data_troops[@troop_id].pages.each_with_index do |page, index| $game_temp.battle_event_flags[index] = false if page.span == 1 end ############# turn_count_speed for battler in $game_party.actors + $game_troop.enemies battler.remove_states_auto if battler.exist? end setup_battle_event end for battler in $game_party.actors + $game_troop.enemies unless battler == @action_battler or (@escaping and battler.actor? and @escape_type > 0) battler.atb_update if battler.exist? and not battler.restriction == 4 end end update_meters end end |
Zu 2)
...könntest du es mit diesem Script versuchen (ebenfalls direkt unter dem ATB-Script einfügen).
Die Lösung ist nicht optimal und ich kann leider auch noch nicht 100%ig versprechen dass sie genau tut was sie soll, sie scheint aber zu funktionieren.
Die Änderungen an den einzelnen Methoden sind jeweils im Kommentar über der Methode beschrieben:
<Spoiler veraltet, siehe hier>
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Irrlicht« (6. Oktober 2013, 12:44)
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
ich habe mal deinen Code zu 1) eingefügt und getestet.
Es funktioniert wunderbar! Und nebenbei wurde mit dem Code direkt auch 2) behoben!

Vielen Dank für deine Hilfe! Alleine hätt ich das nie hinbekommen!
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Und zwar scheint Span Moment und Span Battle nicht so zu funktionieren, wie es eigentlich sollte.
Beide Funktionen funktionieren wie Span Turn und reagieren nicht direkt, wenn die Bedingung eingetreten ist.
Wäre cool, wenn der Bug auch noch beseitigt werden könnte!
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mitsch93« (15. Juli 2013, 16:25)
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Ich habe diesen Fix für das Force Action Problem.
Allerdings funktioniert der nur für Auto Attack und nicht, wenn ich bei Force Action
einen Skill auswähle.
Suche DRINGEND einen Fix!!!
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 |
class Interpreter #-------------------------------------------------------------------------- # * Force Action # Überschrieben: Erzwungene Handlungen sollen auch ausgeführt werden wenn # die erste Kampfrunde noch nicht beendet wurde. #-------------------------------------------------------------------------- def command_339 # Ignore if not in battle unless $game_temp.in_battle return true end # Ignore if number of turns = 0 ### EDIT ### # if $game_temp.battle_turn == 0 # return true # end ############ # Process with iterator (For convenience, this process won't be repeated) iterate_battler(@parameters[0], @parameters[1]) do |battler| # If battler exists if battler.exist? # Set action battler.current_action.kind = @parameters[2] if battler.current_action.kind == 0 battler.current_action.basic = @parameters[3] else battler.current_action.skill_id = @parameters[3] end # Set action target if @parameters[4] == -2 if battler.is_a?(Game_Enemy) battler.current_action.decide_last_target_for_enemy else battler.current_action.decide_last_target_for_actor end elsif @parameters[4] == -1 if battler.is_a?(Game_Enemy) battler.current_action.decide_random_target_for_enemy else battler.current_action.decide_random_target_for_actor end elsif @parameters[4] >= 0 battler.current_action.target_index = @parameters[4] end # Set force flag battler.current_action.forcing = true # If action is valid and [run now] if battler.current_action.valid? and @parameters[5] == 1 # Set battler being forced into action $game_temp.forcing_battler = battler # Advance index @index += 1 # End return false end end end # Continue return true end end #============================================================================== # ** Game_Battler #------------------------------------------------------------------------------ # This class deals with battlers. It's used as a superclass for the Game_Actor # and Game_Enemy classes. #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # * Game_Battler#atb_full? # Überschrieben: Ein Kämpfer der zur sofortigen Handlung gezwungen ist erhält # eine volle ATB-Leiste um agieren zu können. #-------------------------------------------------------------------------- alias_method(:atb_full_ILC_TEST, :atb_full?) def atb_full? atb_full_ILC_TEST or self == $game_temp.forcing_battler end end #============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # This class performs battle screen processing. #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Scene_Battle#update_phase4_step6 # Überschrieben: Löscht das "forcing"-Flag der Aktion um zu verhindern # dass eine Aktion ein zweites Mal als "erzwungen" ausgeführt wird. #-------------------------------------------------------------------------- alias_method(:update_phase4_step6_ILC_TEST, :update_phase4_step6) def update_phase4_step6 update_phase4_step6_ILC_TEST @active_battler.current_action.forcing = false end #-------------------------------------------------------------------------- # * Scene_Battle#update # Überschrieben: Ein laufendes Battle-Event wird ignoriert solange ein Kämpfer # zur Ausführung einer Aktion gezwungen ist. #-------------------------------------------------------------------------- def update if @phase == 1 $game_temp.battle_main_phase = true @actor_command_window.opacity = 0 @phase = 0 elsif @phase != 5 @phase = 0 end @event_running = true if $game_system.battle_interpreter.running? acbs_update_atb ### Edit: ### if $game_temp.forcing_battler == nil if $game_system.battle_interpreter.running? return elsif @event_running @status_window.refresh @event_running = false end end ############# return $scene = Scene_Gameover.new if $game_temp.gameover return update_phase5 if @phase == 5 @event_running = true if $game_system.battle_interpreter.running? if @update_turn_end turn_ending @update_turn_end = false end if Input.press?(Escape_Input) and @escape_type > 0 if $game_temp.battle_can_escape $game_temp.max_escape_count = update_phase2_escape_rate $game_temp.escape_count += 2 unless @wait_on @escaping = true if !@help_window.visible and @escape_type == 1 @help_window.set_text('') @help_window.set_text(Escape_Message, 1) end if @escape_type == 2 if @escape_atb_meters.nil? @escape_atb_meters = Escape_Meters.new @escape_meter_opacity = 0 @escape_atb_meters.visible = true else @escape_atb_meters != nil @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity + 1, 17].min @escape_atb_meters.refresh end end if $game_temp.escape_count >= $game_temp.max_escape_count $game_temp.escape_count = 0 update_phase2_escape unless $game_party.all_dead? end else @help_window.set_text(Cant_Escape_Message, 1) if @escape_type == 1 if @escape_type == 2 if @escape_atb_meters.nil? @escape_atb_meters = Escape_Meters.new @escape_meter_opacity = 0 @escape_atb_meters.visible = true else @escape_atb_meters != nil @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity + 1, 17].min @escape_atb_meters.refresh end end end elsif @escape_type > 0 if @escaping @escaping = false @help_window.visible = false end $game_temp.escape_count = [$game_temp.escape_count - 1, 0].max unless @wait_on if @escape_atb_meters != nil and $game_temp.escape_count == 0 @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity - 1, 0].max if @escape_meter_opacity == 0 @escape_atb_meters.dispose @escape_atb_meters = nil end end @escape_atb_meters.refresh if @escape_atb_meters != nil end return if @escaped atb_update input_battler_update(false) if @action_battlers[0] != nil && @action_battler.nil? @action_battlers.flatten! @action_battler = @action_battlers[0] if @action_battler.dead? @action_battler.atb = 0 @action_battler = nil else start_phase4 end end if @action_battler != nil && !@spriteset.effect? @active_battler = @action_battler update_phase4 end end #-------------------------------------------------------------------------- # * Scene_Battle#turn_ending # Überschrieben: Da die Methode nun zu jeder Zeit aufgerufen werden kann dürfen # die Aktionen der Kämpfer nicht zurückgesetzt werden um zu vermeiden dass # über "Force Action" reservierte Aktionen abgebrochen werden. Aktionen # ohne "forcing"-Flag werden ersetzt sobald der entspr. Kämpfer wieder # am Zug ist. #-------------------------------------------------------------------------- def turn_ending for member in $game_party.actors + $game_troop.enemies ### EDIT ### # member.current_action.clear ############ next unless member.exist? member.slip_damage = false actor = member.actor? for state in member.battler_states member.remove_state(state.id) if state.extension.include?("ZEROTURNLIFT") end damage = 0 for state in member.battler_states next unless state.extension.include?("SLIPDAMAGE") for ext in state.slip_extension if ext[0] == "hp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_dead = ext[4] slip_damage_flug = true member.slip_damage = true end end end if member.slip_damage && member.exist? && !slip_damage_flug damage += member.apply_variance(member.maxhp / 10, 10) slip_dead = false slip_pop = true slip_damage_flug = true member.slip_damage = true end damage = member.hp - 1 if damage >= member.hp && slip_dead = false member.hp -= damage member.damage = damage if damage > 0 member.perform_collapse if member.dead? && member.slip_damage @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop @spriteset.set_stand_by_action(actor, member.index) if member.hp <= 0 and not member.dead_anim member.dead_anim = member.dead? ? true : false end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug slip_damage_flug = false for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("SLIPDAMAGE") for ext in state.slip_extension if ext[0] == "mp" base_damage = ext[1] + member.maxsp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.sp_damage = true member.sp -= damage member.damage = damage if damage > 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("REGENERATION") for ext in state.slip_extension if ext[0] == "hp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.hp -= damage member.damage = damage if damage < 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("REGENERATION") for ext in state.slip_extension if ext[0] == "mp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.sp_damage = true member.sp -= damage member.damage = damage if damage < 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug end end |
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Ich muss mal schauen wo ich das Projekt hingeschmissen hab.^^
Ansonsten aber nochmal 3 kleine Rückfragen:
Verwendest du "Execute Now" oder "Execute in Normal Sequence"?
Wird der Befehl einfach ignoriert, greift der Battler stattdessen an, friert das Spiel ein oder kommt es zu einer Fehlermeldung?
Hat sich dein Scriptsatz gegenüber den hier geposteten Dateien und Scripts nochmal verändert?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (3. September 2013, 22:25)
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Der Befehl wird einfach übersprungen, der Kampf geht reibungslos weiter.
Wie gesagt, wenn ich nur sage "Normal Attack Execute Now", dann funktioniert es.
Ich benötige das halt, um einen Skill zu entwerfen, der Schaden verursacht, und falls das
Ziel einen bestimmten Status hat, auf den nächsten Gegner überspringt und wieder Schaden anrichtet (Skill wird nochmal gecastet).
Und das ganze bis zu 4 mal.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Die Scripts hatte ich bisher nur in der SBS-Demo getestet und da funktionierten die Skills ohne Probleme.
Ansonsten könnte es evtl. auch an der Zauberzeit des Skills liegen, die wird bisher nicht durch "Execute Now" abgekürzt. Der Skill sollte nach Ablauf der Zauberzeit aber trotzdem eingesetzt werden.
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
ATB Addon bringt die Fehler mit sich.
Der Skill hat keine Zauberzeit, sodass er eigentlich normal funktionieren sollte.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Bei den Gegnern habe ich (wiedereinmal) nur eine Methode vergessen, sodass Gegner in ihrem Zug immer eine eigene Aktion gewählt haben.
Bei den Spielercharakteren lag das Problem am Tankentai-SBS selbst, jeder musste berechtigt sein seine Aktion auszuführen (was bei einem Actor bedeutete dass er den Skill gelernt haben musste)
Bei Zaubern mit Zauberzeit gab es ein ähnliches Problem, nur war hier nicht vorgesehen dass eine "erzwungene" Aktion nach dem zaubern immernoch als "erzwungen" gelten sollte.
Die Umsetzung ist an einigen Stellen evtl. etwas unübersichtlicht geworden, aber ich hoffe es funktioniert jetzt:
Das Script musste in zwei Teile gespalten werden:
Der erste Teil beinhaltet die Anpassungen am Standard-KS bzw. dem Tankentai-SBS und muss zwischen dem Tankentai-SBS und dem ATB-Addon eingefügt werden.
Der zweite Teil enthält die Änderungen am ATB-Addon und sollte wie gehabt unter dem ATB-Addon platziert werden.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
class Interpreter #-------------------------------------------------------------------------- # * Force Action # Override: Do not ignore turn 0 actions since it is a normal battle turn now. #-------------------------------------------------------------------------- def command_339 # Ignore if not in battle unless $game_temp.in_battle return true end # #NOT# Ignore if number of turns = 0 #EDIT #if $game_temp.battle_turn == 0 # return true #end # Process with iterator (For convenience, this process won't be repeated) iterate_battler(@parameters[0], @parameters[1]) do |battler| # If battler exists if battler.exist? battler.cast_action = nil # Aktuelle Aktion ersetzen #EDIT # Set action battler.current_action.kind = @parameters[2] if battler.current_action.kind == 0 battler.current_action.basic = @parameters[3] else battler.current_action.skill_id = @parameters[3] end # Set action target if @parameters[4] == -2 if battler.is_a?(Game_Enemy) battler.current_action.decide_last_target_for_enemy else battler.current_action.decide_last_target_for_actor end elsif @parameters[4] == -1 if battler.is_a?(Game_Enemy) battler.current_action.decide_random_target_for_enemy else battler.current_action.decide_random_target_for_actor end elsif @parameters[4] >= 0 battler.current_action.target_index = @parameters[4] end # Set force flag battler.current_action.forcing = true # If action is valid and [run now] if battler.current_action.valid? and @parameters[5] == 1 # Set battler being forced into action $game_temp.forcing_battler = battler # Advance index @index += 1 # End return false end end end # Continue return true end end class Scene_Battle #-------------------------------------------------------------------------- # * Scene_Battle#make_skill_action_result # Override: Don't check if a skill is usable when the current action is forced. #-------------------------------------------------------------------------- def make_skill_action_result skill = $data_skills[@active_battler.current_action.skill_id] if skill.plus_state_set.include?(1) for member in $game_party.actors + $game_troop.enemies next if member.immortal next if member.dead? member.dying = true end else immortaling end ### Edit: ### return unless @active_battler.current_action.forcing or @active_battler.skill_can_use?(skill.id) ############# target_decision(skill) @active_battler.consum_skill_cost(skill) @status_window.refresh @spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action) @help_window.set_text(skill.name, 1) unless skill.extension.include?("HELPHIDE") playing_action @common_event_id = skill.common_event_id end #-------------------------------------------------------------------------- # * Scene_Battle#turn_ending # Override: Since the end of a turn may occur arbitrarily do not clear the # battlers actions. #-------------------------------------------------------------------------- def turn_ending for member in $game_party.actors + $game_troop.enemies ### EDIT ### # member.current_action.clear ############ next unless member.exist? member.slip_damage = false actor = member.actor? for state in member.battler_states member.remove_state(state.id) if state.extension.include?("ZEROTURNLIFT") end damage = 0 for state in member.battler_states next unless state.extension.include?("SLIPDAMAGE") for ext in state.slip_extension if ext[0] == "hp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_dead = ext[4] slip_damage_flug = true member.slip_damage = true end end end if member.slip_damage && member.exist? && !slip_damage_flug damage += member.apply_variance(member.maxhp / 10, 10) slip_dead = false slip_pop = true slip_damage_flug = true member.slip_damage = true end damage = member.hp - 1 if damage >= member.hp && slip_dead = false member.hp -= damage member.damage = damage if damage > 0 member.perform_collapse if member.dead? && member.slip_damage @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop @spriteset.set_stand_by_action(actor, member.index) if member.hp <= 0 and not member.dead_anim member.dead_anim = member.dead? ? true : false end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug slip_damage_flug = false for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("SLIPDAMAGE") for ext in state.slip_extension if ext[0] == "mp" base_damage = ext[1] + member.maxsp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.sp_damage = true member.sp -= damage member.damage = damage if damage > 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("REGENERATION") for ext in state.slip_extension if ext[0] == "hp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.hp -= damage member.damage = damage if damage < 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug for member in $game_party.actors + $game_troop.enemies next unless member.exist? actor = member.actor? damage = 0 for state in member.battler_states next unless state.extension.include?("REGENERATION") for ext in state.slip_extension if ext[0] == "mp" base_damage = ext[1] + member.maxhp * ext[2] / 100 damage += base_damage + base_damage * (rand(5) - rand(5)) / 100 slip_pop = ext[3] slip_damage_flug = true end end member.sp_damage = true member.sp -= damage member.damage = damage if damage < 0 @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop end end @status_window.refresh wait(DMG_DURATION / 2) if slip_damage_flug end end |
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
#============================================================================== # ** Game_Battler #------------------------------------------------------------------------------ # This class deals with battlers. It's used as a superclass for the Game_Actor # and Game_Enemy classes. #============================================================================== class Game_Battler attr_accessor :cast_action_forced # Detect forced actions after casting #-------------------------------------------------------------------------- # * Game_Battler#atb_full? # Override: Set ATB to "full" when forced to execute an instant action. #-------------------------------------------------------------------------- alias_method(:atb_full_ILC_allowInstantForcedActions, :atb_full?) def atb_full? atb_full_ILC_allowInstantForcedActions or self == $game_temp.forcing_battler end end #============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # This class performs battle screen processing. #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Scene_Battle#update_phase4_step6 # Override: Actions get cleared after their execution rather than at the end # of a round. #-------------------------------------------------------------------------- alias_method(:update_phase4_step6_ILC_clearAction, :update_phase4_step6) def update_phase4_step6 update_phase4_step6_ILC_clearAction # Once executed the action isn't forced any more: @active_battler.current_action.clear end #-------------------------------------------------------------------------- # * Scene_Battle#update # Override: Pauses any battle-event-execution while a battler is forced to act. #-------------------------------------------------------------------------- def update if @phase == 1 $game_temp.battle_main_phase = true @actor_command_window.opacity = 0 @phase = 0 elsif @phase != 5 @phase = 0 end @event_running = true if $game_system.battle_interpreter.running? acbs_update_atb ### Edit: ### if $game_temp.forcing_battler == nil if $game_system.battle_interpreter.running? return elsif @event_running @status_window.refresh @event_running = false end end ############# return $scene = Scene_Gameover.new if $game_temp.gameover return update_phase5 if @phase == 5 @event_running = true if $game_system.battle_interpreter.running? if @update_turn_end turn_ending @update_turn_end = false end if Input.press?(Escape_Input) and @escape_type > 0 if $game_temp.battle_can_escape $game_temp.max_escape_count = update_phase2_escape_rate $game_temp.escape_count += 2 unless @wait_on @escaping = true if !@help_window.visible and @escape_type == 1 @help_window.set_text('') @help_window.set_text(Escape_Message, 1) end if @escape_type == 2 if @escape_atb_meters.nil? @escape_atb_meters = Escape_Meters.new @escape_meter_opacity = 0 @escape_atb_meters.visible = true else @escape_atb_meters != nil @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity + 1, 17].min @escape_atb_meters.refresh end end if $game_temp.escape_count >= $game_temp.max_escape_count $game_temp.escape_count = 0 update_phase2_escape unless $game_party.all_dead? end else @help_window.set_text(Cant_Escape_Message, 1) if @escape_type == 1 if @escape_type == 2 if @escape_atb_meters.nil? @escape_atb_meters = Escape_Meters.new @escape_meter_opacity = 0 @escape_atb_meters.visible = true else @escape_atb_meters != nil @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity + 1, 17].min @escape_atb_meters.refresh end end end elsif @escape_type > 0 if @escaping @escaping = false @help_window.visible = false end $game_temp.escape_count = [$game_temp.escape_count - 1, 0].max unless @wait_on if @escape_atb_meters != nil and $game_temp.escape_count == 0 @escape_atb_meters.opacity = 15 * @escape_meter_opacity @escape_meter_opacity = [@escape_meter_opacity - 1, 0].max if @escape_meter_opacity == 0 @escape_atb_meters.dispose @escape_atb_meters = nil end end @escape_atb_meters.refresh if @escape_atb_meters != nil end return if @escaped atb_update input_battler_update(false) if @action_battlers[0] != nil && @action_battler.nil? @action_battlers.flatten! @action_battler = @action_battlers[0] if @action_battler.dead? @action_battler.atb = 0 @action_battler = nil else start_phase4 end end if @action_battler != nil && !@spriteset.effect? @active_battler = @action_battler update_phase4 end end #-------------------------------------------------------------------------- # * Scene_Battle#battler_turn # Override: If an enemies action is forced don't create a new one. #-------------------------------------------------------------------------- def battler_turn(battler) battler.turn_count += 1 if battler.is_a?(Game_Actor) if battler.inputable? and battler.cast_action.nil? @input_battlers << battler else if battler.restriction == 2 || battler.restriction == 3 battler.current_action.kind = 0 battler.current_action.basic = 0 end battler.defense_pose = false @action_battlers << battler end else battler.make_action unless battler.current_action.forcing @action_battlers << battler end end #-------------------------------------------------------------------------- # * Scene_Battle#update_phase4_step2 # Override: Restore 'forced' status of casted actions #-------------------------------------------------------------------------- def update_phase4_step2 @active_battler.defense_pose = false if @active_battler.cast_action != nil active_cast = @active_battler.cast_action if active_cast.scope == 1 or active_cast.scope == 3 or active_cast.scope == 5 @active_battler.current_action.target_index = @active_battler.cast_target end if active_cast.is_a?(RPG::Skill) @active_battler.current_action.kind = 1 @active_battler.current_action.skill_id = @active_battler.cast_action.id elsif active_cast.is_a?(RPG::Item) @active_battler.current_action.kind = 2 @active_battler.current_action.item_id = @active_battler.cast_action.id end @active_battler.current_action.forcing = @active_battler.cast_action_forced end for state in @active_battler.battler_states @active_battler.remove_state(state.id) if state.extension.include?("ZEROTURNLIFT") end acbs_update_phase4_step2_atb end #-------------------------------------------------------------------------- # * Scene_Battle#make_skill_action_result # Override: Remember 'forced' status of casted actions. #-------------------------------------------------------------------------- def make_skill_action_result skill = $data_skills[@action_battler.current_action.skill_id] if @action_battler.cast_action == nil @active_battler.cast_action = skill @active_battler.cast_target = @active_battler.current_action.target_index @active_battler.cast_action_forced = @active_battler.current_action.forcing @cast_speed = skill.cast_speed(@active_battler) @active_battler.cast_action = nil if @cast_speed == 0 @spriteset.set_stand_by_action(@active_battler.actor?, @active_battler.index) return unless @cast_speed == 0 end make_skill_action_result_atb_n01 @active_battler.cast_action = nil end end |
Gruß
Irrlicht
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (7. Oktober 2013, 23:09)
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Soweit ich probiert habe funktioniert jetzt alles
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mitsch93« (7. Oktober 2013, 19:58)
Wenn du "Force Action" auf einen Battler verwendest der gerade eine Fähigkeit auflädt (mit Zauberzeit) wird die neue Aktion von der gerade gezauberten überdeckt, d.h. der Battler kommt zwar zum Zug, führt aber nur die gerade aufgeladene Aktion aus. Die einfachste Lösung wäre auch die gerade gezauberte Aktion abzubrechen, Scriptteil 1 aus dem letzten Post wurde dafür aktualisiert.
Wenn du hier eine andere Lösung brauchst müsstest du bescheid sagen. ^^
Dass das allerdings der Grund für dein Problem ist wage ich zu bezweifeln, damit nur ein Skill (der zweite) ausgeführt wird müsste der Battler allerdings schon gerade dabei sein eine Fähigkeit aufladen (wird nicht passieren wenn das Commonevent erst durch die Aktion des Battlers ausgelöst wurde) und der zweite "Force Action" - Skill müsste ebenfalls Zauberzeit haben.
Abgesehen von dem Szenario konnte ich das Problem nicht nachvollziehen.
Magst evtl. nochmal eine Demo posten?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (7. Oktober 2013, 23:46)
Benutzerinformationen überspringen
Motto: Aufgeben ist es, was den Menschen tötet. Nur der Mensch, der sich weigert aufzugeben, hat sich das Recht verdient, auf dem glanzvollen Pfad der Menschheit zu wandeln.
Bist direkt auf der Testmap, kannst sowohl den Vorläufer von der geplanten "Magmawalze" als auch einfachen Testskill der einfach nur
3 Skillangriffe hintereinander aktivieren soll.
-
Projekte -
Tutorials & Hilfreiches aus der Eventtechnik
[Tutorial] Skills, Stats und Bosse - So erstellt ihr einen guten Bosskampf
[Tutorial] Kampf - Unendlich Gegner erscheinen lassen
[Tutorial] Kämpfe, Klassen und Balancing
[Tutorial] Entwickler Talk: Skalierungen

NPC verfolgt Held durch Türen

Pokemon- Fangskript

Monstergruppenführer

Automatisches prioritätsgesteuertes Anordnen von Bildern

Doppelte Eventfunktionen auf Map

Objekte schieben & ziehen
Wenn ein Event aktiv ist, eine (erzwungene) Handlung aber ein anderes Common-Event auslöst wird das neue Event das alte ersetzen, in diesem Fall das leere Common-Event 23.
Ließe sich bei Bedarf ändern, allerdings vermute ich dass hier einfach nur vergessen wurde das Common-Event aus der Testschaden-Aktion zu entfernen.

Ich werd das Script oben in naher Zukunft nochmal anpassen, im Moment kann es unter Umständen noch vorkommen dass wärend eines "Force Action" auch andere Battler zum Zug kommen können.
(Naja, das hat man davon wenn man auf Biegen und Brechen irgendwelche Fixes "auf gut Glück" einfügt *duck*)
Ähnliche Themen
-
RGSS 1 Probleme & Talk »-
Tankentai Battle System - Battle Event fehlerhaft
(5. März 2013, 12:15)
-
Einsteigerhilfe »-
Sideview Battle Script für RPG MAKER XP
(9. März 2013, 13:21)
-
Archiv Jobbörse »-
Suche Tankentai SBS - erfahrene Person
(6. März 2013, 18:21)
-
Events & Technik »-
Tankentai Battle System - Skills CEs aufrufen lassen
(6. März 2013, 18:13)
-
Skript-Anfragen »-
Battler im Sideview animieren?
(3. September 2011, 00:25)
