#============================================================================== # ■ RGSS3 スキル・アイテムウィンドウリスト作成時特徴キャッシュ化 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # スキル・アイテムウィンドウリスト作成時に # 特徴データを全てキャッシュ化することで関連処理を少し高速化させます。 # 同時にスキル毎のMP消費量やTP消費量などもキャッシュ化します。 # 大量の装備箇所があったり、大量のステートが付与される可能性があったり # パッシブスキルが多数登場するゲームでは効果的かもしれません。 # 特徴が影響する全てのスクリプトよりも下に配置してください。 #============================================================================== module QuickListByActorFeatureObjectsFix #スキルウィンドウのリスト作成時に特徴キャッシュ化 #trueで有効 falseで無効 Skill = true #アイテムウィンドウのリスト作成時に特徴キャッシュ化 #(通常はアクターが設定されないので意味なし) #trueで有効 falseで無効 Item = false end if QuickListByActorFeatureObjectsFix::Skill class Window_SkillList < Window_Selectable #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- alias refresh_feature_objects_cache_is_list refresh def refresh if @actor @actor.quick_list_by_actor_feature_objects_fix_on @quick_list_by_actor_feature_objects_fix_item_ids = {} end refresh_feature_objects_cache_is_list if @actor @actor.quick_list_by_actor_feature_objects_fix_off @quick_list_by_actor_feature_objects_fix_item_ids = nil end end #-------------------------------------------------------------------------- # スキルを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias enable_feature_objects_cache_is_list? enable? def enable?(item) if @quick_list_by_actor_feature_objects_fix_item_ids && item && item.is_a?(RPG::Skill) @quick_list_by_actor_feature_objects_fix_item_ids[item.id] ||= enable_feature_objects_cache_is_list?(item) else enable_feature_objects_cache_is_list?(item) end end end end if QuickListByActorFeatureObjectsFix::Item class Window_ItemList < Window_Selectable #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- alias refresh_feature_objects_cache_is_list refresh def refresh if @actor @actor.quick_list_by_actor_feature_objects_fix_on @quick_list_by_actor_feature_objects_fix_item_ids = {} end refresh_feature_objects_cache_is_list if @actor @actor.quick_list_by_actor_feature_objects_fix_off @quick_list_by_actor_feature_objects_fix_item_ids = nil end end #-------------------------------------------------------------------------- # スキルを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias enable_feature_objects_cache_is_list? enable? def enable?(item) if @quick_list_by_actor_feature_objects_fix_item_ids && item && item.is_a?(RPG::Item) @quick_list_by_actor_feature_objects_fix_item_ids[item.id] ||= enable_feature_objects_cache_is_list?(item) else enable_feature_objects_cache_is_list?(item) end end end end class Game_BattlerBase #-------------------------------------------------------------------------- # スキルの消費 MP 計算 #-------------------------------------------------------------------------- alias skill_mp_cost_feature_objects_cache_is_list skill_mp_cost def skill_mp_cost(skill) if @quick_list_feature_objects_cache_hash key = :mp_cost @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][skill.id] ||= skill_mp_cost_feature_objects_cache_is_list(skill) end skill_mp_cost_feature_objects_cache_is_list(skill) end #-------------------------------------------------------------------------- # スキルの消費 TP 計算 #-------------------------------------------------------------------------- alias skill_tp_cost_feature_objects_cache_is_list skill_tp_cost def skill_tp_cost(skill) if @quick_list_feature_objects_cache_hash key = :tp_cost @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][skill.id] ||= skill_tp_cost_feature_objects_cache_is_list(skill) end skill_tp_cost_feature_objects_cache_is_list(skill) end #-------------------------------------------------------------------------- # 通常能力値の取得 #-------------------------------------------------------------------------- alias param_feature_objects_cache_is_list param def param(param_id) if @quick_list_feature_objects_cache_hash key = :param @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][param_id] ||= param_feature_objects_cache_is_list(param_id) end param_feature_objects_cache_is_list(param_id) end #-------------------------------------------------------------------------- # 追加能力値の取得 #-------------------------------------------------------------------------- alias xparam_feature_objects_cache_is_list xparam def xparam(xparam_id) if @quick_list_feature_objects_cache_hash key = :xparam @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][xparam_id] ||= xparam_feature_objects_cache_is_list(xparam_id) end xparam_feature_objects_cache_is_list(xparam_id) end #-------------------------------------------------------------------------- # 特殊能力値の取得 #-------------------------------------------------------------------------- alias sparam_feature_objects_cache_is_list sparam def sparam(sparam_id) if @quick_list_feature_objects_cache_hash key = :sparam @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][sparam_id] ||= sparam_feature_objects_cache_is_list(sparam_id) end sparam_feature_objects_cache_is_list(sparam_id) end #-------------------------------------------------------------------------- # 属性有効度の取得 #-------------------------------------------------------------------------- alias element_rate_feature_objects_cache_is_list element_rate def element_rate(element_id) if @quick_list_feature_objects_cache_hash key = :element_rate @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][element_id] ||= element_rate_feature_objects_cache_is_list(element_id) end element_rate_feature_objects_cache_is_list(element_id) end #-------------------------------------------------------------------------- # 弱体有効度の取得 #-------------------------------------------------------------------------- alias debuff_rate_feature_objects_cache_is_list debuff_rate def debuff_rate(param_id) if @quick_list_feature_objects_cache_hash key = :debuff_rate @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][param_id] ||= debuff_rate_feature_objects_cache_is_list(param_id) end debuff_rate_feature_objects_cache_is_list(param_id) end #-------------------------------------------------------------------------- # ステート有効度の取得 #-------------------------------------------------------------------------- alias state_rate_feature_objects_cache_is_list state_rate def state_rate(state_id) if @quick_list_feature_objects_cache_hash key = :state_rate @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][state_id] ||= state_rate_feature_objects_cache_is_list(state_id) end state_rate_feature_objects_cache_is_list(state_id) end #-------------------------------------------------------------------------- # 無効化するステートの配列を取得 #-------------------------------------------------------------------------- alias state_resist_set_feature_objects_cache_is_list state_resist_set def state_resist_set if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:state_resist_set] ||= state_resist_set_feature_objects_cache_is_list end state_resist_set_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 無効化されているステートの判定#true/false #-------------------------------------------------------------------------- alias state_resist_feature_objects_cache_is_list? state_resist? def state_resist?(state_id) if @quick_list_feature_objects_cache_hash key = :state_resist @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][state_id] ||= state_resist_feature_objects_cache_is_list?(state_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][state_id] == 1 ? true : false end state_resist_feature_objects_cache_is_list?(state_id) end #-------------------------------------------------------------------------- # 攻撃時属性の取得 #-------------------------------------------------------------------------- alias atk_elements_feature_objects_cache_is_list atk_elements def atk_elements if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:atk_elements] ||= atk_elements_feature_objects_cache_is_list end atk_elements_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 攻撃時ステートの取得 #-------------------------------------------------------------------------- alias atk_states_feature_objects_cache_is_list atk_states def atk_states if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:atk_states] ||= atk_states_feature_objects_cache_is_list end atk_states_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 攻撃時ステートの発動率取得 #-------------------------------------------------------------------------- alias atk_states_rate_feature_objects_cache_is_list atk_states_rate def atk_states_rate(state_id) if @quick_list_feature_objects_cache_hash key = :atk_states_rate @quick_list_feature_objects_cache_hash[key] ||= {} return @quick_list_feature_objects_cache_hash[key][state_id] ||= atk_states_rate_feature_objects_cache_is_list(state_id) end atk_states_rate_feature_objects_cache_is_list(state_id) end #-------------------------------------------------------------------------- # 攻撃速度補正の取得 #-------------------------------------------------------------------------- alias atk_speed_feature_objects_cache_is_list atk_speed def atk_speed if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:atk_speed] ||= atk_speed_feature_objects_cache_is_list end atk_speed_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 攻撃追加回数の取得 #-------------------------------------------------------------------------- alias atk_times_add_feature_objects_cache_is_list atk_times_add def atk_times_add if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:atk_times_add] ||= atk_times_add_feature_objects_cache_is_list end atk_times_add_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 追加スキルタイプの取得 #-------------------------------------------------------------------------- alias added_skill_types_feature_objects_cache_is_list added_skill_types def added_skill_types if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:added_skill_types] ||= added_skill_types_feature_objects_cache_is_list end added_skill_types_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # スキルタイプ封印の判定#true/false #-------------------------------------------------------------------------- alias skill_type_sealed_feature_objects_cache_is_list? skill_type_sealed? def skill_type_sealed?(stype_id) if @quick_list_feature_objects_cache_hash key = :skill_type_sealed @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][stype_id] ||= skill_type_sealed_feature_objects_cache_is_list?(stype_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][stype_id] == 1 ? true : false end skill_type_sealed_feature_objects_cache_is_list?(stype_id) end #-------------------------------------------------------------------------- # 追加スキルの取得 #-------------------------------------------------------------------------- alias added_skills_feature_objects_cache_is_list added_skills def added_skills if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:added_skills] ||= added_skills_feature_objects_cache_is_list end added_skills_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # スキル封印の判定#true/false #-------------------------------------------------------------------------- alias skill_sealed_feature_objects_cache_is_list? skill_sealed? def skill_sealed?(skill_id) if @quick_list_feature_objects_cache_hash key = :skill_sealed @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][skill_id] ||= skill_sealed_feature_objects_cache_is_list?(skill_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][skill_id] == 1 ? true : false end skill_sealed_feature_objects_cache_is_list?(skill_id) end #-------------------------------------------------------------------------- # 武器装備可能の判定#true/false #-------------------------------------------------------------------------- alias equip_wtype_ok_feature_objects_cache_is_list? equip_wtype_ok? def equip_wtype_ok?(wtype_id) if @quick_list_feature_objects_cache_hash key = :equip_wtype_ok @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][wtype_id] ||= equip_wtype_ok_feature_objects_cache_is_list?(wtype_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][wtype_id] == 1 ? true : false end equip_wtype_ok_feature_objects_cache_is_list?(wtype_id) end #-------------------------------------------------------------------------- # 防具装備可能の判定#true/false #-------------------------------------------------------------------------- alias equip_atype_ok_feature_objects_cache_is_list? equip_atype_ok? def equip_atype_ok?(atype_id) if @quick_list_feature_objects_cache_hash key = :equip_atype_ok @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][atype_id] ||= equip_atype_ok_feature_objects_cache_is_list?(atype_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][atype_id] == 1 ? true : false end equip_atype_ok_feature_objects_cache_is_list?(atype_id) end #-------------------------------------------------------------------------- # 装備固定の判定#true/false #-------------------------------------------------------------------------- alias equip_type_fixed_feature_objects_cache_is_list? equip_type_fixed? def equip_type_fixed?(etype_id) if @quick_list_feature_objects_cache_hash key = :equip_type_fixed @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][etype_id] ||= equip_type_fixed_feature_objects_cache_is_list?(etype_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][etype_id] == 1 ? true : false end equip_type_fixed_feature_objects_cache_is_list?(etype_id) end #-------------------------------------------------------------------------- # 装備封印の判定#true/false #-------------------------------------------------------------------------- alias equip_type_sealed_feature_objects_cache_is_list? equip_type_sealed? def equip_type_sealed?(etype_id) if @quick_list_feature_objects_cache_hash key = :equip_type_sealed @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][etype_id] ||= equip_type_sealed_feature_objects_cache_is_list?(etype_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][etype_id] == 1 ? true : false end equip_type_sealed_feature_objects_cache_is_list?(etype_id) end #-------------------------------------------------------------------------- # スロットタイプの取得 #-------------------------------------------------------------------------- alias slot_type_feature_objects_cache_is_list slot_type def slot_type if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:slot_type] ||= slot_type_feature_objects_cache_is_list end slot_type_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 二刀流の判定#true/false #-------------------------------------------------------------------------- alias dual_wield_feature_objects_cache_is_list? dual_wield? def dual_wield? if @quick_list_feature_objects_cache_hash key = :dual_wield @quick_list_feature_objects_cache_hash[key] ||= dual_wield_feature_objects_cache_is_list? ? 1 : 0 return @quick_list_feature_objects_cache_hash[key] == 1 ? true : false end dual_wield_feature_objects_cache_is_list? end #-------------------------------------------------------------------------- # 行動回数追加確率の配列を取得 #-------------------------------------------------------------------------- alias action_plus_set_feature_objects_cache_is_list action_plus_set def action_plus_set if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:action_plus_set] ||= action_plus_set_feature_objects_cache_is_list end action_plus_set_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # 特殊フラグ判定#true/false #-------------------------------------------------------------------------- alias special_flag_feature_objects_cache_is_list special_flag def special_flag(flag_id) if @quick_list_feature_objects_cache_hash key = :special_flag @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][flag_id] ||= special_flag_feature_objects_cache_is_list(flag_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][flag_id] == 1 ? true : false end special_flag_feature_objects_cache_is_list(flag_id) end #-------------------------------------------------------------------------- # 消滅エフェクトの取得 #-------------------------------------------------------------------------- alias collapse_type_feature_objects_cache_is_list collapse_type def collapse_type if @quick_list_feature_objects_cache_hash return @quick_list_feature_objects_cache_hash[:collapse_type] ||= collapse_type_feature_objects_cache_is_list end collapse_type_feature_objects_cache_is_list end #-------------------------------------------------------------------------- # パーティ能力判定#true/false #-------------------------------------------------------------------------- alias party_ability_feature_objects_cache_is_list party_ability def party_ability(ability_id) if @quick_list_feature_objects_cache_hash key = :party_ability @quick_list_feature_objects_cache_hash[key] ||= {} @quick_list_feature_objects_cache_hash[key][ability_id] ||= party_ability_feature_objects_cache_is_list(ability_id) ? 1 : 0 return @quick_list_feature_objects_cache_hash[key][ability_id] == 1 ? true : false end party_ability_feature_objects_cache_is_list(ability_id) end #-------------------------------------------------------------------------- # 自動戦闘の判定#true/false #-------------------------------------------------------------------------- alias auto_battle_feature_objects_cache_is_list? auto_battle? def auto_battle? if @quick_list_feature_objects_cache_hash key = :auto_battle @quick_list_feature_objects_cache_hash[key] ||= auto_battle_feature_objects_cache_is_list? ? 1 : 0 return @quick_list_feature_objects_cache_hash[key] == 1 ? true : false end auto_battle_feature_objects_cache_is_list? end #-------------------------------------------------------------------------- # 防御の判定#true/false #-------------------------------------------------------------------------- alias guard_feature_objects_cache_is_list? guard? def guard? if @quick_list_feature_objects_cache_hash key = :guard @quick_list_feature_objects_cache_hash[key] ||= guard_feature_objects_cache_is_list? ? 1 : 0 return @quick_list_feature_objects_cache_hash[key] == 1 ? true : false end guard_feature_objects_cache_is_list? end #-------------------------------------------------------------------------- # 身代わりの判定#true/false #-------------------------------------------------------------------------- alias substitute_feature_objects_cache_is_list? substitute? def substitute? if @quick_list_feature_objects_cache_hash key = :substitute @quick_list_feature_objects_cache_hash[key] ||= substitute_feature_objects_cache_is_list? ? 1 : 0 return @quick_list_feature_objects_cache_hash[key] == 1 ? true : false end substitute_feature_objects_cache_is_list? end #-------------------------------------------------------------------------- # TP持ち越しの判定#true/false #-------------------------------------------------------------------------- alias preserve_tp_feature_objects_cache_is_list? preserve_tp? def preserve_tp? if @quick_list_feature_objects_cache_hash key = :preserve_tp @quick_list_feature_objects_cache_hash[key] ||= preserve_tp_feature_objects_cache_is_list? ? 1 : 0 return @quick_list_feature_objects_cache_hash[key] == 1 ? true : false end preserve_tp_feature_objects_cache_is_list? end #-------------------------------------------------------------------------- # 特徴配列キャッシュON #-------------------------------------------------------------------------- def quick_list_by_actor_feature_objects_fix_on @quick_list_feature_objects_cache = feature_objects @quick_list_feature_objects_cache_hash = {} end #-------------------------------------------------------------------------- # 特徴配列キャッシュOFF #-------------------------------------------------------------------------- def quick_list_by_actor_feature_objects_fix_off @quick_list_feature_objects_cache = nil @quick_list_feature_objects_cache_hash = nil end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 特徴配列 #-------------------------------------------------------------------------- alias feature_objects_feature_objects_cache_is_list_on feature_objects def feature_objects @quick_list_feature_objects_cache ? @quick_list_feature_objects_cache : feature_objects_feature_objects_cache_is_list_on end end