Advertisement
LiTTleDRAgo

[RGSS] XAS - Battle Trigger

Mar 2nd, 2013
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.92 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  2. # XAS - Battle Trigger
  3. # Version: 1.18
  4. # Author : LiTTleDRAgo
  5. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  6. #
  7. #  List of Trigger
  8. #  
  9. #  Dead             = Will activate when battler is dead
  10. #  Impact ID,ID,ID  = Will activate when skill (based on ID) is used
  11. #  Impact All       = Will activate when any skill is used
  12. #  Click            = Will activate when event is clicked
  13. #                     (if mouse script is present)
  14. #  Ally ID,ID,ID    = Will activate when actor (based on ID) is stepping
  15. #  Ally All         = Will activate when any ally is stepping
  16. #  
  17. #  Talk             = Will activate when triggered by talking (*)
  18. #
  19. # Note : By placing 'Battle Trigger :' in comment, the normal trigger
  20. #        (talking,stepping) won't work anymore, to make it work again,
  21. #        insert 'Talk' in the trigger
  22. #
  23. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  24. $imported ||= {}
  25. $imported[:xas_battle_trigger] = 1.18
  26.  
  27. class Game_Event < Game_Character
  28.   attr_accessor :impact_id, :page
  29.   #--------------------------------------------------------------------------
  30.   # * battle_trigger
  31.   #--------------------------------------------------------------------------
  32.   def battle_trigger
  33.     if ($imported[:drg_core_engine] || 0) >= 1.00
  34.       trigger = @page != nil && self.note[/Battle Trigger :/]
  35.       trigger = self.note.gsub("\n",',')  if trigger
  36.       trigger.gsub!('Battle Trigger :','') if trigger
  37.       return trigger || ''
  38.     end
  39.     trigger = @page != nil && @page.list[0].code == 108 &&
  40.       @page.list[0].parameters[0][/Battle Trigger :/]
  41.     if trigger
  42.       trigger,list_index = '', 0
  43.       while [108, 408].include?(@page.list[list_index].code)
  44.         trigger += @page.list[list_index].parameters[0] + ','
  45.         trigger = trigger.dup.gsub('Battle Trigger :'){''}.strip
  46.         list_index += 1
  47.       end
  48.     end
  49.     return trigger || ''
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # * defeated_effect
  53.   #--------------------------------------------------------------------------
  54.   alias defeated_effect_battle_trigger defeated_effect if $xrxs_xas
  55.   def defeated_effect(*args)
  56.     start if battle_trigger[/Dead/i] && @trigger == 0
  57.     @impact_id = 'Dead'
  58.     defeated_effect_battle_trigger(*args)
  59.   end
  60.  #--------------------------------------------------------------------------
  61.  # ● Action Effect
  62.  #--------------------------------------------------------------------------
  63.   alias action_effect_battle_trigger action_effect if $xrxs_xas
  64.   def action_effect(attacker, attack_id)
  65.     if self.is_a?(Game_Event) && battle_trigger != '' && @trigger == 0 && !@erased
  66.       @event.pages.each {|page|
  67.         trigger = battle_trigger.dup.gsub('Impact'){''}.strip.split(',').map {|s|s.strip.downcase}
  68.         if battle_trigger[/Impact/i] && (trigger.include?(attack_id.to_s) || trigger.include?('all'))
  69.           hookshoot_check(attacker,attack_id) if self.event_name[/<Hookshot>/]
  70.           self.reaction_valid_attack_id = attack_id
  71.           @impact_id = attack_id
  72.           self.refresh
  73.           @trigger = 0
  74.           self.start
  75.           return true
  76.         end   }
  77.     end
  78.     return action_effect_battle_trigger(attacker, attack_id)
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● Check Pre XY
  82.   #--------------------------------------------------------------------------  
  83.   alias update_battle_trigger update
  84.   def update
  85.     update_battle_trigger
  86.     return if @starting || @erased
  87.     if battle_trigger[/Ally All/i]
  88.       $game_party.actors.each {|s| ev = $game_map.actor_event(s.id) rescue nil
  89.       return [@impact_id = "Ally #{ev.battler.id}",self.start] if !ev.nil? && !ev.erased && [@x,@y] == [ev.x,ev.y]}
  90.       return [@impact_id = "Ally #{$game_party.actors[0].id}",self.start] if [@x,@y] == [$game_player.x,$game_player.y]
  91.     elsif battle_trigger[/Ally/i]
  92.       trigger = battle_trigger.dup.gsub('Ally'){''}.strip.split(',').map {|s|s.strip.downcase}
  93.       trigger.each {|id| ac = $game_party.actors[0]
  94.       ev = $game_map.actor_event(id.to_i) rescue nil
  95.       return [@impact_id = "Ally #{id}",self.start] if !ev.nil? && !ev.erased && [@x,@y] == [ev.x,ev.y]
  96.       return [@impact_id = "Ally #{id}",self.start] if !ac.nil? && ac.id.to_s == id && [@x,@y] == [$game_player.x,$game_player.y]}
  97.     end
  98.   end
  99. end
  100.  
  101. class Game_Player < Game_Character
  102.   #--------------------------------------------------------------------------
  103.   # * Same Position Starting Determinant
  104.   #--------------------------------------------------------------------------
  105.   alias check_event_trigger_here_battle_trigger check_event_trigger_here
  106.   def check_event_trigger_here(*args)
  107.     event = $game_map.events.values.find_all {|e|
  108.       e.impact_id = 'Talk' if e.battle_trigger[/Talk/i]
  109.       ([e.x,e.y] == [@x,@y] &&  e.trigger == 0 && e.battle_trigger != '' && !e.battle_trigger[/Talk/i] && !e.instance_variable_get(:@throw_active))}
  110.     return false if event.size > 0
  111.     return check_event_trigger_here_battle_trigger(*args)
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # * Front Event Starting Determinant
  115.   #--------------------------------------------------------------------------
  116.   alias check_event_trigger_there_battle_trigger check_event_trigger_there
  117.   def check_event_trigger_there(*args)
  118.     d = @direction
  119.     xy = [@x+(d==6 ? 1 : d==4 ? -1 : 0), @y+(d==2 ? 1 : d==8 ? -1 : 0)]
  120.     event = $game_map.events.values.find_all {|e|
  121.       e.impact_id = 'Talk' if e.battle_trigger[/Talk/i]
  122.       ([e.x,e.y] == xy &&  e.trigger == 0 && e.battle_trigger != '' && !e.battle_trigger[/Talk/i] && !e.instance_variable_get(:@throw_active)) }
  123.     return false if event.size > 0
  124.     return check_event_trigger_there_battle_trigger(*args)
  125.   end
  126. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement