1.42 MB, 下载次数: 77
副手扩展脚本
1.42 MB, 下载次数: 58
=begin =============================================================================== 副手拓展脚本 by dukesward 使用方法:在武器状态哈希添加武器类型。 SINGLE: 单手武器 DOUBLE: 双手武器 BOW: 弓 WAND: 魔法杖 GUN: 铳(火枪) 然后在防具状态哈希对应的数组中添加防具类型。 例如: WEAPON_STATE中"SINGLE" => [1], 表示类型1的武器为单手武器。 ARMOR_STATE中"SINGLE" => [1], 表示类型1的防具必须在使用单手武器的同时装备。 =============================================================================== =end #-------------------------------------------------------------------------- # ● 武器状态哈希定义 #-------------------------------------------------------------------------- WEAPON_STATE = { "SINGLE" => [1, 2, 4, 5, 7, 8], "DOUBLE" => [3, 11], "BOW" => [6], "WAND" => [9], "GUN" => [10], } #-------------------------------------------------------------------------- # ● 防具状态哈希定义 #-------------------------------------------------------------------------- ARMOR_STATE = { "SINGLE" => [5, 6], "DOUBLE" => [], "BOW" => [8], "WAND" => [7], "GUN" => [9], } class RPG::Weapon < RPG::EquipItem #-------------------------------------------------------------------------- # ● 武器为单手武器? #-------------------------------------------------------------------------- def for_single return WEAPON_STATE["SINGLE"].include?(wtype_id) end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 武器装备状态 #-------------------------------------------------------------------------- def equip_state WEAPON_STATE.keys.each do |key| return key if WEAPON_STATE[key].include?(weapons[0].wtype_id) end return "SINGLE" end #-------------------------------------------------------------------------- # ● 判定是否可以更换装备 # slot_id : 装备栏 ID #-------------------------------------------------------------------------- def equip_change_ok?(slot_id) return false if equip_type_fixed?(equip_slots[slot_id]) return slot_id == 1 ? side_change_ok? : !equip_type_sealed?(equip_slots[slot_id]) return true end #-------------------------------------------------------------------------- # ● 判定是否可以使用副手装备 # slot_id : 装备栏 ID #-------------------------------------------------------------------------- def side_change_ok? return self.weapons.empty? ? true : !WEAPON_STATE["DOUBLE"].include?(self.weapons[0].wtype_id) end #-------------------------------------------------------------------------- # ● 卸下无法装备的物品 # item_gain : 卸下的装备是否保留 #-------------------------------------------------------------------------- def release_unequippable_items(item_gain = true) @equips.each_with_index do |item, i| if !equip_allowed?(item.object, i) || item.object.etype_id != equip_slots[i] trade_item_with_party(nil, item.object) if item_gain item.object = nil end end end #-------------------------------------------------------------------------- # ● 判定是否允许装备 #-------------------------------------------------------------------------- def equip_allowed?(item, slot_id) return slot_id == 1 ? off_hand_equippable?(item) : equippable?(item) end #-------------------------------------------------------------------------- # ● 判断副手装备类型 #-------------------------------------------------------------------------- def off_hand_equippable?(item) return false unless item.is_a?(RPG::EquipItem) if item.is_a?(RPG::Weapon) return false if weapons && !weapons[0].for_single return item.for_single ? true : false end if item.is_a?(RPG::Armor) && !weapons.empty? return false if !ARMOR_STATE[equip_state].include?(item.atype_id) end return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor) return false end end class Window_EquipItem < Window_ItemList #-------------------------------------------------------------------------- # ● 查询使用列表中是否含有此物品 #-------------------------------------------------------------------------- def include?(item) return true if item == nil return false unless item.is_a?(RPG::EquipItem) return false if @slot_id < 0 return false if item.etype_id != @actor.equip_slots[@slot_id] return @slot_id == 1 ? @actor.off_hand_equippable?(item) : @actor.equippable?(item) end end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |