valkill100
Member
Hello everyone, valkill100 here. Although this is my first post, I'm not exactly new here. I'm having a problem with the Game_Actor script in RPG Maker VX.
I get "Script'Game_Actor' line 619:ArgumentError occured. Comparison of Fixnum with Array failed."
Here is how my script looks.
Everything works fine whith a new game while leveling up. But, let's say I save and close the game. When I continue and am about to level up again I get the error above. Any suggestions?
I get "Script'Game_Actor' line 619:ArgumentError occured. Comparison of Fixnum with Array failed."
Here is how my script looks.
Code:
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles actors. It's used within the Game_Actors class
# ($game_actors) and referenced by the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :name # name
attr_reader :character_name # character graphic filename
attr_reader :character_index # character graphic index
attr_reader :face_name # face graphic filename
attr_reader :face_index # face graphic index
attr_reader :class_id # class ID
attr_reader :weapon_id # weapon ID
attr_reader :armor1_id # shield ID
attr_reader :armor2_id # helmet ID
attr_reader :armor3_id # body armor ID
attr_reader :armor4_id # accessory ID
attr_reader :level # level
attr_reader :exp # experience
attr_accessor :last_skill_id # for cursor memory: Skill
#--------------------------------------------------------------------------
# * Object Initialization
# actor_id : actor ID
#--------------------------------------------------------------------------
def initialize(actor_id)
super()
setup(actor_id)
@last_skill_id = 0
end
#--------------------------------------------------------------------------
# * Setup
# actor_id : actor ID
#--------------------------------------------------------------------------
def setup(actor_id)
actor = $data_actors[actor_id]
@actor_id = actor_id
@name = actor.name
@character_name = actor.character_name
@character_index = actor.character_index
@face_name = actor.face_name
@face_index = actor.face_index
@class_id = actor.class_id
@weapon_id = actor.weapon_id
@armor1_id = actor.armor1_id
@armor2_id = actor.armor2_id
@armor3_id = actor.armor3_id
@armor4_id = actor.armor4_id
@level = actor.initial_level
@exp_list = Array.new(101)
make_exp_list
@exp = @exp_list[@level]
@skills = []
for i in self.class.learnings
learn_skill(i.skill_id) if i.level <= @level
end
clear_extra_values
recover_all
end
#--------------------------------------------------------------------------
# * Determine if Actor or Not
#--------------------------------------------------------------------------
def actor?
return true
end
#--------------------------------------------------------------------------
# * Get Actor ID
#--------------------------------------------------------------------------
def id
return @actor_id
end
#--------------------------------------------------------------------------
# * Get Index
#--------------------------------------------------------------------------
def index
return $game_party.members.index(self)
end
#--------------------------------------------------------------------------
# * Get Actor Object
#--------------------------------------------------------------------------
def actor
return $data_actors[@actor_id]
end
#--------------------------------------------------------------------------
# * Get Class Object
#--------------------------------------------------------------------------
def class
return $data_classes[@class_id]
end
#--------------------------------------------------------------------------
# * Get Skill Object Array
#--------------------------------------------------------------------------
def skills
result = []
for i in @skills
result.push($data_skills[i])
end
return result
end
#--------------------------------------------------------------------------
# * Get Weapon Object Array
#--------------------------------------------------------------------------
def weapons
result = []
result.push($data_weapons[@weapon_id])
if two_swords_style
result.push($data_weapons[@armor1_id])
end
return result
end
#--------------------------------------------------------------------------
# * Get Armor Object Array
#--------------------------------------------------------------------------
def armors
result = []
unless two_swords_style
result.push($data_armors[@armor1_id])
end
result.push($data_armors[@armor2_id])
result.push($data_armors[@armor3_id])
result.push($data_armors[@armor4_id])
return result
end
#--------------------------------------------------------------------------
# * Get Equipped Item Object Array
#--------------------------------------------------------------------------
def equips
return weapons + armors
end
#--------------------------------------------------------------------------
# * Calculate Experience
#--------------------------------------------------------------------------
def make_exp_list
@exp_list[1] = @exp_list[100] = 0
@exp_list[2] = 20
@exp_list[3] = 60
@exp_list[4] = 130
@exp_list[5] = 240
@exp_list[6] = 400
@exp_list[7] = 620
@exp_list[8] = 920
@exp_list[9] = 1,320
@exp_list[10] = 1,840
@exp_list[11] = 2,490
@exp_list[12] = 3,280
@exp_list[13] = 4,220
@exp_list[14] = 5,320
@exp_list[15] = 6,590
@exp_list[16] = 8,040
@exp_list[17] = 9,680
@exp_list[18] = 11,520
@exp_list[19] = 13,570
@exp_list[20] = 15,840
@exp_list[21] = 18,340
@exp_list[22] = 21080
@exp_list[23] = 24,070
@exp_list[24] = 27,320
@exp_list[25] = 30,840
@exp_list[26] = 34,640
@exp_list[27] = 38,730
@exp_list[28] = 43,120
@exp_list[29] = 47,820
@exp_list[30] = 52,840
@exp_list[31] = 58,190
@exp_list[32] = 63,880
@exp_list[33] = 69,920
@exp_list[34] = 76,320
@exp_list[35] = 83090
@exp_list[36] = 90,240
@exp_list[37] = 97,780
@exp_list[38] = 105,720
@exp_list[39] = 114,070
@exp_list[40] = 122,840
@exp_list[41] = 132,040
@exp_list[42] = 141,680
@exp_list[43] = 151,770
@exp_list[44] = 162,320
@exp_list[45] = 173,340
@exp_list[46] = 184,840
@exp_list[47] = 196,830
@exp_list[48] = 209,320
@exp_list[49] = 222,320
@exp_list[50] = 235,840
@exp_list[51] = 249,890
@exp_list[52] = 264,480
@exp_list[53] = 279,620
@exp_list[54] = 295,320
@exp_list[55] = 311,590
@exp_list[56] = 328,440
@exp_list[57] = 345,880
@exp_list[58] = 363,920
@exp_list[59] = 382,570
@exp_list[60] = 401,840
@exp_list[61] = 421,740
@exp_list[62] = 442,280
@exp_list[63] = 463,470
@exp_list[64] = 485,320
@exp_list[65] = 507,840
@exp_list[66] = 531,040
@exp_list[67] = 554,930
@exp_list[68] = 579,520
@exp_list[69] = 604,820
@exp_list[70] = 630,840
@exp_list[71] = 657,590
@exp_list[72] = 685080
@exp_list[73] = 713,320
@exp_list[74] = 742,320
@exp_list[75] = 772090
@exp_list[76] = 802,640
@exp_list[77] = 833,980
@exp_list[78] = 866,120
@exp_list[79] = 899,070
@exp_list[80] = 932,840
@exp_list[81] = 967,440
@exp_list[81] = 1,002,880
@exp_list[83] = 1039170
@exp_list[84] = 1,076,320
@exp_list[85] = 1,114,340
@exp_list[86] = 1,153,240
@exp_list[87] = 1,193,030
@exp_list[88] = 1,233,720
@exp_list[89] = 1,275,320
@exp_list[90] = 1,317,840
@exp_list[91] = 1,361,290
@exp_list[92] = 1,405,680
@exp_list[93] = 1,451,020
@exp_list[94] = 1,497,320
@exp_list[95] = 1,544,590
@exp_list[96] = 1,592,840
@exp_list[97] = 1642080
@exp_list[98] = 1,692,320
@exp_list[99] = 1,743,570
for i in 101..102
m = actor.exp_basis
@exp_list[i] = @exp_list[i-1] + Integer(m)
end
end
#--------------------------------------------------------------------------
# * Get Element Change Value
# element_id : element ID
#--------------------------------------------------------------------------
def element_rate(element_id)
rank = self.class.element_ranks[element_id]
result = [0,200,150,100,50,0,-100][rank]
for armor in armors.compact
result /= 2 if armor.element_set.include?(element_id)
end
for state in states
result /= 2 if state.element_set.include?(element_id)
end
return result
end
#--------------------------------------------------------------------------
# * Get Added State Success Rate
# state_id : state ID
#--------------------------------------------------------------------------
def state_probability(state_id)
if $data_states[state_id].nonresistance
return 100
else
rank = self.class.state_ranks[state_id]
return [0,100,80,60,40,20,0][rank]
end
end
#--------------------------------------------------------------------------
# * Determine if State is Resisted
# state_id : state ID
#--------------------------------------------------------------------------
def state_resist?(state_id)
for armor in armors.compact
return true if armor.state_set.include?(state_id)
end
return false
end
#--------------------------------------------------------------------------
# * Get Normal Attack Element
#--------------------------------------------------------------------------
def element_set
result = []
if weapons.compact == []
return [1] # Unarmed: melee attribute
end
for weapon in weapons.compact
result |= weapon == nil ? [] : weapon.element_set
end
return result
end
#--------------------------------------------------------------------------
# * Get Additional Effect of Normal Attack (state change)
#--------------------------------------------------------------------------
def plus_state_set
result = []
for weapon in weapons.compact
result |= weapon == nil ? [] : weapon.state_set
end
return result
end
#--------------------------------------------------------------------------
# * Get Maximum HP Limit
#--------------------------------------------------------------------------
def maxhp_limit
return 9999
end
#--------------------------------------------------------------------------
# * Get Basic Maximum HP
#--------------------------------------------------------------------------
def base_maxhp
return actor.parameters[0, @level]
end
#--------------------------------------------------------------------------
# * Get basic Maximum MP
#--------------------------------------------------------------------------
def base_maxmp
return actor.parameters[1, @level]
end
#--------------------------------------------------------------------------
# * Get Basic Attack
#--------------------------------------------------------------------------
def base_atk
n = actor.parameters[2, @level]
for item in equips.compact do n += item.atk end
return n
end
#--------------------------------------------------------------------------
# * Get Basic Defense
#--------------------------------------------------------------------------
def base_def
n = actor.parameters[3, @level]
for item in equips.compact do n += item.def end
return n
end
#--------------------------------------------------------------------------
# * Get Basic Spirit
#--------------------------------------------------------------------------
def base_spi
n = actor.parameters[4, @level]
for item in equips.compact do n += item.spi end
return n
end
#--------------------------------------------------------------------------
# * Get Basic Agility
#--------------------------------------------------------------------------
def base_agi
n = actor.parameters[5, @level]
for item in equips.compact do n += item.agi end
return n
end
#--------------------------------------------------------------------------
# * Get Hit Rate
#--------------------------------------------------------------------------
def hit
if two_swords_style
n1 = weapons[0] == nil ? 95 : weapons[0].hit
n2 = weapons[1] == nil ? 95 : weapons[1].hit
n = [n1, n2].min
else
n = weapons[0] == nil ? 95 : weapons[0].hit
end
return n
end
#--------------------------------------------------------------------------
# * Get Evasion Rate
#--------------------------------------------------------------------------
def eva
n = 5
for item in armors.compact do n += item.eva end
return n
end
#--------------------------------------------------------------------------
# * Get Critical Ratio
#--------------------------------------------------------------------------
def cri
n = 4
n += 4 if actor.critical_bonus
for weapon in weapons.compact
n += 4 if weapon.critical_bonus
end
return n
end
#--------------------------------------------------------------------------
# * Get Ease of Hitting
#--------------------------------------------------------------------------
def odds
return 4 - self.class.position
end
#--------------------------------------------------------------------------
# * Get [Dual Wield] Option
#--------------------------------------------------------------------------
def two_swords_style
return actor.two_swords_style
end
#--------------------------------------------------------------------------
# * Get [Fixed Equipment] Option
#--------------------------------------------------------------------------
def fix_equipment
return actor.fix_equipment
end
#--------------------------------------------------------------------------
# * Get [Automatic Battle] Option
#--------------------------------------------------------------------------
def auto_battle
return actor.auto_battle
end
#--------------------------------------------------------------------------
# * Get [Super Guard] Option
#--------------------------------------------------------------------------
def super_guard
return actor.super_guard
end
#--------------------------------------------------------------------------
# * Get [Pharmocology] Option
#--------------------------------------------------------------------------
def pharmacology
return actor.pharmacology
end
#--------------------------------------------------------------------------
# * Get [First attack within turn] weapon option
#--------------------------------------------------------------------------
def fast_attack
for weapon in weapons.compact
return true if weapon.fast_attack
end
return false
end
#--------------------------------------------------------------------------
# * Get [Chain attack] weapon option
#--------------------------------------------------------------------------
def dual_attack
for weapon in weapons.compact
return true if weapon.dual_attack
end
return false
end
#--------------------------------------------------------------------------
# * Get [Prevent critical] armor option
#--------------------------------------------------------------------------
def prevent_critical
for armor in armors.compact
return true if armor.prevent_critical
end
return false
end
#--------------------------------------------------------------------------
# * Get [half MP cost] armor option
#--------------------------------------------------------------------------
def half_mp_cost
for armor in armors.compact
return true if armor.half_mp_cost
end
return false
end
#--------------------------------------------------------------------------
# * Get [Double Experience] Armor Option
#--------------------------------------------------------------------------
def double_exp_gain
for armor in armors.compact
return true if armor.double_exp_gain
end
return false
end
#--------------------------------------------------------------------------
# * Get [Auto HP Recovery] Armor Option
#--------------------------------------------------------------------------
def auto_hp_recover
for armor in armors.compact
return true if armor.auto_hp_recover
end
return false
end
#--------------------------------------------------------------------------
# * Get Normal Attack Animation ID
#--------------------------------------------------------------------------
def atk_animation_id
if two_swords_style
return weapons[0].animation_id if weapons[0] != nil
return weapons[1] == nil ? 1 : 0
else
return weapons[0] == nil ? 1 : weapons[0].animation_id
end
end
#--------------------------------------------------------------------------
# * Get Normal Attack Animation ID (Dual Wield: Weapon 2)
#--------------------------------------------------------------------------
def atk_animation_id2
if two_swords_style
return weapons[1] == nil ? 0 : weapons[1].animation_id
else
return 0
end
end
#--------------------------------------------------------------------------
# * Get Experience String
#--------------------------------------------------------------------------
def exp_s
return @exp_list[@level+1] > 0 ? @exp : "-------"
end
#--------------------------------------------------------------------------
# * Get String for Next Level Experience
#--------------------------------------------------------------------------
def next_exp_s
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] : "-------"
end
#--------------------------------------------------------------------------
# * Get String for Experience to Next Level
#--------------------------------------------------------------------------
def next_rest_exp_s
return @exp_list[@level+1] > 0 ?
(@exp_list[@level+1] - @exp) : "-------"
end
#--------------------------------------------------------------------------
# * Change Equipment (designate ID)
# equip_type : Equip region (0..4)
# item_id : Weapon ID or armor ID
# test : Test flag (for battle test or temporary equipment)
# Used by event commands or battle test preparation.
#--------------------------------------------------------------------------
def change_equip_by_id(equip_type, item_id, test = false)
if equip_type == 0 or (equip_type == 1 and two_swords_style)
change_equip(equip_type, $data_weapons[item_id], test)
else
change_equip(equip_type, $data_armors[item_id], test)
end
end
#--------------------------------------------------------------------------
# * Change Equipment (designate object)
# equip_type : Equip region (0..4)
# item : Weapon or armor (nil is used to unequip)
# test : Test flag (for battle test or temporary equipment)
#--------------------------------------------------------------------------
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # Weapon
@weapon_id = item_id
unless two_hands_legal? # If two hands is not allowed
change_equip(1, nil, test) # Unequip from other hand
end
when 1 # Shield
@armor1_id = item_id
unless two_hands_legal? # If two hands is not allowed
change_equip(0, nil, test) # Unequip from other hand
end
when 2 # Head
@armor2_id = item_id
when 3 # Body
@armor3_id = item_id
when 4 # Accessory
@armor4_id = item_id
end
end
#--------------------------------------------------------------------------
# * Discard Equipment
# item : Weapon or armor to be discarded.
# Used when the "Include Equipment" option is enabled.
#--------------------------------------------------------------------------
def discard_equip(item)
if item.is_a?(RPG::Weapon)
if @weapon_id == item.id
@weapon_id = 0
elsif two_swords_style and @armor1_id == item.id
@armor1_id = 0
end
elsif item.is_a?(RPG::Armor)
if not two_swords_style and @armor1_id == item.id
@armor1_id = 0
elsif @armor2_id == item.id
@armor2_id = 0
elsif @armor3_id == item.id
@armor3_id = 0
elsif @armor4_id == item.id
@armor4_id = 0
end
end
end
#--------------------------------------------------------------------------
# * Determine if Two handed Equipment
#--------------------------------------------------------------------------
def two_hands_legal?
if weapons[0] != nil and weapons[0].two_handed
return false if @armor1_id != 0
end
if weapons[1] != nil and weapons[1].two_handed
return false if @weapon_id != 0
end
return true
end
#--------------------------------------------------------------------------
# * Determine if Equippable
# item : item
#--------------------------------------------------------------------------
def equippable?(item)
if item.is_a?(RPG::Weapon)
return self.class.weapon_set.include?(item.id)
elsif item.is_a?(RPG::Armor)
return false if two_swords_style and item.kind == 0
return self.class.armor_set.include?(item.id)
end
return false
end
#--------------------------------------------------------------------------
# * Change Experience
# exp : New experience
# show : Level up display flag
#--------------------------------------------------------------------------
def change_exp(exp, show)
last_level = @level
last_skills = skills
@exp = [[exp, 9999999].min, 0].max
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
level_up
end
while @exp < @exp_list[@level]
level_down
end
@hp = [@hp, maxhp].min
@mp = [@mp, maxmp].min
if show and @level > last_level
display_level_up(skills - last_skills)
end
end
#--------------------------------------------------------------------------
# * Level Up
#--------------------------------------------------------------------------
def level_up
@level += 1
for learning in self.class.learnings
learn_skill(learning.skill_id) if learning.level == @level
end
end
#--------------------------------------------------------------------------
# * Level Down
#--------------------------------------------------------------------------
def level_down
@level -= 1
end
#--------------------------------------------------------------------------
# * Show Level Up Message
# new_skills : Array of newly learned skills
#--------------------------------------------------------------------------
def display_level_up(new_skills)
$game_message.new_page
text = sprintf(Vocab::LevelUp, @name, Vocab::level, @level)
$game_message.texts.push(text)
for skill in new_skills
text = sprintf(Vocab::ObtainSkill, skill.name)
$game_message.texts.push(text)
end
end
#--------------------------------------------------------------------------
# * Get Experience (for the double experience point option)
# exp : Amount to increase experience.
# show : Level up display flag
#--------------------------------------------------------------------------
def gain_exp(exp, show)
if double_exp_gain
change_exp(@exp + exp * 2, show)
else
change_exp(@exp + exp, show)
end
end
#--------------------------------------------------------------------------
# * Change Level
# level : new level
# show : Level up display flag
#--------------------------------------------------------------------------
def change_level(level, show)
level = [[level, 99].min, 1].max
change_exp(@exp_list[level], show)
end
#--------------------------------------------------------------------------
# * Learn Skill
# skill_id : skill ID
#--------------------------------------------------------------------------
def learn_skill(skill_id)
unless skill_learn?($data_skills[skill_id])
@skills.push(skill_id)
@skills.sort!
end
end
#--------------------------------------------------------------------------
# * Forget Skill
# skill_id : skill ID
#--------------------------------------------------------------------------
def forget_skill(skill_id)
@skills.delete(skill_id)
end
#--------------------------------------------------------------------------
# * Determine if Finished Learning Skill
# skill : skill
#--------------------------------------------------------------------------
def skill_learn?(skill)
return @skills.include?(skill.id)
end
#--------------------------------------------------------------------------
# * Determine Usable Skills
# skill : skill
#--------------------------------------------------------------------------
def skill_can_use?(skill)
return false unless skill_learn?(skill)
return super
end
#--------------------------------------------------------------------------
# * Change Name
# name : new name
#--------------------------------------------------------------------------
def name=(name)
@name = name
end
#--------------------------------------------------------------------------
# * Change Class ID
# class_id : New class ID
#--------------------------------------------------------------------------
def class_id=(class_id)
@class_id = class_id
for i in 0..4 # Remove unequippable items
change_equip(i, nil) unless equippable?(equips[i])
end
end
#--------------------------------------------------------------------------
# * Change Graphics
# character_name : new character graphic filename
# character_index : new character graphic index
# face_name : new face graphic filename
# face_index : new face graphic index
#--------------------------------------------------------------------------
def set_graphic(character_name, character_index, face_name, face_index)
@character_name = character_name
@character_index = character_index
@face_name = face_name
@face_index = face_index
end
#--------------------------------------------------------------------------
# * Use Sprites?
#--------------------------------------------------------------------------
def use_sprite?
return false
end
#--------------------------------------------------------------------------
# * Perform Collapse
#--------------------------------------------------------------------------
def perform_collapse
if $game_temp.in_battle and dead?
@collapse = true
Sound.play_actor_collapse
end
end
#--------------------------------------------------------------------------
# * Perform Automatic Recovery (called at end of turn)
#--------------------------------------------------------------------------
def do_auto_recovery
if auto_hp_recover and not dead?
self.hp += maxhp / 20
end
end
#--------------------------------------------------------------------------
# * Create Battle Action (for automatic battle)
#--------------------------------------------------------------------------
def make_action
@action.clear
return unless movable?
action_list = []
action = Game_BattleAction.new(self)
action.set_attack
action.evaluate
action_list.push(action)
for skill in skills
action = Game_BattleAction.new(self)
action.set_skill(skill.id)
action.evaluate
action_list.push(action)
end
max_value = 0
for action in action_list
if action.value > max_value
@action = action
max_value = action.value
end
end
end
end
Everything works fine whith a new game while leveling up. But, let's say I save and close the game. When I continue and am about to level up again I get the error above. Any suggestions?