RPG Maker Forums

In my game, where I use Moghunter's Action Battle System script, there's these 2 states I've added that when the player receives both and when you attack/get hit, I get an error. It appears that some variable gets turned to nil, and when the script checks the loop time of a state, it crashes. I'll attach the error message, the code, and the 2 states from the database. One state is repeatedly healing your SP (energetic), and the other is repeatedly taking away HP (burn).


If you have any questions, please ask.


Error.PNG


Energetic.PNG


Code.PNG


Burn.PNG


Here is the rest of the code in case:



Spoiler



#==============================================================================
# ■ Game Character
#==============================================================================
class Game_Character
  
 #--------------------------------------------------------------------------
 # ● Display Damage
 #--------------------------------------------------------------------------    
 def display_damage(value) 
     self.battler.damage = value
     self.battler.damage_pop = true   
 end  
  
 #--------------------------------------------------------------------------
 # ● Update Counter
 #--------------------------------------------------------------------------
 def update_counter
     return if self.battler.is_a?(Game_Actor)
     if self.battler.xas_counter_time > 0 
        self.battler.xas_counter_time -= 1       
        if self.battler.xas_counter_time == 0        
           display_damage(XAS_BA_ENEMY::COUNTER_TEXT) 
           counter_action = XAS_BA_ENEMY::COUNTER_ACTION[self.battler.id]
           turn_toward_player
           if counter_action != nil
              counter_id = counter_action[rand(counter_action.size)]  
              self.shoot(counter_id)
           elsif XAS_BA_ENEMY::COUNTER_SAME_ACTION.include?(self.battler.id)
              self.shoot(self.battler.xas_counter_skill_id)        
           end    
        end   
     end 
 end


 #--------------------------------------------------------------------------
 # ● Update Final Attack 
 #--------------------------------------------------------------------------
 def update_final_attack
     return unless self.dead?
     return if self.battler.last_attack_time == 0 
     self.battler.last_attack_time -= 1
     if  self.battler.last_attack_time == 0
         last_attack = XAS_BA_ENEMY::ENEMY_FINAL_ATTACK[self.battler.id]
         last_attack_id = last_attack[rand(last_attack.size)]        
         self.shoot(last_attack_id)
         self.battler.damage = XAS_BA_ENEMY::FINAL_ATTACK_TEXT
         self.battler.damage_pop = true           
    end
 end  
 
 #--------------------------------------------------------------------------
 # ● Update Statespopup 
 #--------------------------------------------------------------------------
 def update_statespopup
     if self.battler.xas_states_pop_time > 0
        self.battler.xas_states_pop_time -= 1 
        if self.battler.xas_states_pop_time == 0
           self.battler.damage = self.battler.xas_states_pop_text
           self.battler.damage_pop = true   
           self.battler.state = true
        end   
     end  
 end  
 
 #--------------------------------------------------------------------------
 # ● Enable States Effect
 #--------------------------------------------------------------------------  
 def states_effects(state)  
   if self.battler.state_sleep and not self.knockbacking?
      self.need_refresh_pose = true  
   end     
   #Poison HP
   if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::pOISON_HP))  
      dam_per = state.shock_release_prob
      damage_value = self.battler.maxhp * dam_per / 100
      self.battler.hp -= damage_value
      display_damage(damage_value) 
   #Regen HP
   elsif state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::REGEN_HP))   
      dam_per = state.shock_release_prob
      damage_value = self.battler.maxhp * -dam_per / 100      
      self.battler.hp -= damage_value
      #display_damage(damage_value)
   end     
   #Poison SP 
   if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::pOISON_SP))  
      dam_per = state.shock_release_prob
      damage_value = self.battler.maxsp * dam_per / 100
      self.battler.sp -= damage_value
      value = $data_system.words.sp.to_s + " " + damage_value.to_s
      display_damage(value)        
   #Regen SP
   elsif state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::REGEN_SP))  
      dam_per = state.shock_release_prob
      damage_value = self.battler.maxsp * -dam_per / 100
      self.battler.sp -= damage_value
      value = $data_system.words.sp.to_s + " " + damage_value.to_s
      display_damage(value)        
   end    
   #Deathcount
   if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::DEATHCOUNT))  
      self.battler.state_time[state.id] -= 100
      death_number = self.battler.state_time[state.id] / 100
       if death_number > 0   
         display_damage(XAS::DEATHCOUNT_TEXT_COUNT.to_s + death_number.abs.truncate.to_s) 
      else  
         self.battler.hp = 0 if self.battler.is_a?(Game_Enemy)  
         $scene = Scene_Gameover.new if self.battler.is_a?(Game_Actor)  
      end
   end
 end
   
 #--------------------------------------------------------------------------
 # ● Status Effect Update
 #--------------------------------------------------------------------------
 def update_status_effect
     update_counter    
     if self.battler.states.size == 0  
        self.battler.state_move_speed = 0
        return
     end  
     self.battler.remove_states_auto
     for i in self.battler.states
         state = $data_states  

         return if state == nil


         if self.battler.state_loop_effect_time
== nil

            self.battler.remove_state(state.id) 


            return


         end  


         #Make Effects    


         self.battler.state_loop_effect_time
+= 1

         if self.battler.state_loop_effect_time
> self.battler.state_loop_speed

            self.battler.state_loop_effect_time
= 0

            self.animation_id = state.animation_id


            states_effects(state)          


         end       


         #Remove State-------


         unless state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::DEATHCOUNT))  


            self.battler.state_time
-= 1

            if self.battler.state_time
<= 0     

               self.battler.remove_state(state.id) 


               self.need_refresh_pose = true  


            end      


         end 


     end 


     update_statespopup   


 end


   


end





#===============================================================================


# ■ Game_Battler


#===============================================================================


class Game_Battler


   attr_accessor :state_time  


   attr_accessor :state_loop_effect_time  


   attr_accessor :state_loop_speed


   attr_accessor :state_move_speed


   attr_accessor :stop


   attr_accessor :state_sleep


   attr_accessor :state_berserk


   attr_accessor :state_drain


   attr_accessor :state_invincible


   attr_accessor :state_life


   attr_accessor :state_seal_attack


   attr_accessor :state_seal_skill


   attr_accessor :state_seal_item


   attr_accessor :state_mute


   attr_accessor :state_ctup   


   attr_accessor :state_ctdown


   attr_accessor :state_confuse


   attr_accessor :state_reflect


   attr_accessor :state_death_count


   attr_accessor :state_cancel_sensor


   attr_accessor :state_pose_refresh


   attr_accessor :after_damage_pop


   attr_accessor :after_damage_pop_time


   attr_accessor :after_animation_time


   attr_accessor :after_animation_id


  


  #--------------------------------------------------------------------------


  # * Object Initialization


  #--------------------------------------------------------------------------


  alias states_initialize initialize


  def initialize


      @state_time = []


      @state_loop_effect_time = []


      @state_loop_speed = []


      @state_move_speed = 0


      @stop = false


      @state_sleep = false


      @state_drain = false


      @state_invincible = false


      @state_life = false


      @state_berserk = false


      @state_seal_attack = false


      @state_seal_skill = false


      @state_seal_item = false


      @state_death_count = true


      @state_mute = false


      @state_ctup = false   


      @state_ctdown = false      


      @state_confuse = false


      @state_reflect = false


      @state_cancel_sensor = false


      @state_pose_refresh = false


      @after_damage_pop = ""


      @after_damage_pop_time = 0


      @after_animation_time = 0


      @after_animation_id = 0   


      states_initialize


  end 





  #--------------------------------------------------------------------------


  # ● Add State Effect


  #--------------------------------------------------------------------------  


  def add_state_effect(state)    


      add_state_popup(state.id)  


      @state_time[state.id] = $data_states[state.id].hold_turn


      @state_loop_effect_time[state.id] = 0 


      @state_loop_speed[state.id] = $data_states[state.id].auto_release_prob


     #Cancel Sensor


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SENSOR_0))


        self.state_cancel_sensor = true


     end          


     #Reflect


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::REFLECT))


        self.state_reflect = true


     end        


     #Drain


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::DRAIN_STATE))


        self.state_drain = true


     end  


     #Drain


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::INVINCIBLE))


        self.state_invincible = true


     end       


     #Life


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::LIFE))


        self.state_life = true


     end       


     #Berserk


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::BERSERK))


        self.state_berserk = true


     end 


     #Mute


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::MUTE))


        self.state_mute = true     


     end


     #Seal Attack


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALATTACK))


        self.state_seal_attack = true


     end 


     #Seal Skill


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALSKILL))


        self.state_seal_skill = true


     end 


     #Seal Item


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALITEM))


        self.state_seal_item = true


     end      


     #CT UP


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CTUP))


        self.state_ctup = true


     end   


     #CT DOWN


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CTDOWN))


        self.state_ctdown = true


     end       


     #Stop


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::STOP))


        $game_player.reset_pickup if self.is_a?(Game_Actor)


        self.stop = true


     end   


     #Sleep   


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SLEEP))


        $game_player.reset_pickup if self.is_a?(Game_Actor)


        self.state_sleep = true   


     end   


     #Slow   


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SLOW))  


        self.state_move_speed = -1  


     end   


     #Fast


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::FAST))    


        self.state_move_speed = 1


     end


     #Confuse


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CONFUSE))


        self.state_confuse = true


     end


  end


   


  #--------------------------------------------------------------------------


  # ● Remove State Effect


  #--------------------------------------------------------------------------  


  def remove_state_effect(state)   


      remove_state_popup(state.id)         


      @state_time.delete(state.id)


      @state_loop_effect_time.delete(state.id)


      @state_loop_speed.delete(state.id)


     #Cancel Sensor


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SENSOR_0))


        self.state_cancel_sensor = false


     end          


     #Reflect


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::REFLECT))


        self.state_reflect = false


     end        


     #Drain


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::DRAIN_STATE))


        self.state_drain = false


     end  


     #Drain


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::INVINCIBLE))


        self.state_invincible = false


     end       


     #Life


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::LIFE))


        self.state_life = false


     end       


     #Berserk


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::BERSERK))


        self.state_berserk = false


     end 


     #Mute


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::MUTE))


        self.state_mute = false    


     end


     #Seal Attack


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALATTACK))


        self.state_seal_attack = false


     end 


     #Seal Skill


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALSKILL))


        self.state_seal_skill = false


     end 


     #Seal Item


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SEALITEM))


        self.state_seal_item = false      


     end 


     #CT UP


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CTUP))


        self.state_ctup = false


     end   


     #CT DOWN


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CTDOWN))


        self.state_ctdown = false


     end       


     #Stop


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::STOP))


        self.stop = false


     #Sleep 


     end


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SLEEP))


        self.state_sleep = false 


     end   


     #Slow   


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::SLOW))  


        self.state_move_speed = 0


     end   


     #Fast


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::FAST))    


        self.state_move_speed = 0


     end


     #Confuse


     if state.guard_element_set.include?($data_system.elements.index(XAS_ELEMENT::CONFUSE))


        self.state_confuse = false


     end    


  end  


  


  #--------------------------------------------------------------------------


  # ● Remove State Popup


  #--------------------------------------------------------------------------


  def remove_state_popup(state_id)


      self.state = true


      self.after_damage_pop_time = 1


      self.after_damage_pop = "status_minus" + $data_states[state_id].name  


  end  


  


  #--------------------------------------------------------------------------


  # ● Add State Popup


  #--------------------------------------------------------------------------


  def add_state_popup(state_id) 


      @xas_states_pop_time = 15


      @xas_states_pop_text = "status_plus" + $data_states[state_id].name         


  end    


  


  #--------------------------------------------------------------------------


  # * Add State


  #--------------------------------------------------------------------------


  def add_state(state_id, force = false)


      return if $data_states[state_id] == nil


      unless force


      for i in @states


        if $data_states
.minus_state_set.include?(state_id) and

           not $data_states[state_id].minus_state_set.include?(i)


          return


        end


      end


    end


    unless state?(state_id)


      @states.push(state_id)


      if $data_states[state_id].zero_hp


        @hp = 0


      end


      for i in 1...$data_states.size


        if $data_states[state_id].plus_state_set.include?(i)


          add_state(i)


          state = $data_states
 

          add_state_effect(state) 


        end


        if $data_states[state_id].minus_state_set.include?(i)


          remove_state(i)


        end


      end


      @states.sort! do |a, b|


        state_a = $data_states[a]


        state_b = $data_states


        if state_a.rating > state_b.rating


          -1


        elsif state_a.rating < state_b.rating


          +1


        elsif state_a.restriction > state_b.restriction


          -1


        elsif state_a.restriction < state_b.restriction


          +1


        else


          a <=> b


        end


      end


    end


    if force


      @states_turn[state_id] = -1


    end


    unless  @states_turn[state_id] == -1


      @states_turn[state_id] = $data_states[state_id].hold_turn


    end


    unless movable?


      @current_action.clear


    end


    @hp = [@hp, self.maxhp].min


    @sp = [@sp, self.maxsp].min


  end


  


  #--------------------------------------------------------------------------


  # * Remove State


  #--------------------------------------------------------------------------


  def remove_state(state_id, force = false)


    if state?(state_id)


       return if @states_turn[state_id] == -1 and not force


       if @hp == 0 and $data_states[state_id].zero_hp


        zero_hp = false


        for i in @states


          if i != state_id and $data_states
.zero_hp

            zero_hp = true


          end


        end


        if zero_hp == false


          @hp = 1


        end


      end


      @states.delete(state_id) 


      @states_turn.delete(state_id)


      state = $data_states[state_id]      


      remove_state_effect(state) #Edit   


    end


    @hp = [@hp, self.maxhp].min


    @sp = [@sp, self.maxsp].min


  end  


  


end











 

Latest Threads

Latest Profile Posts

Don't forget, aspiring writers: Personality isn't what your characters do, it is WHY they do it.
Hello! I would like to know if there are any pluggings or any way to customize how battles look?
I was thinking that when you start the battle for it to appear the eyes of your characters and opponents sorta like Ace Attorney.
Sadly I don't know how that would be possible so I would be needing help! If you can help me in any way I would really apreciate it!
The biggest debate we need to complete on which is better, Waffles or Pancakes?
rux
How is it going? :D
Day 9 of giveaways! 8 prizes today :D

Forum statistics

Threads
106,049
Messages
1,018,547
Members
137,835
Latest member
yetisteven
Top