Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Ayuda urgente en RPG Maker XP

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Ayuda urgente en RPG Maker XP

Mensaje por jlopez_96 el 2017-11-24, 14:43

Buenas, no sabía si poner este tema en ayuda o en scripts, si lo he puesto mal perdón xd.

Tengo un problema con el XAS para RPG Maker XP. Yo creo un objeto en la base de datos, tiene el número 42, y en el mapa TOOL creo un evento número 218. Dentro del evento lo
único que le digo es que active un interruptor, dentro del cuadro de comandos. El evento está puesto como 'Inicio Automático' (también he probado en 'Proceso Paralelo').

En el script, voy a ITEM y ahí en la lista itemcost pongo lo que se necesita
(42=>218 #Nombre del Objeto). Más abajo pongo también  lo mismo pero a la inversa.
Y para finalizar, en ITEMS, pongo lo que le corresponde de esta manera:

Spoiler:

Código:
#==============================================================================#
# Nombre del Objeto
#==============================================================================#
module Database_Bullet
  action_id = 218
  LINK_ACTION_ID[action_id] = 0
  SUFLAGS[action_id] = 60
  DURATIONS[action_id] = 100
  SELF_MOTIONS[action_id] = "_SKILL_01"
  plan = []
  plan[50] = action_id
  ATTACK_ID_PLANS[action_id] = plan  
  ATTACK_RANGE_TYPES[action_id] = SQUARE
  ATTACK_RANGE_PLANS[action_id] = [2]
  BLOW_POWERS[action_id] = 1
  SELF_ANIMATION_PLANS[action_id] =  []
  SELF_ANIMATION_HIT[action_id]  = 0
  TARGET_INVINCIBLES_DURATIONS[action_id] = 10      
  ANIMATION_SPEED[action_id] = 1.5
  FORCE_MOVE[action_id] = nil
  PLAYER_CAST_TIME[action_id] = 0
end

El interruptor activa una serie de comandos dentro de eventos comunes en la base de datos.

El problema es el siguiente: Yo cojo el objeto ya dentro del juego, le doy a S para usarlo tras asignarlo y me sale este error:

Script 'XAS - Tool 1' line 157: NoMethodError ocurred.
undefined method 'element_set' for nil:NilClass

Dejo el script de Tool 1:

Spoiler:

Código:
# ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
#===============================================================================
# TOOL / ACTIVE TOOL
#===============================================================================
# ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■




#===============================================================================
# ■ XAS_ACTION
#===============================================================================
module XAS_ACTION
  attr_reader   :action
  attr_reader   :erased
  
#--------------------------------------------------------------------------
# ● can_pre_shoot?
#--------------------------------------------------------------------------  
 def can_pre_shoot?(action_id)
     #Baria Move  
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BARIA)) and
        self.force_move_times == 0
        self.force_move_type = "Baria"
        if self.battler.is_a?(Game_Actor)
           self.force_move_times = 2    
        else
           self.force_move_times = 3    
        end  
        return true    
     end
     return false    
 end  
  
#--------------------------------------------------------------------------
# ● Force Move Effect  
#--------------------------------------------------------------------------
 def force_move_effect(action_id)  
    #Jump
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::FORCE_JUMP))  
       force_jump = true
    end
    jump(0,0) if force_jump != nil    
    #Movement
    force_move = Database_Bullet::FORCE_MOVE[action_id]
    if force_move != nil and force_move == 1
      self.battler.hit_it = 1
      move_forward  
    elsif force_move != nil and force_move == 2    
       self.battler.hit_it = 1
       move_backward        
    end    
 end  

 #--------------------------------------------------------------------------
# ● Check Loop Shoot
#--------------------------------------------------------------------------
 def enable_multiple_directions_shoot(action_id)
     unless self.tool_id != 0
         return if self.action != nil
     end
     #Four Direction Shoot  
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::FOUR_DIRECTIONS)) and
        self.force_move_times == 0
        self.force_move_type = "Four Shoot"
        self.force_move_times = 4    
     #All Direction Shoot      
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::ALL_DIRECTIONS)) and
        self.force_move_times == 0
        self.force_move_type = "All Shoot"  
        self.force_move_times = 8
     #Two Direction Shoot      
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::TWO_DIRECTIONS)) and
        self.force_move_times == 0
        self.force_move_type = "Two Shoot"  
        self.force_move_times = 2  
     #Tree Direction Shoot      
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::THREE_DIRECTIONS)) and
        self.force_move_times == 0
        self.force_move_type = "Three Shoot"
        self.force_move_times = 3  
        self.quarter = false
     end
 end
  
#--------------------------------------------------------------------------
# ● Shoot Effect
#--------------------------------------------------------------------------
def shoot_effect(action_id,skill)
    self.animation_id =  skill.animation1_id
    voice_check(action_id)  
    enable_multiple_directions_shoot(action_id)
    #Step Motion
    if $data_skills[skill.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::STEP_MOVE)) and
       self.action == nil
       d = self.direction
       new_real_x = (d == 6 ? 128 : d == 4 ? -128 : 0)
       new_real_y = (d == 2 ? 128 : d == 8 ? -128 : 0)
       self.real_x += new_real_x
       self.real_y += new_real_y
       self.jump(0,0)
    end  
    #Start Slow Motion
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::START_SLOW_MOTION))  
       slow_motion_time = Database_Bullet::SUFLAGS[action_id]
       $game_temp.slow_motion = slow_motion_time
    end  
    #Background Special Effects
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BACKGROUND_EFFECT_TYPE1)) or
       $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BACKGROUND_EFFECT_TYPE2))  
       if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BACKGROUND_EFFECT_TYPE2))
          effect_duration = Database_Bullet::SUFLAGS[action_id]
       else  
          effect_duration = Database_Bullet::DURATIONS[action_id]
       end
       unless $game_temp.background_effect_time > 0
              $game_temp.pre_panorama_name = $game_map.panorama_name
              $game_temp.pre_panorama_hue = $game_map.panorama_hue
       end
       background_name = XAS_BACKGROUND_EFFECT::ACTION_BACKGROUND_NAME[action_id]
       background_name = XAS_BACKGROUND_EFFECT::DEFAULT_PANORAMA_NAME if background_name == nil
       $game_map.panorama_name = background_name
       $game_map.panorama_hue = 0
       $game_temp.background_effect_time = effect_duration
    end    
    #Rush
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::RUSH))  
       forward_power(4)
       self.battler.hit_it = 1
    #Rush Back  
    elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BACK_RUSH))  
       backward_power(4)
       self.battler.hit_it = 1      
    end  
    #Fly
    if self.battler.is_a?(Game_Actor)
       $game_system.fly = true if action_id == XAS::FLY_ENABLE_ID    
     end  
    self.action_attachment(action_id)    
end  
 
#--------------------------------------------------------------------------
# ● Check Character Orginal Name
#--------------------------------------------------------------------------
 def check_character_orginal_name(action_id)
     @pose_type_old = "X"
     @need_refresh_pose = true    
     $game_temp.check_name_time = XAS::FIX_DIAGONAL_TIME_AFTER_SHOOT if self.battler.is_a?(Game_Actor)
     @character_name = @actor.character_name if self.is_a?(Game_Player)
 end    

 #--------------------------------------------------------------------------
# ● Can Auto Target?
#--------------------------------------------------------------------------
 def check_select_target?(action_id)
     return false if self.is_a?(Game_Event)
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::AUTO_TARGET))
        if $game_temp.xas_target_shoot_id == 0
           $game_temp.xas_target_shoot_id = action_id
           $game_map.check_battler_on_map
           $scene = Scene_Target_Select.new
           return true
        end  
     end  
     return false
 end  
 
#--------------------------------------------------------------------------
# ● check_action_exist?
#--------------------------------------------------------------------------
 def check_action_exist?(action_id)
     return false if action_id == nil
     id = Database_Bullet::DURATIONS[action_id]
     return true if id != nil
     p "You forgot to make a tool module!"
     return false
 end
 
#--------------------------------------------------------------------------
# ● Check Battler Exist?
#--------------------------------------------------------------------------
 def check_battler_exist?
     return true if self.battler != nil
     p "You forgot set a ID of enemy event!"
     return false
 end

#--------------------------------------------------------------------------
# ● Shoot
#--------------------------------------------------------------------------
  def shoot(action_id)
      return false if check_select_target?(action_id)
      return unless check_action_exist?(action_id)
      return unless check_battler_exist?
      if self.battler.is_a?(Game_Actor)
         if $game_temp.somaria_second_action == true and
            action_id == XAS_SKILL::CANE_OF_SOMARIA_ID
            action_id = XAS_SKILL::CANE_OF_SOMARIA_ID2
         end  
         $game_temp.somaria_second_action = true if action_id == XAS_SKILL::CANE_OF_SOMARIA_ID    
      end
      skill = action_id == nil ? nil : $data_skills[action_id]
      return false if can_shoot?(action_id,skill)
      return false unless enough_sp_ct?(skill)
      shoot_effect(action_id,skill)    
      check_character_orginal_name(action_id)  
      force_move_effect(action_id)  
      @action.prelag   = 1
      @action.duration = Database_Bullet::SUFLAGS[skill.id].to_i
    end  
  end  
  
  
  
#===============================================================================
# ■ XAS_ACTION
#===============================================================================
module XAS_ACTION
#--------------------------------------------------------------------------
# ● Shoot Can Use?
#--------------------------------------------------------------------------  
  def can_shoot?(action_id,skill)    
    #Mute Effect
    if seal_state?(2) and self.battler.is_a?(Game_Enemy)
       seal_text
       return true  
    end    
    if self.battler.is_a?(Game_Actor)
       #Knockback
       return true if self.knockbacking?
       #Can shoot on Platform?
       if self.fall_safe_time > 0 and
          $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::HOOKSHOT))
          return true
       end
    end  
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::WAIT_DURATION))
        return true if $game_temp.tools_on_map.include?(action_id)
    end
    #Fall
    return true if @fall == true
    if can_pre_shoot?(action_id)    
       self.pre_shoot_id = action_id
       return true
    end
  end
end    
 





#===============================================================================
# ■ XAS_ACTION
#===============================================================================
module XAS_ACTION
   #--------------------------------------------------------------------------
 # ● can_ct_cost?
 #--------------------------------------------------------------------------
 def can_ct_cost?(ct_cost)
     return false if ct_cost == nil
     return false if self.battler.is_a?(Game_Enemy)
     return false if $game_switches[XAS::CT_DISABLE_SWITCH]
     return true
 end  
 
 #--------------------------------------------------------------------------
 # ● Can Cancel SP Cost?
 #--------------------------------------------------------------------------  
 def can_cancel_sp_cost?(action_id)
     if self.force_move_type == "Four Shoot" and
        self.force_move_times < 4
        return true
     elsif self.force_move_type == "Three Shoot" and
        self.force_move_times < 3
        return true        
     elsif self.force_move_type == "Two Shoot" and
        self.force_move_times < 2
        return true
     elsif self.force_move_type == "All Shoot" and  
        self.force_move_times < 8
        return true
     end  
     return false
  end
  
#--------------------------------------------------------------------------
# ● Enough Sp CT?
#--------------------------------------------------------------------------
 def enough_sp_ct?(skill)
     if can_cancel_sp_cost?(skill.id)
        return true
     end  
     ct_cost = true if $data_skills[skill.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::CT_COST))
     sp_cost = skill.sp_cost
     if self.battler.is_a?(Game_Actor)
        #Force Action
        if $game_temp.force_action_now_id != 0 or
           $game_temp.force_action_id != 0
           $game_temp.force_action_id = 0
           $game_temp.force_action_now_id = 0
           return true
        end        
        item_id = XAS::ITEM_COST[skill.id]
        #Check item ----------------------------------
        if item_id != nil
           if $game_party.item_number(item_id) == 0
              $game_system.se_play($data_system.buzzer_se)
              self.battler.damage = XAS::NO_ITEM_TEXT
              self.battler.damage_pop = true      
              return false
            else  
              $game_party.lose_item(item_id, 1)
            end  
        end    
     end
     #CT Cost --------------------------------------
     if can_ct_cost?(ct_cost)
        if $game_system.action_meter < sp_cost
           $game_system.se_play($data_system.buzzer_se)
           $game_temp.clear_setting3
           return false        
        else
           $game_system.action_meter -= sp_cost
           return true
        end
      else  
      #Sp Cost --------------------------------------  
          if self.battler.sp < sp_cost and ct_cost == nil
             $game_system.se_play($data_system.buzzer_se)
             self.battler.damage = "No Magic"
             self.battler.damage_pop = true
             $game_temp.clear_setting3 if self.battler.is_a?(Game_Actor)            
             return false            
          else
             self.battler.sp -= sp_cost unless ct_cost != nil
             return true                        
          end  
      end  
    return true
  end  
  
end  







#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character
  include XAS_ACTION
end

#===============================================================================
# ■ XAS_Dispose
#===============================================================================
module XAS_Dispose
  
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------
  def update
      action_update
      super
      if @action.is_a?(Game_Action) and @action.done?
         self.action_clear
         @step_anime = false    
      end
  end
end

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character
  include XAS_Dispose
end

#===============================================================================
# ■ Game_Event
#===============================================================================
class Game_Event < Game_Character
  include XAS_Dispose
end

#===============================================================================
# ■ XAS_CharacterName_Suffix
#===============================================================================
module XAS_CharacterName_Suffix
  
 #--------------------------------------------------------------------------
 # ● Character Name
 #--------------------------------------------------------------------------
 def character_name
     character_name = super
     file_name = character_name + self.character_name_suffix.to_s
     character_name = file_name if RPG_FileTest.character_exist?(file_name)
     return character_name
  end
  attr_accessor :character_name_suffix
end

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character
  include XAS_CharacterName_Suffix
end

#===============================================================================
# ■ Game_Event
#===============================================================================
class Game_Event < Game_Character
  include XAS_CharacterName_Suffix
end

#===============================================================================
# ■ XAS_StopToAction
#===============================================================================
module XAS_StopToAction
  
 #--------------------------------------------------------------------------
 # ● Acting?
 #--------------------------------------------------------------------------
  def acting?
    return self.action != nil
  end
  
 #--------------------------------------------------------------------------
 # ● Moving?
 #--------------------------------------------------------------------------
  def moving?
    return (super or self.acting?)
  end

 #--------------------------------------------------------------------------
 # ● Moving2?
 #--------------------------------------------------------------------------

  def moving2?
    return (@real_x != @x * 128 or @real_y != @y * 128)
  end  
end

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character
  include XAS_StopToAction
end

#===============================================================================
# ■ Interpreter
#===============================================================================
class Interpreter
  
 #--------------------------------------------------------------------------
 # ● Command End
 #--------------------------------------------------------------------------
  alias xrxs64_command_end command_end
  def command_end
    @list = nil
    event = $game_map.events[@event_id]
    return if event == nil
    if event.reaction_valid_attack_id
       event.reaction_valid_attack_id = nil
       event.refresh
    end
    xrxs64_command_end
  end
end

#===============================================================================
# ■ Game_Event
#===============================================================================
class Game_Event < Game_Character
  
 #--------------------------------------------------------------------------
 # ● Refresh
 #--------------------------------------------------------------------------
  attr_accessor :reaction_valid_attack_id
  def refresh
    new_page = nil
    unless @erased
      for page in @event.pages.reverse
        c = page.condition
        if c.switch1_valid
          if $game_switches[c.switch1_id] == false
            next
          end
        end
        if c.switch2_valid
          if $game_switches[c.switch2_id] == false
            next
          end
        end
        if c.variable_valid
          if c.variable_id == XAS::HIT_ID and
             c.variable_value == self.reaction_valid_attack_id
          elsif $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            next
          end
        end
        new_page = page
        break
      end
    end
    if new_page == @page
      return
    end
    @page = new_page
    clear_starting
    if @page == nil
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      return
    end
    @tile_id = @page.graphic.tile_id
    if self.event_name =~ /<Enemy(\d+)>/i or
       self.event_name =~ /<Actor>/        
       @base_move_speed = @page.move_speed
    else
       @move_speed =  @page.move_speed
    end    
    if @fall
       pose = ""
    elsif self.knockbacking?
       pose = "_Hit"            
    elsif @collision_attack  
       pose = "_Act"  
    else  
       pose = "Normal"
    end  
    @character_file_name = @page.graphic.character_name + pose.to_s            
    if RPG_FileTest.character_exist?(@character_file_name)
       @character_name = @character_file_name
    else
       @character_name = @page.graphic.character_name
    end      
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    if @trigger == 4
      @interpreter = Interpreter.new
    end
    check_event_trigger_auto  
  end
  
end

#===============================================================================
# ■ Game_Action
#===============================================================================
class Game_Action
  attr_reader   :id                
  attr_accessor :prelag                
  attr_accessor :attack_id            
  attr_reader   :attack_range        
  attr_reader   :attack_range_type    
  attr_accessor :user                
  attr_reader   :hit_events          
  attr_accessor :now_count            
  attr_reader   :final_mark            
  attr_accessor :duration            
  attr_reader   :blow_power            
  attr_reader   :piercing            
  attr_reader   :player_damage        
  attr_reader   :ignore_invincible  
  attr_reader   :ignore_playershield
  attr_reader   :ignore_reflect
  attr_reader   :self_invicible
  attr_reader   :self_animation_hit
  attr_reader   :multi_hit
  attr_reader   :target_invicibles_durations
  attr_reader   :shake
  attr_reader   :animation_speed
  attr_reader   :short_range
  attr_reader   :force_move
  attr_reader   :force_jump
  attr_reader   :ct_cost
  attr_accessor :cast_time
  attr_accessor :link_action_id
  attr_accessor :hold_duration
  attr_accessor :only_ally
  attr_accessor :self_damage
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------
 def initialize(user, action_id)
    @user        = user
    @actor = $game_party.actors[0]      
    @id          = action_id
    @prelag      = 0
    @now_count   = 0
    @duration    = nil
    @attack_id   = 0
    @attack_range= 0
    @hit_events  = []
    @blow_power  = 0
    @self_damage = false
    @multi_hit = false
    @target_invicibles_durations = 10
    @shake = false
    @piercing = false
    @self_invicible = false
    @animation_speed = 1.5
    @short_range = false
    @force_move = nil
    @force_jump = false
    @ignore_playershield = false
    @ignore_reflect = false
    @ct_cost = false
    @cast_time = 0
    @self_animation_hit = 0
    @link_action_id = 0
    @hold_duration = false
    @only_ally = false
  end
  
 #--------------------------------------------------------------------------
 # ● Attachment
 #--------------------------------------------------------------------------
  def attachment(action_id)    
    @duration = Database_Bullet::DURATIONS[action_id]
    @duration = 1 if @duration == 0
    power = Database_Bullet::BLOW_POWERS[action_id]
    @blow_power = power == nil ? 1 : power
    @attack_id_plan = Database_Bullet::ATTACK_ID_PLANS[action_id]
    @attack_range_type = Database_Bullet::ATTACK_RANGE_TYPES[action_id]
    plan = Database_Bullet::ATTACK_RANGE_PLANS[action_id]
    @attack_range_plan = plan.nil? ? nil : plan.dup
    @force_move = Database_Bullet::FORCE_MOVE[action_id]
    @target_invicibles_durations = Database_Bullet::TARGET_INVINCIBLES_DURATIONS[action_id]    
    @animation_speed = Database_Bullet::ANIMATION_SPEED[action_id]
    @cast_time = Database_Bullet::PLAYER_CAST_TIME[action_id]  
    @self_animation_hit = Database_Bullet::SELF_ANIMATION_HIT[action_id]  
    @link_action_id = Database_Bullet::LINK_ACTION_ID[action_id]
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::FORCE_JUMP))
       @force_jump = true    
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SELF_DAMAGE))
       @self_damage = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::ONLY_ALLY))
       @only_ally = true
     end
      @player_damage = nil
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::IGNORE_INVICIBLES))
       @ignore_invincible = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::MULTI_HIT))
       @multi_hit = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SHAKE_EFFECT))
       @shake = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::PIERCINGS))
       @piercing = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SELF_INVICIBLES))
       @self_invicible = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SHORT_RANGE))
       @short_range = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::IGNORE_PLAYER_SHIELD))
       @ignore_playershield = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::IGNORE_REFLECT))
       @ignore_reflect = true  
    end  
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::CT_COST))
       @ct_cost = true
    end
    if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::HOLD_DURATION))
       @hold_duration = true
    end
 end
  
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------
  def update
    if @attack_id_plan != nil
      id = @attack_id_plan[@now_count]
       unless id.nil?
           @attack_id = id
           @hit_events.clear
           @hit_events.push(self.user) unless (@self_damage)
       end
    end
    if @attack_range_plan != nil
       range = @attack_range_plan[@now_count]
       @attack_range = range unless range.nil?
    end
    skill = $data_skills[@id]    
    if ($data_skills[@id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SHIELD_EFFECT)) or
       @hold_duration ) and $game_temp.pressed_attack == true and
       @actor.sp >= skill.sp_cost and user.battler.is_a?(Game_Actor)
       @duration = 1
       $game_temp.shield_active = true if $data_skills[@id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SHIELD_EFFECT))
       $game_temp.endless_cost_time += 1        
       if $game_temp.endless_cost_time > 20
          $game_temp.endless_cost_time = 0
          @actor.sp -= skill.sp_cost
       end  
     else    
       if can_now_count?
          @now_count += 1
       end
    end  
 end
  
 #--------------------------------------------------------------------------
 # ● Can now Count
 #--------------------------------------------------------------------------
 def can_now_count?
     if user.battler.is_a?(Game_Actor)  
        $game_temp.shield_active = false
        $game_temp.endless_cost_time = 0
        return false if $game_temp.somaria_active
     end  
     return true
 end

 #--------------------------------------------------------------------------
 # ● Done?
 #--------------------------------------------------------------------------
  def done?
      return (self.duration.to_i > 0 and self.now_count >= self.duration)
  end
end

#===============================================================================
# ■ Token_Bullet
#===============================================================================
class Token_Bullet < Token_Event
  
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------
 def initialize(user, action_id)
     original_event = @@events[action_id]
     return if original_event == nil
     event = original_event.dup
     event.x = user.x
     event.y = user.y
     pre_direction = event.pages[0].graphic.direction
     event.pages[0].graphic.direction = user.direction
     @character_name = event.pages[0].graphic
     super($game_map.map_id, event)
     self.action_attachment(action_id)
     self.tool_id = action_id
     if user.is_a?(Game_Player)  
        self.usuario = "Player"
     else  
        self.usuario = "Enemy"
      end        
     #Check Tool ID on map  
     for i in $game_temp.tools_on_map
        unless $game_temp.tools_on_map.include?(action_id)
           $game_temp.tools_on_map.push(action_id)
        end  
     end          
     @act_id = action_id
     @action.user = user
     @remain_for_an_act = @action.duration.is_a?(Numeric)
     check_tool_effects(user,action_id,pre_direction)
 end

 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------
  def update
      super
      if @action == nil and @remain_for_an_act
         $game_temp.tools_on_map.delete(self.tool_id)
         if $data_skills[self.tool_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::HOOKSHOT))
            $game_temp.hook_x = 0
            $game_temp.hook_y = 0  
         end  
         erase
      end
      check_event_trigger_attack
  end
end

#===============================================================================
# ■ Map
#===============================================================================
module Map
  RHOMBUS = 1
  SQUARE  = 2
  LINE    = 3
  FORWARD = 1
  BACKWARD = 2
end

#===============================================================================
# ■ Database_Bullet
#===============================================================================
module Database_Bullet
  include Map
  EVENTS    = []
  EVENT_IDS = []
  DURATIONS = []
  PRELAGS   = []
  SUFLAGS   = []
  FINALIZE_MARKS = []
  ATTACK_ID_PLANS    = []
  ATTACK_RANGE_TYPES = []
  ATTACK_RANGE_PLANS = []
  BLOW_POWERS = []
  SELF_MOTIONS = []
  SELF_ANIMATION_PLANS = []
  SELF_ANIMATION_HIT = []  
  PIERCINGS = []
  SELF_DAMAGES = []
  ONLY_ALLY = []
  IGNORE_INVINCIBLES = []
  IGNORE_PLAYERSHIELD = []
  IGNORE_REFLECT = []
  SELF_INVICIBLES = []
  MULTI_HIT = []
  TARGET_INVINCIBLES_DURATIONS = []
  SHORT_RANGE = []
  ANIMATION_SPEED = []
  SHAKE = []
  FORCE_MOVE = []
  FORCE_JUMP = []
  PLAYER_CT_COST = []
  PLAYER_CAST_TIME = []
  LINK_ACTION_ID = []
end








#===============================================================================
# ■ Token_Bullet
#===============================================================================
class Token_Bullet < Token_Event
  
#--------------------------------------------------------------------------
# ● check_tool_effects
#--------------------------------------------------------------------------
 def check_tool_effects(user,action_id,pre_direction)
     #Zoom
      if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::ZOOM))
         self.zoom_x = 2.00
         self.zoom_y = 2.00
      end
     #Guide  
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::GUIDE))
        $game_map.check_battler_on_map      
        for event in $game_map.events.values
            if event.target and event.battler and not (event.dead? or event.erased or event.battler.e_object)
               self.self_target = event.id
            end
        end    
        self.force_move_type = "Guide"
        self.force_move_times = 1
      #Boomerang  
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BOOMERANG)) and
        user.is_a?(Game_Player)
        if self.event_name =~ /<Bommerang(\d+)>/i
           d = $1.to_i
        else
           d = 5
         end  
        @action.duration = 1000
        $game_system.se_play(XAS_SKILL::BOOMERANG_SE)  
        self.move_frequency = 6
        self.move_speed = 5
        self.direction_fix = false
        self.walk_anime = true
        self.step_anime = true
        self.force_move_type = "Forward"
        self.force_move_times = d
      #Hookshot  
      elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::HOOKSHOT)) and
        user.is_a?(Game_Player)
        if self.event_name =~ /<Hookshot(\d+)>/i
           d = $1.to_i
        else
           d = 8
         end  
        @action.duration = 1000
        $game_system.se_play(XAS_SKILL::HOOKSHOT_SE)  
        self.move_frequency = 6
        #self.move_speed = 4.8
        self.direction_fix = true
        self.walk_anime = false
        self.step_anime = false
        self.force_move_type = "Forward"
        self.force_move_times = d        
     #Alwaly on User
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BARRIER))
        if user.is_a?(Game_Event)
           self.alwaly_on_target_id = user.id
        else
           self.alwaly_on_target_id = -1
        end  
        self.moveto(user.x, user.y)  
     #Auto Target
     elsif $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::AUTO_TARGET))
        if user.is_a?(Game_Event)
           self.moveto($game_player.x, $game_player.y)
        else  
           self.moveto($game_temp.xas_target_x, $game_temp.xas_target_y)
        end  
     end    
     #Diagonal Shoot
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::DIAGONAL_SHOOT)) or
        user.force_move_type == "All Shoot"  or user.force_move_type == "Three Shoot"
        self.quarter = user.quarter
        self.diagonal = true
        self.angle_new = 315 if user.quarter
     end          
     #Pickup - Throw
     if action_id == XAS::THROW_SKILL_ID
        self.moveto($game_temp.throw_pos_x, $game_temp.throw_pos_y)
        self.throw_bullet = true
     end    
end
  
end  







#===============================================================================
# ■ XAS_ACTION
#===============================================================================
module XAS_ACTION
  
 #--------------------------------------------------------------------------
 # ● Action Attachment
 #--------------------------------------------------------------------------
  def action_attachment(action_id)
      @action = Game_Action.new(self, action_id)
      @action.attachment(action_id)
      plan = Database_Bullet::SELF_ANIMATION_PLANS[action_id]
      @self_animation_plan = plan.nil? ? nil : plan.dup  
  end
    
 #--------------------------------------------------------------------------
 # ● Action Update
 #--------------------------------------------------------------------------
  def action_update
      return unless @action.is_a?(Game_Action)
      if @self_motion != nil
         self.character_name_suffix = @self_motion
         @pattern = 0
         @pattern_count  = 0
         @self_motion = nil
         @step_anime = true    
      end
      if @self_animation_plan != nil
         animation_id = @self_animation_plan[@action.now_count]
         self.animation_id = animation_id unless animation_id.nil?
      end
       if @action.prelag > 0
          @action.prelag -= 1
          self.shoot_bullet(@action.id) if @action.prelag == 0      
          return
      end      
      @action.update
  end
  
 #--------------------------------------------------------------------------
 # ● Check Event Trigger Attack
 #--------------------------------------------------------------------------
  def check_event_trigger_attack()
    if @action.nil? or @action.attack_id == 0
      return
    end
    hit_check = false
    range = @action.attack_range
    hit = []
    if @action.user.is_a?(Game_Event) and @action.player_damage
       targets = $game_map.events.values  
    else
    targets = [$game_player] + (@action.player_damage ? [] : $game_map.events.values)
    end  
    for event in targets
      next if event == self  or
              @action.hit_events.include?(event) or event.erased
      body_size      = event.body_size
      event_center_x = event.x
      event_center_y = event.y - body_size
      dx = event_center_x - self.x
      dy = event_center_y - self.y
      dx = (dx >= 0 ? [dx - body_size, 0].max : [dx + body_size, 0].min)
      dy = (dy >= 0 ? [dy - body_size, 0].max : [dy + body_size, 0].min)
     case @action.attack_range_type
      when Map::RHOMBUS
        hit_check = (dx.abs + dy.abs <= range)
      when Map::SQUARE
        hit_check = (dx.abs <= range and dy.abs <= range)
      when Map::LINE
        case self.direction
        when 2
          hit_check = (dx == 0 and dy >= 0 and dy <= range)
        when 8
          hit_check = (dx == 0 and dy <= 0 and dy >= -range)
        when 6
          hit_check = (dy == 0 and dx >= 0 and dx <= range)
        when 4
          hit_check = (dy == 0 and dx <= 0 and dx >= -range)
        end
      end
      hit.push(event) if hit_check
      hit_check = false
      end
    for event in hit
     if event.action_effect(self, self.action.attack_id)
       hit_check = true
     end
     if @action.multi_hit == false
        @action.hit_events.push(event)      
     end      
    end
    if hit_check
      $game_temp.active_token = self
    end
  end
 
 #--------------------------------------------------------------------------
 # ● hookshoot_check
 #--------------------------------------------------------------------------  
 def hookshoot_check(attacker,attack_id)
     d = attacker.direction
     dp = $game_player.direction
     front_x = self.x + (d == 6 ? -2 : d == 4 ? 2 : 0)
     front_y = self.y + (d == 2 ? -2 : d == 8 ? 2 : 0)    
     if passable_hookshot?(front_x,front_y,d)
        fx = front_x + (d == 6 ? 1 : d == 4 ? -1 : 0)
        fy = front_y + (d == 2 ? 1 : d == 8 ? -1 : 0)
        if d == 4 or d == 6
           dist = ($game_player.x - self.x).abs
        else
           dist = ($game_player.y - self.y).abs
        end
        $game_player.x = fx
        $game_player.y = fy
        $game_player.terrain_move_speed = 2
        attacker.action.duration = 6 * dist
        attacker.alwaly_on_target_id = self.id
        attacker.force_move_times = 0
        attacker.force_move_type = ""    
     end  
 end  
 
 #--------------------------------------------------------------------------
 # ● Action Effect
 #--------------------------------------------------------------------------
 def take_treasure_check(attacker, attack_id)
     return if self.treasure_time == 0    
     if $data_skills[attack_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::SHORT_RANGE)) and  
        self.treasure_time != 100 + (40 * MOG::XAS_ICON_ERASE_TIME)
        self.start
     end
     if $data_skills[attack_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::BOOMERANG)) or
        $data_skills[attack_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::HOOKSHOT))  
        self.alwaly_on_target_id = attacker.id
        self.hooked = true
     end
 end  
 
 #--------------------------------------------------------------------------
 # ● Action Effect
 #--------------------------------------------------------------------------
  def action_effect(attacker, attack_id)
    take_treasure_check(attacker, attack_id)
    return false unless self.is_a?(Game_Event)
    for page in @event.pages
      if page.condition.variable_valid and
         page.condition.variable_id == XAS::HIT_ID  and
         page.condition.variable_value == attack_id
         hookshoot_check(attacker,attack_id) if self.event_name =~ "<Hookshot>"
         self.reaction_valid_attack_id = attack_id
         self.refresh
         @trigger = 0
         self.start
         return true
      end
    end
    return false
  end
  
  
 #--------------------------------------------------------------------------
 # ● Shoot Bullet
 #--------------------------------------------------------------------------
  def shoot_bullet(action_id)
    bullet_token = Token_Bullet.new(self, action_id)
    $game_map.add_token(bullet_token)
    @self_motion = Database_Bullet::SELF_MOTIONS[action_id]
#    self.need_refresh = true
    return bullet_token
  end
  
 #--------------------------------------------------------------------------
 # ● Body Size
 #--------------------------------------------------------------------------
  def body_size
      return 0
  end
  
 #--------------------------------------------------------------------------
 # ● Action Clear
 #--------------------------------------------------------------------------
  def action_clear
      @action = nil
      self.character_name_suffix = nil
  end
  
end


Dejo también el apartado donde me lleva tras el error, que lleva a la primera línea que empieza por 'if'.

Spoiler:

Código:
#--------------------------------------------------------------------------
# ● Can Auto Target?
#--------------------------------------------------------------------------
 def check_select_target?(action_id)
     return false if self.is_a?(Game_Event)
     if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::AUTO_TARGET))
        if $game_temp.xas_target_shoot_id == 0
           $game_temp.xas_target_shoot_id = action_id
           $game_map.check_battler_on_map
           $scene = Scene_Target_Select.new
           return true
        end  
     end  
     return false
 end  
 


Yo ya había hecho esto antes y funciona con otros objetos. ¿Es que no puede haber más de 217 eventos en el mapa TOOL? Lo que hay en el evento comun no es el problema ya que si activo el interruptor desde el mapa, funciona perfectamente.

Espero respuestas, muchas gracias de antemano.
avatar
jlopez_96
Iniciado
Iniciado

0/3

Créditos 59

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda urgente en RPG Maker XP

Mensaje por orochii el 2017-11-24, 16:09

Mirando esta linea...
Código:
if $data_skills[action_id].element_set.include?($data_system.elements.index(XAS_ELEMENT::AUTO_TARGET))
Parece ser que el objeto necesita también un skill con el mismo ID. Prueba haciendo más grande la lista de skills, quiza hasta skill 217 o eso.

¿No sabes si en el tutorial o cosa donde hayas aprendido a hacer eso mencionaban algo de skills al crear un objeto?

Ojala se solucione, salut!
avatar
orochii
Reportero

0/3

Créditos 7591

Gracias : 403

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda urgente en RPG Maker XP

Mensaje por jlopez_96 el 2017-11-24, 21:01

¡Muchas gracias!
Me ha servido y lo peor es que lo sabía, pero hay tanto para añadir y editar que se me ha olvidado por completo jajajaaj xdd

Efectivamente era ese el problema, que no había añadido los objetos a la sección habilidades de la base de datos.

De todas formas, hay otra duda que tengo y por el momento nadie ha sabido contestarme...

Te agradecería que te pasaras por dicho tema y a ver si se te ocurre algo.

Te dejo aquí el link.
http://www.mundo-maker.com/t14434-duda-con-xas-para-rpg-maker-xp-urge?highlight=Duda+RPG+Maker+XP

Mil gracias, de verdad.
Un saludo! :)
avatar
jlopez_96
Iniciado
Iniciado

0/3

Créditos 59

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda urgente en RPG Maker XP

Mensaje por orochii el 2017-11-24, 21:31

Un último consejo. Nombra los temas un poco mejor xD. Que eso de "ayuda urgente rpg maker xp" no dice nada xD.

Aparte lo de RPG Maker XP va de más, ya pusiste el icono del programa xd.

Salut!
avatar
orochii
Reportero

0/3

Créditos 7591

Gracias : 403

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda urgente en RPG Maker XP

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.