设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1256|回复: 2
打印 上一主题 下一主题

[已经解决] 装备扩张和几个脚本导致读档非常慢..

[复制链接]

Lv2.观梦者

梦石
0
星屑
519
在线时间
664 小时
注册时间
2010-6-30
帖子
223
跳转到指定楼层
1
发表于 2013-12-10 14:10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1星屑
本帖最后由 Front 于 2013-12-10 14:09 编辑

自己范例里有几个脚本都有类似的一段脚本。
RUBY 代码复制
  1. class Scene_File < Scene_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● セーブデータの読み込み
  4.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  5.   #--------------------------------------------------------------------------
  6.   alias read_save_data_KGC_EquipExtension read_save_data
  7.   def read_save_data(file)
  8.     read_save_data_KGC_EquipExtension(file)
  9.  
  10.     KGC::Commands.restore_equip
  11.     Graphics.frame_reset
  12.   end
  13. end


几个脚本加起来以后,把主角设置的越多~读档速度就于慢.最多设置60个主角超过60个读档时间20分钟都没法进入游戏。
这算冲突吗,我把这段脚本拿掉后读档1秒直接进去了...把这些类似的脚本拿掉后会不会对脚本有影响..
范例.7z (269.65 KB, 下载次数: 48) 这是工程文件..只是单用3个脚本而已,读档速度就明显能感觉出来了...加到正在制作的游戏工程里读档速度就变的更慢了..


装备扩张
RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 装備拡張 - KGC_EquipExtension ◆ VX ◆
  3. #_/    ◇ Last update : 2009/08/18 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  装備関連の機能を拡張します。
  6. #_/============================================================================
  7. #_/ 【メニュー】≪拡張装備画面≫ より下に導入してください。
  8. #_/ 【スキル】≪パッシブスキル≫ より上に導入してください。
  9. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  10.  
  11. #==============================================================================
  12. # ★ カスタマイズ項目 - Customize ★
  13. #==============================================================================
  14.  
  15. module KGC
  16. module EquipExtension
  17.   # ◆ 拡張装備種別
  18.   #  先頭から順に 4, 5, 6, ... が割り当てられる。
  19.   EXTRA_EQUIP_KIND = ["头部","饰品","指环","宿体","腿部"]
  20.                       #4     #5     #6     #7     #8
  21.  
  22.   # ◆ 装备的顺序
  23.   #  以这里设置的顺序接续在武器的下面
  24.   #  ※ 装备个数最低为1,否则二刀流会出错
  25.   #   ** 装备种类一览 **
  26.   #  0..盾  1..頭部  2..身体  3..装飾品  4~..↑所定義的种类
  27.   EQUIP_TYPE = [0, 1, 2, 3, 4, 5, 6, 7, 8]
  28.  
  29.   # ◆ EP (装备点数) 制是否要使用
  30.   USE_EP_SYSTEM = true #false
  31.   # ◆ EP 的名称
  32.   VOCAB_EP   = "EP"
  33.   # ◆ EP 的名称 (略)
  34.   VOCAB_EP_A = ""
  35.   # ◆ 是否在状态介面显示EP值
  36.   SHOW_STATUS_EP = true#false
  37.  
  38.   # ◆ 装备预设 EP 消耗点数
  39.   #  没有设定EP消耗点数的装备自动加上的点数
  40.   DEFAULT_EP_COST   = 5
  41.   # ◆ 当消耗 EP 值为 0 时隐藏
  42.   HIDE_ZERO_EP_COST = true
  43.  
  44.   # ◆ EP 上限
  45.   EP_MAX = 60
  46.   # ◆ EP 下限
  47.   EP_MIN = 15
  48.   # ◆ 最大 EP 公式
  49.   #   level..角色等级
  50.   #  计算後小数自动取整
  51.   EP_CALC_EXP = "level * 1.25 + 2"
  52.   # ◆ アクター毎の最大 EP 算出式
  53.   PERSONAL_EP_CALC_EXP = []
  54.   #  ここから下に、アクターごとの最大 EP を
  55.   #   PERSONAL_EP_CALC_EXP[アクター ID] = "計算式"
  56.   #  という書式で指定。
  57.   #  計算式は EP_CALC_EXP と同様の書式。
  58.   #  指定しなかったアクターは EP_CALC_EXP を使用。
  59.   #   <例> ラルフだけ優遇
  60.   # PERSONAL_EP_CALC_EXP[1] = "level * 0.5 + 5"
  61.  
  62.   # ◆ 消耗 EP 値的文字颜色 (接续在装备名称後面的文字)
  63.   #  数字  : 与 \C[n] 同样的颜色 (也就是在窗口外观设置的颜色色号)
  64.   #  Color : 指定颜色。 ( Color.new(128, 255, 255))
  65.   EP_COST_COLOR        = 23
  66.   # ◆ EP 槽開始色
  67.   EP_GAUGE_START_COLOR = 28
  68.   # ◆ EP 槽结束色
  69.   EP_GAUGE_END_COLOR   = 29
  70.  
  71.   # ◆ EP ゲージに汎用ゲージを使用する
  72.   #  ≪汎用ゲージ描画≫ 導入時のみ有効。
  73.   ENABLE_GENERIC_GAUGE = true
  74.   # ◆ EP ゲージ設定
  75.   #  画像は "Graphics/System" から読み込む。
  76.   GAUGE_IMAGE  = "GaugeEP"  # 画像
  77.   GAUGE_OFFSET = [-23, -2]  # 位置補正 [x, y]
  78.   GAUGE_LENGTH = -4         # 長さ補正
  79.   GAUGE_SLOPE  = 30         # 傾き (-89 ~ 89)
  80. end
  81. end
  82.  
  83. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  84.  
  85. $imported = {} if $imported == nil
  86. $imported["EquipExtension"] = true
  87.  
  88. module KGC::EquipExtension
  89.   # EP 制を使用しない場合の設定
  90.   unless USE_EP_SYSTEM
  91.     SHOW_STATUS_EP = false
  92.     HIDE_ZERO_EP_COST = true
  93.   end
  94.  
  95.   # 正規表現
  96.   module Regexp
  97.     # ベースアイテム
  98.     module BaseItem
  99.       # 消費 EP
  100.       EP_COST = /<EP\s*(\d+)>/i
  101.       # 装備タイプ
  102.       EQUIP_TYPE = /<(?:EQUIP_TYPE|装備タイプ)\s*(\d+(?:\s*,\s*\d+)*)>/
  103.     end
  104.  
  105.     # 防具
  106.     module Armor
  107.       # 装備種別
  108.       EQUIP_KIND = /<(?:EQUIP_KIND|装备类型)\s*(.+)>/i
  109.     end
  110.   end
  111. end
  112.  
  113. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  114.  
  115. #==============================================================================
  116. # □ KGC::Commands
  117. #==============================================================================
  118.  
  119. module KGC
  120. module Commands
  121.   module_function
  122.   #--------------------------------------------------------------------------
  123.   # ○ アクターの装備を修復
  124.   #--------------------------------------------------------------------------
  125.   def restore_equip
  126.     (1...$data_actors.size).each { |i|
  127.       actor = $game_actors[i]
  128.       actor.restore_equip
  129.     }
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ○ アクターの装備タイプを設定
  133.   #     actor_id   : アクター ID
  134.   #     equip_type : 装備タイプ
  135.   #--------------------------------------------------------------------------
  136.   def set_actor_equip_type(actor_id, equip_type = nil)
  137.     actor = $game_actors[actor_id]
  138.     return if actor == nil
  139.     actor.equip_type = equip_type
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ○ アクターの MaxEP 補正値の取得
  143.   #     actor_id    : アクター ID
  144.   #     variable_id : 取得した値を代入する変数の ID
  145.   #--------------------------------------------------------------------------
  146.   def get_actor_own_ep(actor_id, variable_id = 0)
  147.     value = $game_actors[actor_id].maxep_plus
  148.     $game_variables[variable_id] = value if variable_id > 0
  149.     return value
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ○ アクターの MaxEP 補正値の変更
  153.   #     actor_id : アクター ID
  154.   #     value    : MaxEP 補正値
  155.   #--------------------------------------------------------------------------
  156.   def set_actor_own_ep(actor_id, value)
  157.     $game_actors[actor_id].maxep_plus = value
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ○ アクターの MaxEP 補正値の増加
  161.   #     actor_id : アクター ID
  162.   #     value    : 増加量
  163.   #--------------------------------------------------------------------------
  164.   def gain_actor_ep(actor_id, value)
  165.     $game_actors[actor_id].maxep_plus += value
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ○ アクターの装備を変更
  169.   #     actor_id   : アクター ID
  170.   #     index      : 装備部位 (0~)
  171.   #     item_id    : 武器 or 防具 ID (0 で解除)
  172.   #     force_gain : 未所持なら取得 (true or false)
  173.   #--------------------------------------------------------------------------
  174.   def change_actor_equipment(actor_id, index, item_id, force_gain = false)
  175.     actor = $game_actors[actor_id]
  176.     return if actor == nil
  177.  
  178.     item = (index == 0 ? $data_weapons[item_id] : $data_armors[item_id])
  179.     if actor.two_swords_style && index == 1
  180.       item = $data_weapons[item_id]
  181.     end
  182.     if force_gain && $game_party.item_number(item) == 0
  183.       $game_party.gain_item(item, 1)
  184.     end
  185.     actor.change_equip_by_id(index, item_id)
  186.   end
  187. end
  188. end
  189.  
  190. class Game_Interpreter
  191.   include KGC::Commands
  192. end
  193.  
  194. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  195.  
  196. #==============================================================================
  197. # ■ Vocab
  198. #==============================================================================
  199.  
  200. module Vocab
  201.   # EP
  202.   def self.ep
  203.     return KGC::EquipExtension::VOCAB_EP
  204.   end
  205.  
  206.   # EP (略)
  207.   def self.ep_a
  208.     return KGC::EquipExtension::VOCAB_EP_A
  209.   end
  210.  
  211.   # 拡張防具欄
  212.   def self.extra_armor(index)
  213.     return KGC::EquipExtension::EXTRA_EQUIP_KIND[index]
  214.   end
  215. end
  216.  
  217. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  218.  
  219. #==============================================================================
  220. # ■ RPG::BaseItem
  221. #==============================================================================
  222.  
  223. class RPG::BaseItem
  224.   #--------------------------------------------------------------------------
  225.   # ○ 装備拡張のキャッシュを作成
  226.   #--------------------------------------------------------------------------
  227.   def create_equip_extension_cache
  228.     @__ep_cost = KGC::EquipExtension::DEFAULT_EP_COST
  229.     @__equip_type = []
  230.  
  231.     self.note.each_line { |line|
  232.       case line
  233.       when KGC::EquipExtension::Regexp::BaseItem::EP_COST
  234.         # 消費 EP
  235.         @__ep_cost = $1.to_i
  236.       when KGC::EquipExtension::Regexp::BaseItem::EQUIP_TYPE
  237.         # 装備タイプ
  238.         @__equip_type = []
  239.         $1.scan(/\d+/) { |num|
  240.           @__equip_type << num.to_i
  241.         }
  242.       end
  243.     }
  244.  
  245.     # EP 制を使用しない場合は消費 EP = 0
  246.     @__ep_cost = 0 unless KGC::EquipExtension::USE_EP_SYSTEM
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ○ 消費 EP
  250.   #--------------------------------------------------------------------------
  251.   def ep_cost
  252.     create_equip_extension_cache if @__ep_cost == nil
  253.     return @__ep_cost
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ○ 装備タイプ
  257.   #--------------------------------------------------------------------------
  258.   def equip_type
  259.     create_equip_extension_cache if @__equip_type == nil
  260.     return @__equip_type
  261.   end
  262. end
  263.  
  264. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  265.  
  266. #==============================================================================
  267. # ■ RPG::Armor
  268. #==============================================================================
  269.  
  270. class RPG::Armor < RPG::BaseItem
  271.   #--------------------------------------------------------------------------
  272.   # ○ 装備拡張のキャッシュを作成
  273.   #--------------------------------------------------------------------------
  274.   def create_equip_extension_cache
  275.     super
  276.     @__kind = -1
  277.  
  278.     self.note.each_line { |line|
  279.       if line =~ KGC::EquipExtension::Regexp::Armor::EQUIP_KIND
  280.         # 装備種別
  281.         e_index = KGC::EquipExtension::EXTRA_EQUIP_KIND.index($1)
  282.         next if e_index == nil
  283.         @__kind = e_index + 4
  284.       end
  285.     }
  286.   end
  287.  
  288. unless $@
  289.   #--------------------------------------------------------------------------
  290.   # ○ 種別
  291.   #--------------------------------------------------------------------------
  292.   alias kind_KGC_EquipExtension kind
  293.   def kind
  294.     create_equip_extension_cache if @__kind == nil
  295.     return (@__kind == -1 ? kind_KGC_EquipExtension : @__kind)
  296.   end
  297. end
  298.  
  299. end
  300.  
  301. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  302.  
  303. #==============================================================================
  304. # ■ Game_Actor
  305. #==============================================================================
  306.  
  307. class Game_Actor < Game_Battler
  308.   #--------------------------------------------------------------------------
  309.   # ● 公開インスタンス変数
  310.   #--------------------------------------------------------------------------
  311.   attr_writer   :equip_type               # 装備タイプ
  312.   attr_writer   :maxep_plus               # MaxEP 補正値
  313.   #--------------------------------------------------------------------------
  314.   # ● セットアップ
  315.   #     actor_id : アクター ID
  316.   #--------------------------------------------------------------------------
  317.   alias setup_KGC_EquipExtension setup
  318.   def setup(actor_id)
  319.     actor = $data_actors[actor_id]
  320.     @extra_armor_id = []
  321.  
  322.     setup_KGC_EquipExtension(actor_id)
  323.  
  324.     @__last_equip_type = nil
  325.     restore_equip
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ○ MaxEP 取得
  329.   #--------------------------------------------------------------------------
  330.   def maxep
  331.     calc_exp = KGC::EquipExtension::PERSONAL_EP_CALC_EXP[self.id]
  332.     if calc_exp == nil
  333.       calc_exp = KGC::EquipExtension::EP_CALC_EXP
  334.     end
  335.     n = Integer(eval(calc_exp)) + maxep_plus
  336.     return [[n, ep_limit].min, KGC::EquipExtension::EP_MIN].max
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ○ EP 取得
  340.   #--------------------------------------------------------------------------
  341.   def ep
  342.     n = 0
  343.     equips.compact.each { |item| n += item.ep_cost }
  344.     return [maxep - n, 0].max
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ○ EP 上限取得
  348.   #--------------------------------------------------------------------------
  349.   def ep_limit
  350.     return KGC::EquipExtension::EP_MAX
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ○ MaxEP 補正値取得
  354.   #--------------------------------------------------------------------------
  355.   def maxep_plus
  356.     @maxep_plus = 0 if @maxep_plus == nil
  357.     return @maxep_plus
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ 防具欄の取得
  361.   #--------------------------------------------------------------------------
  362.   def equip_type
  363.     if @equip_type.is_a?(Array)
  364.       return @equip_type
  365.     else
  366.       return KGC::EquipExtension::EQUIP_TYPE
  367.     end
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ○ 防具欄の数
  371.   #--------------------------------------------------------------------------
  372.   def armor_number
  373.     return equip_type.size
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ○ 拡張防具欄の数
  377.   #--------------------------------------------------------------------------
  378.   def extra_armor_number
  379.     return [armor_number - 4, 0].max
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ○ 防具 ID リストの取得
  383.   #--------------------------------------------------------------------------
  384.   def extra_armor_id
  385.     @extra_armor_id = [] if @extra_armor_id == nil
  386.     return @extra_armor_id
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 防具オブジェクトの配列取得
  390.   #--------------------------------------------------------------------------
  391.   alias armors_KGC_EquipExtension armors
  392.   def armors
  393.     result = armors_KGC_EquipExtension
  394.  
  395.     # 5番目以降の防具を追加
  396.     extra_armor_number.times { |i|
  397.       armor_id = extra_armor_id[i]
  398.       result << (armor_id == nil ? nil : $data_armors[armor_id])
  399.     }
  400.     return result
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 装備の変更 (オブジェクトで指定)
  404.   #     equip_type : 装備部位
  405.   #     item       : 武器 or 防具 (nil なら装備解除)
  406.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  407.   #--------------------------------------------------------------------------
  408.   alias change_equip_KGC_EquipExtension change_equip
  409.   def change_equip(equip_type, item, test = false)
  410.     n = (item != nil ? $game_party.item_number(item) : 0)
  411.  
  412.     change_equip_KGC_EquipExtension(equip_type, item, test)
  413.  
  414.     # 拡張防具欄がある場合のみ
  415.     if extra_armor_number > 0 && (item == nil || n > 0)
  416.       item_id = item == nil ? 0 : item.id
  417.       case equip_type
  418.       when 5..armor_number  # 拡張防具欄
  419.         @extra_armor_id = [] if @extra_armor_id == nil
  420.         @extra_armor_id[equip_type - 5] = item_id
  421.       end
  422.     end
  423.  
  424.     restore_battle_skill if $imported["SkillCPSystem"]
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ● 装備の破棄
  428.   #     item : 破棄する武器 or 防具
  429.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  430.   #--------------------------------------------------------------------------
  431.   alias discard_equip_KGC_EquipExtension discard_equip
  432.   def discard_equip(item)
  433.     last_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  434.  
  435.     discard_equip_KGC_EquipExtension(item)
  436.  
  437.     curr_armors = [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  438.     return unless item.is_a?(RPG::Armor)  # 防具でない
  439.     return if last_armors != curr_armors  # 既に破棄された
  440.  
  441.     # 拡張防具欄を検索
  442.     extra_armor_number.times { |i|
  443.       if extra_armor_id[i] == item.id
  444.         @extra_armor_id[i] = 0
  445.         break
  446.       end
  447.     }
  448.  
  449.     restore_battle_skill if $imported["SkillCPSystem"]
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● 職業 ID の変更
  453.   #     class_id : 新しい職業 ID
  454.   #--------------------------------------------------------------------------
  455.   alias class_id_equal_KGC_EquipExtension class_id=
  456.   def class_id=(class_id)
  457.     class_id_equal_KGC_EquipExtension(class_id)
  458.  
  459.     return if extra_armor_number == 0  # 拡張防具欄がない
  460.  
  461.     # 装備できない拡張防具を外す
  462.     for i in 5..armor_number
  463.       change_equip(i, nil) unless equippable?(equips[i])
  464.     end
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ○ EP 条件クリア判定
  468.   #     equip_type : 装備部位
  469.   #     item       : 武器 or 防具
  470.   #--------------------------------------------------------------------------
  471.   def ep_condition_clear?(equip_type, item)
  472.     return true if item == nil  # nil は解除なので OK
  473.  
  474.     curr_item = equips[equip_type]
  475.     offset = (curr_item != nil ? curr_item.ep_cost : 0)
  476.     return false if self.ep < (item.ep_cost - offset)   # EP 不足
  477.  
  478.     return true
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ○ 装備を修復
  482.   #--------------------------------------------------------------------------
  483.   def restore_equip
  484.     return if @__last_equip_type == equip_type
  485.  
  486.     # 以前の装備品・パラメータを退避
  487.     last_equips = equips
  488.     last_hp = self.hp
  489.     last_mp = self.mp
  490.     if $imported["SkillCPSystem"]
  491.       last_battle_skill_ids = battle_skill_ids.clone
  492.     end
  493.  
  494.     # 全装備解除
  495.     last_equips.each_index { |i| change_equip(i, nil) }
  496.  
  497.     # 装備品・パラメータを復元
  498.     last_equips.compact.each { |item| equip_legal_slot(item) }
  499.     self.hp = last_hp
  500.     self.mp = last_mp
  501.     if $imported["SkillCPSystem"]
  502.       last_battle_skill_ids.each_with_index { |s, i| set_battle_skill(i, s) }
  503.     end
  504.     @__last_equip_type = equip_type.clone
  505.     Graphics.frame_reset
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ○ 装備品を正しい箇所にセット
  509.   #     item : 武器 or 防具
  510.   #--------------------------------------------------------------------------
  511.   def equip_legal_slot(item)
  512.     if item.is_a?(RPG::Weapon)
  513.       if @weapon_id == 0
  514.         # 武器 1
  515.         change_equip(0, item)
  516.       elsif two_swords_style && @armor1_id == 0
  517.         # 武器 2 (二刀流の場合)
  518.         change_equip(1, item)
  519.       end
  520.     elsif item.is_a?(RPG::Armor)
  521.       if !two_swords_style && item.kind == equip_type[0] && @armor1_id == 0
  522.         # 先頭の防具 (二刀流でない場合)
  523.         change_equip(1, item)
  524.       else
  525.         # 装備箇所リストを作成
  526.         list = [-1, @armor2_id, @armor3_id, @armor4_id]
  527.         list += extra_armor_id
  528.         # 正しい、かつ空いている箇所にセット
  529.         equip_type.each_with_index { |kind, i|
  530.           if kind == item.kind && list[i] == 0
  531.             change_equip(i + 1, item)
  532.             break
  533.           end
  534.         }
  535.       end
  536.     end
  537.   end
  538. end
  539.  
  540. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  541.  
  542. #==============================================================================
  543. # ■ Window_Base
  544. #==============================================================================
  545.  
  546. class Window_Base < Window
  547.   #--------------------------------------------------------------------------
  548.   # ○ EP の文字色を取得
  549.   #     actor : アクター
  550.   #--------------------------------------------------------------------------
  551.   def ep_color(actor)
  552.     return knockout_color if actor.maxep > 0 && actor.ep == 0
  553.     return normal_color
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ○ EP ゲージの色 1 の取得
  557.   #--------------------------------------------------------------------------
  558.   def ep_gauge_color1
  559.     color = KGC::EquipExtension::EP_GAUGE_START_COLOR
  560.     return (color.is_a?(Integer) ? text_color(color) : color)
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ○ EP ゲージの色 2 の取得
  564.   #--------------------------------------------------------------------------
  565.   def ep_gauge_color2
  566.     color = KGC::EquipExtension::EP_GAUGE_END_COLOR
  567.     return (color.is_a?(Integer) ? text_color(color) : color)
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ○ EP の描画
  571.   #     actor : アクター
  572.   #     x     : 描画先 X 座標
  573.   #     y     : 描画先 Y 座標
  574.   #     width : 幅
  575.   #--------------------------------------------------------------------------
  576.   def draw_actor_ep(actor, x, y, width = 120)
  577.     draw_actor_ep_gauge(actor, x, y, width)
  578.     self.contents.font.color = system_color
  579.     self.contents.draw_text(x, y, 30, WLH, Vocab::ep_a)
  580.     self.contents.font.color = ep_color(actor)
  581.     xr = x + width
  582.     if width < 120
  583.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.ep, 2)
  584.     else
  585.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.ep, 2)
  586.       self.contents.font.color = normal_color
  587.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  588.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxep, 2)
  589.     end
  590.     self.contents.font.color = normal_color
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ○ EP ゲージの描画
  594.   #     actor : アクター
  595.   #     x     : 描画先 X 座標
  596.   #     y     : 描画先 Y 座標
  597.   #     width : 幅
  598.   #--------------------------------------------------------------------------
  599.   def draw_actor_ep_gauge(actor, x, y, width = 120)
  600.     if KGC::EquipExtension::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
  601.       # 汎用ゲージ
  602.       draw_gauge(KGC::EquipExtension::GAUGE_IMAGE,
  603.         x, y, width, actor.ep, [actor.maxep, 1].max,
  604.         KGC::EquipExtension::GAUGE_OFFSET,
  605.         KGC::EquipExtension::GAUGE_LENGTH,
  606.         KGC::EquipExtension::GAUGE_SLOPE)
  607.     else
  608.       # デフォルトゲージ
  609.       gw = width * actor.ep / [actor.maxep, 1].max
  610.       gc1 = ep_gauge_color1
  611.       gc2 = ep_gauge_color2
  612.       self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  613.       self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  614.     end
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ○ 消費 EP の描画
  618.   #     item    : 武器 or 防具
  619.   #     rect    : 描画する領域
  620.   #     enabled : 許可状態
  621.   #--------------------------------------------------------------------------
  622.   def draw_equipment_ep_cost(item, rect, enabled = true)
  623.     return if item == nil
  624.     # 消費 EP 0 を表示しない場合
  625.     return if KGC::EquipExtension::HIDE_ZERO_EP_COST && item.ep_cost == 0
  626.  
  627.     color = KGC::EquipExtension::EP_COST_COLOR
  628.     self.contents.font.color = (color.is_a?(Integer) ?
  629.       text_color(color) : color)
  630.     self.contents.font.color.alpha = enabled ? 255 : 128
  631.     self.contents.draw_text(rect, item.ep_cost, 2)
  632.   end
  633. end
  634.  
  635. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  636.  
  637. #==============================================================================
  638. # ■ Window_Equip
  639. #==============================================================================
  640.  
  641. class Window_Equip < Window_Selectable
  642.   #--------------------------------------------------------------------------
  643.   # ● リフレッシュ
  644.   #--------------------------------------------------------------------------
  645.   def refresh
  646.     self.contents.clear
  647.     @data = @actor.equips.clone
  648.     @item_max = [@data.size, @actor.armor_number + 1].min
  649.     create_contents
  650.  
  651.     # 装備箇所を描画
  652.     self.contents.font.color = system_color
  653.     if @actor.two_swords_style
  654.       self.contents.draw_text(4,       0, 92, WLH, Vocab::weapon1)
  655.       self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
  656.     else
  657.       self.contents.draw_text(4,       0, 92, WLH, Vocab::weapon)
  658.       name = armor_slot_name(@actor.equip_type[0])
  659.       self.contents.draw_text(4, WLH * 1, 92, WLH, name)
  660.     end
  661.     for i in [url=mailto:1...@actor.armor_number]1...@actor.armor_number[/url]
  662.       name = armor_slot_name(@actor.equip_type[i])
  663.       self.contents.draw_text(4, WLH * (i + 1), 92, WLH, name)
  664.     end
  665.  
  666.     # 装備品を描画
  667.     rect = Rect.new(92, 0, self.width - 128, WLH)
  668.     @item_max.times { |i|
  669.       rect.y = WLH * i
  670.       draw_item_name(@data[i], rect.x, rect.y)
  671.       draw_equipment_ep_cost(@data[i], rect)
  672.     }
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ○ 防具欄の名称を取得
  676.   #     kind : 種別
  677.   #--------------------------------------------------------------------------
  678.   def armor_slot_name(kind)
  679.     case kind
  680.     when 0..3
  681.       return eval("Vocab.armor#{kind + 1}")
  682.     else
  683.       return Vocab.extra_armor(kind - 4)
  684.     end
  685.   end
  686.  
  687. unless $imported["ExtendedEquipScene"]
  688.   #--------------------------------------------------------------------------
  689.   # ● カーソルを 1 ページ後ろに移動
  690.   #--------------------------------------------------------------------------
  691.   def cursor_pagedown
  692.     return if Input.repeat?(Input::R)
  693.     super
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● カーソルを 1 ページ前に移動
  697.   #--------------------------------------------------------------------------
  698.   def cursor_pageup
  699.     return if Input.repeat?(Input::L)
  700.     super
  701.   end
  702.   #--------------------------------------------------------------------------
  703.   # ● フレーム更新
  704.   #--------------------------------------------------------------------------
  705.   def update
  706.     super
  707.     return unless self.active
  708.  
  709.     if Input.repeat?(Input::RIGHT)
  710.       cursor_pagedown
  711.     elsif Input.repeat?(Input::LEFT)
  712.       cursor_pageup
  713.     end
  714.   end
  715. end
  716.  
  717. end
  718.  
  719. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  720.  
  721. #==============================================================================
  722. # ■ Window_EquipItem
  723. #==============================================================================
  724.  
  725. class Window_EquipItem < Window_Item
  726.   #--------------------------------------------------------------------------
  727.   # ● リフレッシュ
  728.   #--------------------------------------------------------------------------
  729.   def refresh
  730.     @item_enabled = []
  731.     super
  732.     @data.each { |item| @item_enabled << enable?(item) }
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # ● アイテムをリストに含めるかどうか
  736.   #     item : アイテム
  737.   #--------------------------------------------------------------------------
  738.   def include?(item)
  739.     return true if item == nil
  740.     if @equip_type == 0
  741.       return false unless item.is_a?(RPG::Weapon)
  742.     else
  743.       return false unless item.is_a?(RPG::Armor)
  744.       return false unless item.kind == @equip_type - 1
  745.     end
  746.     return @actor.equippable?(item)
  747.   end
  748.   #--------------------------------------------------------------------------
  749.   # ● アイテムを許可状態で表示するかどうか
  750.   #     item : アイテム
  751.   #--------------------------------------------------------------------------
  752.   def enable?(item)
  753.     return false unless @actor.equippable?(item)                      # 装備不可
  754.     return false unless @actor.ep_condition_clear?(@equip_type, item)  # EP 不足
  755.  
  756.     return true
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   # ● 項目の描画
  760.   #     index : 項目番号
  761.   #--------------------------------------------------------------------------
  762.   def draw_item(index)
  763.     super(index)   
  764.     rect = item_rect(index)
  765.     item = @data[index]
  766.  
  767.     # 個数表示分の幅を削る
  768.     cw = self.contents.text_size(sprintf(":%2d", 0)).width
  769.     rect.width -= cw + 4
  770.     draw_equipment_ep_cost(item, rect, enable?(item))
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ○ 簡易リフレッシュ
  774.   #     equip_type : 装備部位
  775.   #--------------------------------------------------------------------------
  776.   def simple_refresh(equip_type)
  777.     # 一時的に装備部位を変更
  778.     last_equip_type = @equip_type
  779.     @equip_type = equip_type
  780.  
  781.     @data.each_with_index { |item, i|
  782.       # 許可状態が変化した項目のみ再描画
  783.       if enable?(item) != @item_enabled[i]
  784.         draw_item(i)
  785.         @item_enabled[i] = enable?(item)
  786.       end
  787.     }
  788.     # 装備部位を戻す
  789.     @equip_type = last_equip_type
  790.   end
  791. end
  792.  
  793. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  794.  
  795. #==============================================================================
  796. # ■ Window_EquipStatus
  797. #==============================================================================
  798.  
  799. class Window_EquipStatus < Window_Base
  800.   #--------------------------------------------------------------------------
  801.   # ● リフレッシュ
  802.   #--------------------------------------------------------------------------
  803.   alias refresh_KGC_EquipExtension refresh
  804.   def refresh
  805.     refresh_KGC_EquipExtension
  806.  
  807.     draw_actor_ep(@actor, 120, 0, 56) if KGC::EquipExtension::USE_EP_SYSTEM
  808.   end
  809. end
  810.  
  811. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  812.  
  813. #==============================================================================
  814. # ■ Window_Status
  815. #==============================================================================
  816.  
  817. class Window_Status < Window_Base
  818.  
  819. if KGC::EquipExtension::SHOW_STATUS_EP
  820.   #--------------------------------------------------------------------------
  821.   # ● 基本情報の描画
  822.   #     x : 描画先 X 座標
  823.   #     y : 描画先 Y 座標
  824.   #--------------------------------------------------------------------------
  825.   alias draw_basic_info_KGC_EquipExtension draw_basic_info
  826.   def draw_basic_info(x, y)
  827.     draw_basic_info_KGC_EquipExtension(x, y)
  828.  
  829.     draw_actor_ep(@actor, x + 160, y + WLH * 4)
  830.   end
  831. end
  832.  
  833.   #--------------------------------------------------------------------------
  834.   # ● 装備品の描画
  835.   #     x : 描画先 X 座標
  836.   #     y : 描画先 Y 座標
  837.   #--------------------------------------------------------------------------
  838.   def draw_equipments(x, y)
  839.     self.contents.font.color = system_color
  840.     self.contents.draw_text(x, y, 120, WLH, Vocab::equip)
  841.  
  842.     item_number = [@actor.equips.size, @actor.armor_number + 1].min
  843.     item_number.times { |i|
  844.       draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1))
  845.     }
  846.   end
  847. end
  848.  
  849. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  850.  
  851. #==============================================================================
  852. # ■ Window_ShopStatus
  853. #==============================================================================
  854.  
  855. class Window_ShopStatus < Window_Base
  856.   #--------------------------------------------------------------------------
  857.   # ● アクターの現装備と能力値変化の描画
  858.   #     actor : アクター
  859.   #     x     : 描画先 X 座標
  860.   #     y     : 描画先 Y 座標
  861.   #--------------------------------------------------------------------------
  862.   def draw_actor_parameter_change(actor, x, y)
  863.     return if @item.is_a?(RPG::Item)
  864.     enabled = actor.equippable?(@item)
  865.     self.contents.font.color = normal_color
  866.     self.contents.font.color.alpha = enabled ? 255 : 128
  867.     self.contents.draw_text(x, y, 200, WLH, actor.name)
  868.     if @item.is_a?(RPG::Weapon)
  869.       item1 = weaker_weapon(actor)
  870.     elsif actor.two_swords_style and @item.kind == 0
  871.       item1 = nil
  872.     else
  873.       index = actor.equip_type.index(@item.kind)
  874.       item1 = (index != nil ? actor.equips[1 + index] : nil)
  875.     end
  876.     if enabled
  877.       if @item.is_a?(RPG::Weapon)
  878.         atk1 = item1 == nil ? 0 : item1.atk
  879.         atk2 = @item == nil ? 0 : @item.atk
  880.         change = atk2 - atk1
  881.       else
  882.         def1 = item1 == nil ? 0 : item1.def
  883.         def2 = @item == nil ? 0 : @item.def
  884.         change = def2 - def1
  885.       end
  886.       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  887.     end
  888.     draw_item_name(item1, x, y + WLH, enabled)
  889.   end
  890. end
  891.  
  892. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  893.  
  894. #==============================================================================
  895. # ■ Scene_Equip
  896. #==============================================================================
  897.  
  898. class Scene_Equip < Scene_Base
  899.   #--------------------------------------------------------------------------
  900.   # ● 定数
  901.   #--------------------------------------------------------------------------
  902.   EQUIP_TYPE_MAX = KGC::EquipExtension::EXTRA_EQUIP_KIND.size + 5
  903.   #--------------------------------------------------------------------------
  904.   # ● オブジェクト初期化
  905.   #     actor_index : アクターインデックス
  906.   #     equip_index : 装備インデックス
  907.   #--------------------------------------------------------------------------
  908.   alias initialize_KGC_EquipExtension initialize
  909.   def initialize(actor_index = 0, equip_index = 0)
  910.     initialize_KGC_EquipExtension(actor_index, equip_index)
  911.  
  912.     unit = ($imported["LargeParty"] ?
  913.       $game_party.all_members : $game_party.members)
  914.     actor = unit[actor_index]
  915.     @equip_index = [@equip_index, actor.armor_number].min
  916.   end
  917.   #--------------------------------------------------------------------------
  918.   # ● アイテムウィンドウの作成
  919.   #--------------------------------------------------------------------------
  920.   alias create_item_windows_KGC_EquipExtension create_item_windows
  921.   def create_item_windows
  922.     create_item_windows_KGC_EquipExtension
  923.  
  924.     kind = equip_kind(@equip_index)
  925.     EQUIP_TYPE_MAX.times { |i|
  926.       @item_windows[i].visible = (kind == i)
  927.     }
  928.   end
  929.   #--------------------------------------------------------------------------
  930.   # ● アイテムウィンドウの更新
  931.   #--------------------------------------------------------------------------
  932.   def update_item_windows
  933.     kind = equip_kind(@equip_window.index)
  934.     for i in 0...EQUIP_TYPE_MAX
  935.       @item_windows[i].visible = (kind == i)
  936.       @item_windows[i].update
  937.     end
  938.     @item_window = @item_windows[kind]
  939.     @item_window.simple_refresh(@equip_window.index)
  940.   end
  941.   #--------------------------------------------------------------------------
  942.   # ○ 装備欄の種別を取得
  943.   #     index : 装備欄インデックス
  944.   #--------------------------------------------------------------------------
  945.   def equip_kind(index)
  946.     if index == 0
  947.       return 0
  948.     else
  949.       return @actor.equip_type[index - 1] + 1
  950.     end
  951.   end
  952.  
  953. unless $imported["ExtendedEquipScene"]
  954.   #--------------------------------------------------------------------------
  955.   # ● ステータスウィンドウの更新
  956.   #--------------------------------------------------------------------------
  957.   def update_status_window
  958.     if @equip_window.active
  959.       @status_window.set_new_parameters(nil, nil, nil, nil)
  960.     elsif @item_window.active
  961.       temp_actor = Marshal.load(Marshal.dump(@actor))
  962.       temp_actor.change_equip(@equip_window.index, @item_window.item, true)
  963.       new_atk = temp_actor.atk
  964.       new_def = temp_actor.def
  965.       new_spi = temp_actor.spi
  966.       new_agi = temp_actor.agi
  967.       @status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
  968.     end
  969.     @status_window.update
  970.   end
  971. end
  972.  
  973.   #--------------------------------------------------------------------------
  974.   # ● アイテム選択の更新
  975.   #--------------------------------------------------------------------------
  976.   alias update_item_selection_KGC_EquipExtension update_item_selection
  977.   def update_item_selection
  978.     if Input.trigger?(Input::C)
  979.       # 装備不可能な場合
  980.       index = @equip_window.index
  981.       item = @item_window.item
  982.       unless item == nil ||
  983.           (@actor.equippable?(item) && @actor.ep_condition_clear?(index, item))
  984.         Sound.play_buzzer
  985.         return
  986.       end
  987.     end
  988.  
  989.     update_item_selection_KGC_EquipExtension
  990.   end
  991. end
  992.  
  993. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  994.  
  995. #==============================================================================
  996. # ■ Scene_File
  997. #==============================================================================
  998.  
  999. class Scene_File < Scene_Base
  1000.   #--------------------------------------------------------------------------
  1001.   # ● セーブデータの読み込み
  1002.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  1003.   #--------------------------------------------------------------------------
  1004.   alias read_save_data_KGC_EquipExtension read_save_data
  1005.   def read_save_data(file)
  1006.     read_save_data_KGC_EquipExtension(file)
  1007.  
  1008.     KGC::Commands.restore_equip
  1009.     Graphics.frame_reset
  1010.   end
  1011. end








界限突破
RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 限界突破 - KGC_LimitBreak ◆ VX ◆
  3. #_/    ◇ Last update : 2008/01/09 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  ゲーム中の各種上限値を変更します。
  6. #_/============================================================================
  7. #_/  再定義が多いので、「素材」の最上部に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  9.  
  10. #==============================================================================
  11. # ★ カスタマイズ項目 - Customize ★
  12. #==============================================================================
  13.  
  14. module KGC
  15. module LimitBreak
  16.   # ◆ 能力値算出方式
  17.   #   0..データベース通り。
  18.   #      (100以降は計算式として PARAMETER_CALC_EXP を使用)
  19.   #
  20.   #   1..データベースを用いた2次関数。
  21.   #        a:レベル1の値  b:レベル2の値  c:レベル3の値  x:現レベル
  22.   #      として、
  23.   #        ax^2 + bx + c
  24.   #      を用いて能力値を算出。
  25.   #
  26.   #   2..データベースを用いた1次関数。
  27.   #        b:レベル2の値  c:レベル3の値  x:現レベル
  28.   #      として、
  29.   #        bx + c
  30.   #      を用いて能力値を算出。
  31.   #      (レベル 2 と 3 の値を使うのは、2次関数方式との使い分けを楽にするため)
  32.   PARAMETER_CALC_METHOD = 0
  33.  
  34.   # ◆ レベル 100 以降の能力値計算式
  35.   #  PARAMETER_CALC_METHOD = 0 のときに使用します。
  36.   #  【 level..現レベル  param[x]..レベル x の能力値 】
  37.   #  この計算結果をレベル 99 の能力値に加算します。
  38.   PARAMETER_CALC_EXP = "(param[99] - param[98]) * (level - 99)"
  39.  
  40.   # ◆ アクターのレベル上限
  41.   ACTOR_FINAL_LEVEL = [1]  # ← これは消さないこと!
  42.   # ここから下に、アクターごとの最終レベルを
  43.   #   ACTOR_FINAL_LEVEL[アクターID] = 最終レベル
  44.   # という形式で設定します。
  45.   # <例> ↓ アクター 1 の最終レベル 999
  46.   ACTOR_FINAL_LEVEL[1] = 70
  47.  
  48.   # ◆ アクターのレベル上限 (デフォルト)
  49.   #  上限を指定しなかった場合は、この値を最終レベルとして使用します。
  50.   ACTOR_FINAL_LEVEL_DEFAULT = 80
  51.   # ◆ アクターの経験値上限
  52.   ACTOR_EXP_LIMIT = 12000000
  53.  
  54.   # ◆ アクターの MaxHP 上限
  55.   ACTOR_MAXHP_LIMIT     = 98000
  56.   # ◆ アクターの MaxMP 上限
  57.   ACTOR_MAXMP_LIMIT     = 98000
  58.   # ◆ アクターの攻撃力、防御力、精神力、敏捷性上限
  59.   ACTOR_PARAMETER_LIMIT = 9000
  60.  
  61.   # ◆ エネミーの MaxHP 上限
  62.   ENEMY_MAXHP_LIMIT     = 9999999
  63.   # ◆ エネミーの MaxMP 上限
  64.   ENEMY_MAXMP_LIMIT     = 9999999
  65.   # ◆ エネミーの攻撃力、防御力、精神力、敏捷性上限
  66.   ENEMY_PARAMETER_LIMIT = 9999
  67.  
  68.   # ◆ エネミーの能力値補正
  69.   #  エネミーの各種能力値をデータベースの ○% にします。
  70.   #  データベース通りにする場合は 100 にしてください。
  71.   ENEMY_MAXHP_RATE = 100  # MaxHP
  72.   ENEMY_MAXMP_RATE = 100  # MaxMP
  73.   ENEMY_ATK_RATE   = 100  # 攻撃力
  74.   ENEMY_DEF_RATE   = 100  # 防御力
  75.   ENEMY_SPI_RATE   = 100  # 精神力
  76.   ENEMY_AGI_RATE   = 100  # 敏捷性
  77.  
  78.   # ◆ 所持金上限
  79.   GOLD_LIMIT = 120000000
  80.  
  81.   # ◆ アイテム所持数上限
  82.   ITEM_NUMBER_LIMIT = 999
  83.  
  84.   module_function
  85.   #--------------------------------------------------------------------------
  86.   # ○ 敵能力値直接指定
  87.   #     ここで、敵の MaxHP などを直接指定することができます。
  88.   #     データベースに入りきらない数値を指定する場合に使用してください。
  89.   #--------------------------------------------------------------------------
  90.   def set_enemy_parameters
  91.     #  <例> ID:10 の敵の MaxHP を 2000000 にする場合
  92.     # $data_enemies[10].maxhp = 2000000
  93.     #  <例> ID:16 の敵の攻撃力を 5000 にする場合
  94.     # $data_enemies[16].atk = 5000
  95.     #  <例> ID:20 の敵の防御力を2倍にする場合
  96.     # $data_enemies[20].def *= 2
  97.   end
  98. end
  99. end
  100.  
  101. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  102.  
  103. $imported = {} if $imported == nil
  104. $imported["LimitBreak"] = true
  105.  
  106. module KGC::LimitBreak
  107.   # 正規表現を定義
  108.   module Regexp
  109.     # ベースアイテム
  110.     module BaseItem
  111.       # 所持数上限
  112.       NUMBER_LIMIT = /<(?:NUMBER_LIMIT|所持数上限)[ ]*(\d+)>/i
  113.     end
  114.   end
  115.  
  116.   module_function
  117.   #--------------------------------------------------------------------------
  118.   # ○ 敵の能力補正を適用
  119.   #--------------------------------------------------------------------------
  120.   def revise_enemy_parameters
  121.     (1...$data_enemies.size).each { |i|
  122.       enemy = $data_enemies[i]
  123.       enemy.maxhp = enemy.maxhp * ENEMY_MAXHP_RATE / 100
  124.       enemy.maxmp = enemy.maxmp * ENEMY_MAXMP_RATE / 100
  125.       enemy.atk = enemy.atk * ENEMY_ATK_RATE / 100
  126.       enemy.def = enemy.def * ENEMY_DEF_RATE / 100
  127.       enemy.spi = enemy.spi * ENEMY_SPI_RATE / 100
  128.       enemy.agi = enemy.agi * ENEMY_AGI_RATE / 100
  129.     }
  130.   end
  131. end
  132.  
  133. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  134.  
  135. #==============================================================================
  136. # ■ RPG::BaseItem
  137. #==============================================================================
  138.  
  139. class RPG::BaseItem
  140.   #--------------------------------------------------------------------------
  141.   # ○ 限界突破のキャッシュ生成
  142.   #--------------------------------------------------------------------------
  143.   def create_limit_break_cache
  144.     @__number_limit = KGC::LimitBreak::ITEM_NUMBER_LIMIT
  145.  
  146.     self.note.split(/[\r\n]+/).each { |line|
  147.       if line =~ KGC::LimitBreak::Regexp::BaseItem::NUMBER_LIMIT
  148.         # 所持数上限
  149.         @__number_limit = $1.to_i
  150.       end
  151.     }
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ○ 所持数上限取得
  155.   #--------------------------------------------------------------------------
  156.   def number_limit
  157.     create_limit_break_cache if @__number_limit == nil
  158.     return @__number_limit
  159.   end
  160. end
  161.  
  162. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  163.  
  164. #==============================================================================
  165. # ■ Game_Battler
  166. #==============================================================================
  167.  
  168. class Game_Battler
  169.   #--------------------------------------------------------------------------
  170.   # ● MaxHP の制限値取得
  171.   #--------------------------------------------------------------------------
  172.   def maxhp_limit
  173.     return KGC::LimitBreak::ENEMY_MAXHP_LIMIT
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ○ MaxMP の制限値取得
  177.   #--------------------------------------------------------------------------
  178.   def maxmp_limit
  179.     return KGC::LimitBreak::ENEMY_MAXMP_LIMIT
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● MaxMP の取得
  183.   #--------------------------------------------------------------------------
  184.   def maxmp
  185.     return [[base_maxmp + @maxmp_plus, 0].max, maxmp_limit].min
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ○ 各種パラメータの制限値取得
  189.   #--------------------------------------------------------------------------
  190.   def parameter_limit
  191.     return KGC::LimitBreak::ENEMY_PARAMETER_LIMIT
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 攻撃力の取得
  195.   #--------------------------------------------------------------------------
  196.   def atk
  197.     n = [base_atk + @atk_plus, 1].max
  198.     states.each { |state| n *= state.atk_rate / 100.0 }
  199.     n = [[Integer(n), 1].max, parameter_limit].min
  200.     return n
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 防御力の取得
  204.   #--------------------------------------------------------------------------
  205.   def def
  206.     n = [base_def + @def_plus, 1].max
  207.     states.each { |state| n *= state.def_rate / 100.0 }
  208.     n = [[Integer(n), 1].max, parameter_limit].min
  209.     return n
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 精神力の取得
  213.   #--------------------------------------------------------------------------
  214.   def spi
  215.     n = [base_spi + @spi_plus, 1].max
  216.     states.each { |state| n *= state.spi_rate / 100.0 }
  217.     n = [[Integer(n), 1].max, parameter_limit].min
  218.     return n
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 敏捷性の取得
  222.   #--------------------------------------------------------------------------
  223.   def agi
  224.     n = [base_agi + @agi_plus, 1].max
  225.     states.each { |state| n *= state.agi_rate / 100.0 }
  226.     n = [[Integer(n), 1].max, parameter_limit].min
  227.     return n
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● MaxHP の設定
  231.   #     new_maxhp : 新しい MaxHP
  232.   #--------------------------------------------------------------------------
  233.   def maxhp=(new_maxhp)
  234.     @maxhp_plus += new_maxhp - self.maxhp
  235.     @maxhp_plus = [[@maxhp_plus, -maxhp_limit].max, maxhp_limit].min
  236.     @hp = [@hp, self.maxhp].min
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● MaxMP の設定
  240.   #     new_maxmp : 新しい MaxMP
  241.   #--------------------------------------------------------------------------
  242.   def maxmp=(new_maxmp)
  243.     @maxmp_plus += new_maxmp - self.maxmp
  244.     @maxmp_plus = [[@maxmp_plus, -maxmp_limit].max, maxmp_limit].min
  245.     @mp = [@mp, self.maxmp].min
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 攻撃力の設定
  249.   #     new_atk : 新しい攻撃力
  250.   #--------------------------------------------------------------------------
  251.   def atk=(new_atk)
  252.     @atk_plus += new_atk - self.atk
  253.     @atk_plus = [[@atk_plus, -parameter_limit].max, parameter_limit].min
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 防御力の設定
  257.   #     new_def : 新しい防御力
  258.   #--------------------------------------------------------------------------
  259.   def def=(new_def)
  260.     @def_plus += new_def - self.def
  261.     @def_plus = [[@def_plus, -parameter_limit].max, parameter_limit].min
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 精神力の設定
  265.   #     new_spi : 新しい精神力
  266.   #--------------------------------------------------------------------------
  267.   def spi=(new_spi)
  268.     @spi_plus += new_spi - self.spi
  269.     @spi_plus = [[@spi_plus, -parameter_limit].max, parameter_limit].min
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 敏捷性の設定
  273.   #     agi : 新しい敏捷性
  274.   #--------------------------------------------------------------------------
  275.   def agi=(new_agi)
  276.     @agi_plus += new_agi - self.agi
  277.     @agi_plus = [[@agi_plus, -parameter_limit].max, parameter_limit].min
  278.   end
  279. end
  280.  
  281. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  282.  
  283. #==============================================================================
  284. # ■ Game_Actor
  285. #==============================================================================
  286.  
  287. class Game_Actor < Game_Battler
  288.   #--------------------------------------------------------------------------
  289.   # ● 経験値計算
  290.   #--------------------------------------------------------------------------
  291.   def make_exp_list
  292.     @exp_list = Array.new(final_level + 2)
  293.     @exp_list[1] = @exp_list[final_level + 1] = 0
  294.     m = actor.exp_basis
  295.     n = 0.75 + actor.exp_inflation / 200.0
  296.     (2..final_level).each { |i|
  297.       @exp_list[i] = @exp_list[i-1] + Integer(m)
  298.       m *= 1 + n
  299.       n *= 0.9
  300.     }
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ○ 最終レベルの取得
  304.   #--------------------------------------------------------------------------
  305.   def final_level
  306.     n = KGC::LimitBreak::ACTOR_FINAL_LEVEL[self.id]
  307.     return (n != nil ? n : KGC::LimitBreak::ACTOR_FINAL_LEVEL_DEFAULT)
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● MaxHP の制限値取得
  311.   #--------------------------------------------------------------------------
  312.   def maxhp_limit
  313.     return KGC::LimitBreak::ACTOR_MAXHP_LIMIT
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ○ MaxMP の制限値取得
  317.   #--------------------------------------------------------------------------
  318.   def maxmp_limit
  319.     return KGC::LimitBreak::ACTOR_MAXMP_LIMIT
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ○ 各種パラメータの制限値取得
  323.   #--------------------------------------------------------------------------
  324.   def parameter_limit
  325.     return KGC::LimitBreak::ACTOR_PARAMETER_LIMIT
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ○ 経験値の制限値取得
  329.   #--------------------------------------------------------------------------
  330.   def exp_limit
  331.     return KGC::LimitBreak::ACTOR_EXP_LIMIT
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ● 経験値の変更
  335.   #     exp  : 新しい経験値
  336.   #     show : レベルアップ表示フラグ
  337.   #--------------------------------------------------------------------------
  338.   def change_exp(exp, show)
  339.     last_level = @level
  340.     last_skills = skills
  341.     [url=home.php?mod=space&uid=13302]@exp[/url] = [[exp, exp_limit].min, 0].max
  342.     while [url=home.php?mod=space&uid=13302]@exp[/url] >= @exp_list[@level+1] && @exp_list[@level+1] > 0
  343.       level_up
  344.     end
  345.     while [url=home.php?mod=space&uid=13302]@exp[/url] < @exp_list[@level]
  346.       level_down
  347.     end
  348.     @hp = [@hp, maxhp].min
  349.     @mp = [@mp, maxmp].min
  350.     if show && [url=home.php?mod=space&uid=22147]@level[/url] > last_level
  351.       display_level_up(skills - last_skills)
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● レベルの変更
  356.   #     level : 新しいレベル
  357.   #     show  : レベルアップ表示フラグ
  358.   #--------------------------------------------------------------------------
  359.   def change_level(level, show)
  360.     level = [[level, final_level].min, 1].max
  361.     change_exp(@exp_list[level], show)
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ○ 基本パラメータの取得
  365.   #--------------------------------------------------------------------------
  366.   def base_parameter(type)
  367.     case KGC::LimitBreak::PARAMETER_CALC_METHOD
  368.     when 0  # 数式定義
  369.       if [url=home.php?mod=space&uid=22147]@level[/url] >= 100
  370.         calc_text = KGC::LimitBreak::PARAMETER_CALC_EXP.dup
  371.         calc_text.gsub!(/level/i) { "@level" }
  372.         calc_text.gsub!(/param\[(\d+)\]/i) {
  373.           "actor.parameters[type, #{$1.to_i}]"
  374.         }
  375.         return actor.parameters[type, 99] + eval(calc_text)
  376.       end
  377.     when 1  # 二次関数
  378.       a = actor.parameters[type, 1]
  379.       b = actor.parameters[type, 2]
  380.       c = actor.parameters[type, 3]
  381.       return ((a * [url=home.php?mod=space&uid=22147]@level[/url] + b) * @level + c)
  382.     when 2  # 一次関数
  383.       b = actor.parameters[type, 2]
  384.       c = actor.parameters[type, 3]
  385.       return (b * @level + c)
  386.     end
  387.     return actor.parameters[type, @level]
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● 基本 MaxHP の取得
  391.   #--------------------------------------------------------------------------
  392.   def base_maxhp
  393.     return base_parameter(0)
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 基本 MaxMP の取得
  397.   #--------------------------------------------------------------------------
  398.   def base_maxmp
  399.     return base_parameter(1)
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 基本攻撃力の取得
  403.   #--------------------------------------------------------------------------
  404.   def base_atk
  405.     n = base_parameter(2)
  406.     equips.compact.each { |item| n += item.atk }
  407.     return n
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● 基本防御力の取得
  411.   #--------------------------------------------------------------------------
  412.   def base_def
  413.     n = base_parameter(3)
  414.     equips.compact.each { |item| n += item.def }
  415.     return n
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 基本精神力の取得
  419.   #--------------------------------------------------------------------------
  420.   def base_spi
  421.     n = base_parameter(4)
  422.     equips.compact.each { |item| n += item.spi }
  423.     return n
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 基本敏捷性の取得
  427.   #--------------------------------------------------------------------------
  428.   def base_agi
  429.     n = base_parameter(5)
  430.     equips.compact.each { |item| n += item.agi }
  431.     return n
  432.   end
  433. end
  434.  
  435. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  436.  
  437. #==============================================================================
  438. # ■ Game_Party
  439. #==============================================================================
  440.  
  441. class Game_Party < Game_Unit
  442.   #--------------------------------------------------------------------------
  443.   # ○ 所持金の制限値取得
  444.   #--------------------------------------------------------------------------
  445.   def gold_limit
  446.     return KGC::LimitBreak::GOLD_LIMIT
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● ゴールドの増加 (減少)
  450.   #     n : 金額
  451.   #--------------------------------------------------------------------------
  452.   def gain_gold(n)
  453.     [url=home.php?mod=space&uid=236945]@gold[/url] = [[@gold + n, 0].max, gold_limit].min
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● アイテムの増加 (減少)
  457.   #     item          : アイテム
  458.   #     n             : 個数
  459.   #     include_equip : 装備品も含める
  460.   #--------------------------------------------------------------------------
  461.   def gain_item(item, n, include_equip = false)
  462.     number = item_number(item)
  463.     case item
  464.     when RPG::Item
  465.       @items[item.id] = [[number + n, 0].max, item.number_limit].min
  466.     when RPG::Weapon
  467.       @weapons[item.id] = [[number + n, 0].max, item.number_limit].min
  468.     when RPG::Armor
  469.       @armors[item.id] = [[number + n, 0].max, item.number_limit].min
  470.     end
  471.     n += number
  472.     if include_equip && n < 0
  473.       members.each { |actor|
  474.         while n < 0 && actor.equips.include?(item)
  475.           actor.discard_equip(item)
  476.           n += 1
  477.         end
  478.       }
  479.     end
  480.   end
  481. end
  482.  
  483. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  484.  
  485. #==============================================================================
  486. # ■ Window_ShopBuy
  487. #==============================================================================
  488.  
  489. class Window_ShopBuy < Window_Selectable
  490.   #--------------------------------------------------------------------------
  491.   # ● 項目の描画
  492.   #     index : 項目番号
  493.   #--------------------------------------------------------------------------
  494.   def draw_item(index)
  495.     item = @data[index]
  496.     number = $game_party.item_number(item)
  497.     enabled = (item.price <= $game_party.gold && number < item.number_limit)
  498.     rect = item_rect(index)
  499.     self.contents.clear_rect(rect)
  500.     draw_item_name(item, rect.x, rect.y, enabled)
  501.     rect.width -= 4
  502.     self.contents.draw_text(rect, item.price, 2)
  503.   end
  504. end
  505.  
  506. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  507.  
  508. #==============================================================================
  509. # ■ Scene_Title
  510. #==============================================================================
  511.  
  512. class Scene_Title < Scene_Base
  513.   #--------------------------------------------------------------------------
  514.   # ● データベースのロード
  515.   #--------------------------------------------------------------------------
  516.   alias load_database_KGC_LimitBreak load_database
  517.   def load_database
  518.     load_database_KGC_LimitBreak
  519.  
  520.     set_enemy_parameters
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● 戦闘テスト用データベースのロード
  524.   #--------------------------------------------------------------------------
  525.   alias load_bt_database_KGC_LimitBreak load_bt_database
  526.   def load_bt_database
  527.     load_bt_database_KGC_LimitBreak
  528.  
  529.     set_enemy_parameters
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ○ エネミーの能力値を設定
  533.   #--------------------------------------------------------------------------
  534.   def set_enemy_parameters
  535.     KGC::LimitBreak.revise_enemy_parameters
  536.     KGC::LimitBreak.set_enemy_parameters
  537.   end
  538. end
  539.  
  540. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  541.  
  542. #==============================================================================
  543. # ■ Scene_File
  544. #==============================================================================
  545.  
  546. class Scene_File < Scene_Base
  547.   #--------------------------------------------------------------------------
  548.   # ● セーブデータの読み込み
  549.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  550.   #--------------------------------------------------------------------------
  551.   alias read_save_data_KGC_LimitBreak read_save_data
  552.   def read_save_data(file)
  553.     read_save_data_KGC_LimitBreak(file)
  554.  
  555.     (1...$data_actors.size).each { |i|
  556.       actor = $game_actors[i]
  557.       actor.make_exp_list
  558.       # レベル上限チェック
  559.       if actor.level > actor.final_level
  560.         while actor.level > actor.final_level
  561.           actor.level_down
  562.         end
  563.         # 減少した HP などを反映させるためのおまじない
  564.         actor.change_level(actor.final_level, false)
  565.       end
  566.     }
  567.   end
  568. end
  569.  
  570. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  571.  
  572. #==============================================================================
  573. # ■ Scene_Shop
  574. #==============================================================================
  575.  
  576. class Scene_Shop < Scene_Base
  577.   #--------------------------------------------------------------------------
  578.   # ● 購入アイテム選択の更新
  579.   #--------------------------------------------------------------------------
  580.   def update_buy_selection
  581.     @status_window.item = @buy_window.item
  582.     if Input.trigger?(Input::B)
  583.       Sound.play_cancel
  584.       @command_window.active = true
  585.       @dummy_window.visible = true
  586.       @buy_window.active = false
  587.       @buy_window.visible = false
  588.       @status_window.visible = false
  589.       @status_window.item = nil
  590.       @help_window.set_text("")
  591.       return
  592.     end
  593.     if Input.trigger?(Input::C)
  594.       @item = @buy_window.item
  595.       number = $game_party.item_number(@item)
  596.       if @item == nil || @item.price > $game_party.gold ||
  597.           number == @item.number_limit
  598.         Sound.play_buzzer
  599.       else
  600.         Sound.play_decision
  601.         max = (@item.price == 0 ?
  602.           @item.number_limit : $game_party.gold / @item.price)
  603.         max = [max, @item.number_limit - number].min
  604.         @buy_window.active = false
  605.         @buy_window.visible = false
  606.         @number_window.set(@item, max, @item.price)
  607.         @number_window.active = true
  608.         @number_window.visible = true
  609.       end
  610.     end
  611.   end
  612. end
  

最佳答案

查看完整内容

这是无法避免的事情吧,装备扩张之后储存的装备就是整个装备类dump进存档,而不是保存编号,因为新诞生的装备并不存在于数据库里。 解决方法的话,限制背包大小吧。

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39766
在线时间
7487 小时
注册时间
2009-7-6
帖子
13484

开拓者贵宾

2
发表于 2013-12-10 14:10:31 | 只看该作者
这是无法避免的事情吧,装备扩张之后储存的装备就是整个装备类dump进存档,而不是保存编号,因为新诞生的装备并不存在于数据库里。
解决方法的话,限制背包大小吧。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
519
在线时间
664 小时
注册时间
2010-6-30
帖子
223
3
 楼主| 发表于 2013-12-10 14:27:47 | 只看该作者
fux2 发表于 2013-12-10 14:16
这是无法避免的事情吧,装备扩张之后储存的装备就是整个装备类dump进存档,而不是保存编号,因为新诞生的装 ...

但是我增加装备并不会导致速度变慢,而是增加主角...主角直接上限调成999后~读档足够我飞去冲绳岛来回了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-2 17:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表