undefined method error on Jet's viewed battle system? [VXAce]

● ARCHIVED · READ-ONLY
Started by Skijarama 16 posts View original ↗
  1. I have been getting this error every time I use the ability "Healing agent" on the character who used it. This only happens in battle.

    nEAdRLE.png

    Here is  the code being used:

    Spoiler
    #===============================================================================# Jet's Viewed Battle System# By Jet10985(Jet)#===============================================================================# This script will add actor sprites into the battle scene.# This script has: 10 customization options.#===============================================================================# Overwritten Methods:# Game_Actor: use_sprite?, screen_x, screen_y# Sprite_Battler: revert_to_normal# Scene_Battle: show_attack_animation#-------------------------------------------------------------------------------# Aliased methods:# Game_Enemy: screen_x, screen_y# Sprite_Battler: update_origin, update_bitmap# Window_BattleEnemy: update# Window_BattleActor: update# Window_ActorCommand: update#================================================================================beginSet an enemy's attack animation by using this in their notebox:<anim: 50>Replace 50 with the animation id.--------------------------------------------------------------------------------You may use a sprite for a monster instead of a regular battler by using thisnotetag in the monster's notebox:<sprite: ImageName, 0>Replace ImageName with the name of the spritesheet, and 0 with the index on thespritesheet you want the monster to use.=endmodule Jet module VBS # Which direction do actors face on the field? There are 4 options: # :up, :down, :left, or :right. Actor's will direction chosen. ACTOR_ORIENTATION = :left # This will make it so actor's are centered on the screen instead of being # placed in pre-determined lines using START_POINT and SPACE_DIFFERENCE. CENTER_ACTORS = true # This is the x and y starting point for actors. This option may take one of # 2 functions. If CENTER_ACTORS is true, and ACTOR_ORIENTATION is either # :left, or :right, then only the x value will be used as where to center # the actors. If it is :down or :up, only the y value will be used. # If CENTER_ACTORS is false, then this is where actor's will begin to be # placed on screen. START_POINT = [400, 250] # This is how much space is between each actor on the field. SPACE_DIFFERENCE = 30 # If you're using the :left or :right view, this will push each # subsequent actor back by a certain number of pixels, to avoid having # a straight line. SIDEVIEW_PUSH_BACK = 16 # Do you want to reverse the direction and field during an ambush? # (This is when enemies surprise the player and get the first turn) REVERSE_FIELD_FOR_AMBUSH = true # this is how far the actor will move forward when they are selection an # action, as well as executing it. SLIDE_AMOUNT = 66 # This is how far the actor will slide each frame until they reach their # goal of SLIDE_FORWARD. Best used when this is a factor of SLIDE_FORWARD. FRAME_SLIDE = 6 # During selecting an actor command, and during selecting an enemy target, # would you like the selected character to flash? DO_FLASH = true # These are state-based sprite changes. If the actor has one of these states # then the game will search for a sprite of the character's regular sprite # name with the special state tag appended to it. So if Jimmy's sprite # name was $Jimmy, and he had poison inflcted on him, and poison's id was # listed here as ["_poison", 0], it would change Jimmy's in-battle sprite # to $Jimmy_poison at the first sprite index. STATE_SPRITES = { 1 => ["_dead", 0] } # Do not touch this option. DIR_ORIENT = {right: 6, left: 4, down: 2, up: 8}[ACTOR_ORIENTATION] endend#===============================================================================# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.#===============================================================================class Integer def even? self % 2 == 0 end def odd? !even? endendclass RPG::Enemy def animation (f = note.match(/<anim:[ ]*(\d+)>/i)) ? f[1].to_i : 1 end def battle_sprite (f = note.match(/<sprite:[ ]*(.+),[ ]*(\d+)>/i)) ? f[1..2] : false endendmodule BattleManager class << self alias jet3845_on_encounter on_encounter def on_encounter(*args, &block) jet3845_on_encounter(*args, &block) @true_surprise = @surprise end end def self.true_surprise @true_surprise ||= false end def self.player_dir if @true_surprise && Jet::VBS::REVERSE_FIELD_FOR_AMBUSH return 10 - Jet::VBS::DIR_ORIENT else return Jet::VBS::DIR_ORIENT end endendclass Game_Actor def use_sprite? true end def screen_x if [8, 2].include?(BattleManager.player_dir) if Jet::VBS::CENTER_ACTORS x = Graphics.width / 2 x -= 16 x += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even? x -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE return x else return Jet::VBS::START_POINT[0] + Jet::VBS::SPACE_DIFFERENCE * index end end return Jet::VBS::START_POINT[0] end alias jet3745_screen_x screen_x def screen_x(*args, &block) x = jet3745_screen_x(*args, &block) case BattleManager.player_dir when 4 x += Jet::VBS::SIDEVIEW_PUSH_BACK * index when 6 x -= Jet::VBS::SIDEVIEW_PUSH_BACK * index end return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir) x end def screen_y if [6, 4].include?(BattleManager.player_dir) if Jet::VBS::CENTER_ACTORS y = Graphics.height / 2 y -= 16 y += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even? y -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE return y else return Jet::VBS::START_POINT[1] + Jet::VBS::SPACE_DIFFERENCE * index end end return Jet::VBS::START_POINT[1] end alias jet3745_screen_y screen_y def screen_y(*args, &block) y = jet3745_screen_y(*args, &block) return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir) y end def screen_z 101 + index end alias jet3745_character_name character_name def character_name(*args, &block) name = jet3745_character_name(*args, &block) return name unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return name + add[0] end } return name end alias jet3745_character_index character_index def character_index(*args, &block) index = jet3745_character_index(*args, &block) return index unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return index + add[1] end } return index endendclass Game_Enemy alias jet3745_screen_x screen_x def screen_x(*args, &block) x = jet3745_screen_x(*args, &block) return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir) x end alias jet3745_screen_y screen_y def screen_y(*args, &block) y = jet3745_screen_y(*args, &block) return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir) y end def atk_animation_id1 enemy.animation end def atk_animation_id2 0 end def bat_sprite? !!enemy.battle_sprite end def character_name enemy.battle_sprite[0] end def character_index enemy.battle_sprite[1].to_i end alias jet3745_character_name character_name def character_name(*args, &block) name = jet3745_character_name(*args, &block) return name unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return name + add[0] end } return name end alias jet3745_character_index character_index def character_index(*args, &block) index = jet3745_character_index(*args, &block) return index unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return index + add[1] end } return index endendclass Sprite_Battler alias jet3835_update_bitmap update_bitmap def update_bitmap(*args, &block) if @battler.actor? || @battler.bat_sprite? actor_update_bitmap elsif @battler.enemy? jet3835_update_bitmap(*args, &block) end end def actor_update_bitmap @timer ||= 0 @index ||= 1 @char_index ||= @battler.character_index @back_time ||= false index = @index char_index = @char_index @timer += 1 (@index += (@back_time ? -1 : 1); @timer = 0) if @timer == 19 if @index == 3 @back_time = true @index = 1 elsif @index == -1 @back_time = false @index = 1 end @char_index = @battler.character_index bitmap = Cache.character(@battler.character_name) return if bitmap == @bitmap && index == @index && @char_index == char_index self.bitmap = bitmap sign = @battler.character_name[/^[\!\$]./] if sign && sign.include?('$') cw = bitmap.width / 3 ch = bitmap.height / 4 else cw = bitmap.width / 12 ch = bitmap.height / 8 end dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) sx = (@battler.character_index % 4 * 3) * cw + (cw * @index) sy = (@battler.character_index / 4 * 4 + (dir - 2) / 2) * ch self.src_rect.set(sx, sy, cw, ch) end alias jet3745_update_origin update_origin def update_origin(*args, &block) if @battler.actor? || @battler.bat_sprite? actor_update_origin elsif @battler.enemy? jet3745_update_origin(*args, &block) end end def actor_update_origin self.ox = (@actor_ox ||= 0) self.oy = (@actor_oy ||= 0) end def revert_to_normal self.blend_type = 0 self.color.set(0, 0, 0, 0) self.opacity = 255 if bitmap && @battler && !@battler.actor? && !@battler.bat_sprite? self.ox = bitmap.width / 2 if bitmap self.src_rect.y = 0 end end def slide_forward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE) dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) case dir when 2 affect = :mad:actor_oy frame *= -1 when 4 affect = :mad:actor_ox amount *= -1 when 6 affect = :mad:actor_ox frame *= -1 when 8 affect = :mad:actor_oy amount *= -1 end orig_amount = amount until (orig_amount < 0 ? amount >= 0 : amount <= 0) instance_variable_set(affect, instance_variable_get(affect) + frame) amount += frame SceneManager.scene.spriteset.update Graphics.update end end def slide_backward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE) dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) case dir when 2 affect = :mad:actor_oy amount *= -1 when 4 affect = :mad:actor_ox frame *= -1 when 6 affect = :mad:actor_ox amount *= -1 when 8 affect = :mad:actor_oy frame *= -1 end orig_amount = amount until (orig_amount < 0 ? amount >= 0 : amount <= 0) instance_variable_set(affect, instance_variable_get(affect) + frame) amount += frame SceneManager.scene.spriteset.update Graphics.update end endendclass Scene_Battle attr_reader :spriteset def show_attack_animation(targets) show_normal_animation(targets, @subject.atk_animation_id1, false) show_normal_animation(targets, @subject.atk_animation_id2, true) end alias jet3746_use_item use_item def use_item(*args, &block) sprite = @spriteset.battler_to_sprite(@subject) if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard? sprite.slide_forward end jet3746_use_item(*args, &block) if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard? sprite.slide_backward end endendclass Spriteset_Battle def battler_to_sprite(actor) battler_sprites.each {|a| return a if a.battler == actor } return false endendclass Window_BattleEnemy alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH if Object.const_defined?:)Mouse) $game_troop.alive_members.each {|a| img = SceneManager.scene.spriteset.battler_to_sprite(a) x = img.x - img.ox y = img.y - img.oy if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height) self.index = a.index end } end active_troop = $game_troop.alive_members[@index] sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect:)whiten) if !sprite.effect? end endendclass Window_BattleActor alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH if Object.const_defined?:)Mouse) $game_party.alive_members.each {|a| img = SceneManager.scene.spriteset.battler_to_sprite(a) x = img.x - img.ox y = img.y - img.oy if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height) self.index = a.index end } end active_troop = $game_party.members[@index] sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect:)whiten) if !sprite.effect? end endendclass Window_ActorCommand alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH active_troop = @actor sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect:)whiten) if !sprite.effect? end endendclass Game_Action def guard? item == $data_skills[subject.guard_skill_id] endend
    So, How would I fix this? If you need more information, let me know.
  2. 1) did you start a new game before testing this?


    2) what is that ability you talk about? Please post a screenshot of it


    3) what are your skills #1 and #2? Did you change anything on them?


    4) what is your state #9? Did you change anything on it from default?
  3. 1) Yes. me and multiple people (friends of mine) have had this issue.

    2) Heres your screenshot.

    Spoiler
    mfHsrQn.png
    3) I don't believe so, though I might have changed my formula a little bit on Skill 1.. I'll supply of screenshot of both.

    Spoiler
    reLXSb6.png

    CrR2sgc.png
    4) No, I don't think so.

    Spoiler
    rNDQR9y.png
  4. Skijarama, please do not post other people's scripts, but rather provide a link to them instead. There are several reasons for this, which I won't go into (you can ask me via PM if you're curios), but it makes it easier for us to help you.


    You said you use an ability called "Healing Agent". I don't see it in the skill list. I think this is the screenshot Andar was asking about.


    Strange that line 435 threw the error, but line 431 (which is exactly the same), didn't. Is there something in the default use_item method that sets @subject.current_action to nil? I am not directing this question at you, Skijarama (unless you're comfortable with scripting), but to other scripters who might look at this, as I'm at work and don't have Ace with me.
  5. Shaz said:
    Skijarama, please do not post other people's scripts, but rather provide a link to them instead. There are several reasons for this, which I won't go into (you can ask me via PM if you're curios), but it makes it easier for us to help you.
    Oh, whoops. Sorry about that. Honest mistake.
  6. no worries. What about the other questions? There's no "Healing Agent" skill in your screenshots.
  7. Shaz said:
    no worries. What about the other questions? There's no "Healing Agent" skill in your screenshots.
    Look again, it's the marked skill in the very first screenshot of post #3, and it has been there from the beginning.
    Unfortunately I haven't seen any bug yet, so I can't say what the cause is...
  8. Ah, sorry. I was looking for the skill name in the other list, and assumed because there were gaps at the bottom, that's all that was set up.


    I'm still thinking it's got something to do with this ...

    Shaz said:
    Strange that line 435 threw the error, but line 431 (which is exactly the same), didn't. Is there something in the default use_item method that sets @subject.current_action to nil?
  9. Do you think it would have something to do with the sprites I'm using?
  10. Skijarama said:
    Do you think it would have something to do with the sprites I'm using?
    No, sprites can't create such errors by themselves, because they are only pictures.
    But we should check where the error really comes from:


    Can you please install the backtracer (http://www.himeworks.com/2013/06/09/custom-main-full-error-backtrace/) and copy it's error message output into this topic?


    It might be that the bug is somewhere else, with the backtracer we'll get a better error message.
  11. Okay, here is the error message I got:

    SideviewBattle:435:in `use_item': undefined method `guard?' for nil:NilClass, NoMethodError
        from Cast_Animations:188:in `use_item'
        from Scene_Battle:573:in `execute_action'
        from Scene_Battle:550:in `process_action'
        from Scene_Battle:48:in `update'
        from Scene_Base:14:in `main'
        from SceneManager:23:in `run'
        from Main:13:in `block in <main>'
  12. Hello? I hate to bump this, but I really want to fix this issue.
  13. it looks like a compatibility issue between the sideview battlescript and the cast animation battlescript.


    Check those, I don't know either.
  14. Bug is pretty tough.  It appears to lose action altogether while trying to perform a task that causes a negative state to the character using it.  I haven't played with it much, but it seems to be something wrong. =D

    I did however build a nice little demo for the next person to continue.

    http://steamcommunity.com/sharedfiles/filedetails/?id=285652176
  15. Well, whatever the case, I managed to fix it by just changing the fact that it stuns the person it gets used on to simply not stun them, but not restore as many HP.