★RGSS教学3★ 标题:《修改3:使角色装备「空手」》 简介:是第1次稍微提及的内容。由于制作一个「空手」的假想装备,使得属性和状态等也可以实现。 翻译:柳柳 设想的时刻,想「看起来相当麻烦」,认为用讲座如果做需要很久以后。不过实际试着做了,也没有那么困难,故作为第3次的题材。
首先需要做前期准备,预先准备空手用的装备。虽说是假想的装备品,实际装备应该实际制作。这里用「空手」的名字把武器预先做成。其他职业内容不需要制作,可以强制装备。
准备齐备,在设定actor的武器ID的地方进行修改,给装备上「空手」武器。
Game_Actor 级的地方找@weapon_id (脚本编辑器输入ctrl+shift+f搜索)。
Game_Actor::setup #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- def setup(actor_id) actor = $data_actors[actor_id] @actor_id = actor_id @name = actor.name @character_name = actor.character_name @character_hue = actor.character_hue @battler_name = actor.battler_name @battler_hue = actor.battler_hue @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 = [] @hp = maxhp @sp = maxsp @states = [] @states_turn = {} @maxhp_plus = 0 @maxsp_plus = 0 @str_plus = 0 @dex_plus = 0 @agi_plus = 0 @int_plus = 0 # スキル習得 for i in 1..@level for j in $data_classes[@class_id].learnings if j.level == i learn_skill(j.skill_id) end end end # オートステートを更新 update_auto_state(nil, $data_armors[@armor1_id]) update_auto_state(nil, $data_armors[@armor2_id]) update_auto_state(nil, $data_armors[@armor3_id]) update_auto_state(nil, $data_armors[@armor4_id]) end | Game_Actor::equip #-------------------------------------------------------------------------- # ● 装備の変更 # equip_type : 装備タイプ # id : 武器 or 防具 ID (0 なら装備解除) #-------------------------------------------------------------------------- def equip(equip_type, id) case equip_type when 0 # 武器 if id == 0 or $game_party.weapon_number(id) > 0 $game_party.gain_weapon(@weapon_id, 1) @weapon_id = id $game_party.lose_weapon(id, 1) end when 1 # 盾 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor1_id], $data_armors[id]) $game_party.gain_armor(@armor1_id, 1) @armor1_id = id $game_party.lose_armor(id, 1) end when 2 # 頭 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor2_id], $data_armors[id]) $game_party.gain_armor(@armor2_id, 1) @armor2_id = id $game_party.lose_armor(id, 1) end when 3 # 身体 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor3_id], $data_armors[id]) $game_party.gain_armor(@armor3_id, 1) @armor3_id = id $game_party.lose_armor(id, 1) end when 4 # 装飾品 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor4_id], $data_armors[id]) $game_party.gain_armor(@armor4_id, 1) @armor4_id = id $game_party.lose_armor(id, 1) end end end | 以上两段是默认脚本。不需要强行记忆,需要的时候查找就行了。只需要看带颜色文字的部分。
第一段是actor角色的初始化处理(加入角色的事件,初始化),后边的一段是装备变更时的处理。下面试着变更这些。
Game_Actor::setup 改変 #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- def setup(actor_id) actor = $data_actors[actor_id] @actor_id = actor_id @name = actor.name @character_name = actor.character_name @character_hue = actor.character_hue @battler_name = actor.battler_name @battler_hue = actor.battler_hue @class_id = actor.class_id if((@weapon_id = actor.weapon_id) == 0) @weapon_id = 33 end @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 = [] @hp = maxhp @sp = maxsp @states = [] @states_turn = {} @maxhp_plus = 0 @maxsp_plus = 0 @str_plus = 0 @dex_plus = 0 @agi_plus = 0 @int_plus = 0 # スキル習得 for i in 1..@level for j in $data_classes[@class_id].learnings if j.level == i learn_skill(j.skill_id) end end end # オートステートを更新 update_auto_state(nil, $data_armors[@armor1_id]) update_auto_state(nil, $data_armors[@armor2_id]) update_auto_state(nil, $data_armors[@armor3_id]) update_auto_state(nil, $data_armors[@armor4_id]) end | 这里使用了一个条件分歧,当角色初始化的时候带入角色的初始武器;如果初始武器为0,则带入33号武器(也就是我们实现在数据库准备的武器【空手】)
Game_Actor::equip 改変 #-------------------------------------------------------------------------- # ● 装備の変更 # equip_type : 装備タイプ # id : 武器 or 防具 ID (0 なら装備解除) #-------------------------------------------------------------------------- def equip(equip_type, id) case equip_type when 0 # 武器 if id == 0 or id == 33 or $game_party.weapon_number(id) > 0 if(id == 0) id = 33 end $game_party.gain_weapon(@weapon_id, 1) @weapon_id = id $game_party.lose_weapon(id, 1) $game_party.lose_weapon(33, 1) end when 1 # 盾 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor1_id], $data_armors[id]) $game_party.gain_armor(@armor1_id, 1) @armor1_id = id $game_party.lose_armor(id, 1) end when 2 # 頭 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor2_id], $data_armors[id]) $game_party.gain_armor(@armor2_id, 1) @armor2_id = id $game_party.lose_armor(id, 1) end when 3 # 身体 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor3_id], $data_armors[id]) $game_party.gain_armor(@armor3_id, 1) @armor3_id = id $game_party.lose_armor(id, 1) end when 4 # 装飾品 if id == 0 or $game_party.armor_number(id) > 0 update_auto_state($data_armors[@armor4_id], $data_armors[id]) $game_party.gain_armor(@armor4_id, 1) @armor4_id = id $game_party.lose_armor(id, 1) end end end | 这里有两点变更。1是前面的条件分歧,与初始化部分的类似——当武器没有的时候放上33号【空手】;后面的lose_weapon那行则是为了保证当卸下“【空手】”的时候不会在物品中出现这个隐藏的【空手】武器。
总之修改要点就是把所有weapon_id==0的分歧都添上武器33,并把weapon_id==0和weapon_id==33作为一个新的“没有装备任何物品”条件。如果自己还制作其他脚本在这里注意一下即可。 |