Project1

标题: 《综合战斗处理第二代》 [打印本页]

作者: dengwei    时间: 2012-7-13 10:50
标题: 《综合战斗处理第二代》
  1. #==============================================================================
  2. #                           《综合战斗处理第二代》
  3. #介绍;这款脚本加了以下内容;
  4. #      1.空手攻击的动画ID是第一个,被攻动画ID是第二个
  5. #      2.空手时攻防能力,修改防御力在 1252行,攻击力在 1246行
  6. #      3.增加了入场的动画,入场动画为3
  7. #      4.增加了  当物理攻击时,被攻方SP 与  HP 一起减少
  8. #      5.增加了  当物理攻击时,被攻方SP增加,HP 减少    (恢血的sp会减少的奥~~这是个缺陷,呵呵~~)
  9. #      6.增加了  连续伤害时,被攻方SP增加,HP 减少HP的5%
  10. #      7.增加了  战斗人物的上下摇动,如果不想要,就把1560行的  return 480 - rand(5)改为return 480
  11. #      8.把“MISS”更改成了“打空”
  12. #      9.增加了  战斗敌人人物的左右摇动,如果不想要,就把1793行的  return $data_troops[@troop_id].members[@member_index].y + rand(5)改为return $data_troops[@troop_id].members[@member_index].y
  13. #      10.更新了新的战斗计算方式,增加了幸运的随机伤害100
  14. #      11.随机获取经验,获取范围为你输入的   打死后获得经验    的值
  15. #      13.随机获取金钱,获取范围为你输入的   打死后获得金钱    的值
  16. #      14.增加了游戏一开始你的金钱,(随机获得),更改在1914,如果不要,就改为0.
  17. #      15.增加了显血设置(其中有2个显血设置来自66RPG)
  18. #
  19. #
  20. #  *!!一定要在Main脚本前面,所有脚本的后面插入,不然就会发生错误!~~~~~
  21. #  *!!注意,空手时攻击力的值是随机值,每换一次装备,空手时的攻击力就会改变!~
  22. #  #!!此脚步可能会与某些脚本发生冲突!~~
  23. #制作人;STUPID  ANT            制作组;STUPID  PIG工作室
  24. ##########################《使用声明》#########################################
  25. #本脚本由STUPID  PIG工作室自行研制,其制作权归本工作室所有,当然大家可以尽情的
  26. #使用,但是所有的备注都不能删除,呵呵~~就算你加密,我们也不怕,很轻松就能看到!
  27. #在使用过程中如果有什么漏洞或新的想法,可以联系我们,QQ;1660618519
  28. #当然,我不经常在线,所以你们还可以打我手机;13977375101
  29. #祝你们做游戏愉快!~
  30. #==============================================================================

  31. class Game_Battler
  32.   #--------------------------------------------------------------------------
  33.   # ● 定义实例变量
  34.   #--------------------------------------------------------------------------
  35.   attr_reader   :battler_name             # 战斗者 文件名
  36.   attr_reader   :battler_hue              # 战斗者 色相
  37.   attr_reader   :hp                       # HP
  38.   attr_reader   :sp                       # SP
  39.   attr_reader   :states                   # 状态
  40.   attr_accessor :hidden                   # 隐藏标志
  41.   attr_accessor :immortal                 # 不死身标志
  42.   attr_accessor :damage_pop               # 显示伤害标志
  43.   attr_accessor :damage                   # 伤害值
  44.   attr_accessor :critical                 # 会心一击标志
  45.   attr_accessor :animation_id             # 动画 ID
  46.   attr_accessor :animation_hit            # 动画 击中标志
  47.   attr_accessor :white_flash              # 白色屏幕闪烁标志
  48.   attr_accessor :blink                    # 闪烁标志
  49.   #--------------------------------------------------------------------------
  50.   # ● 初始化对像
  51.   #--------------------------------------------------------------------------
  52.   def initialize
  53.     @battler_name = ""
  54.     @battler_hue = 0
  55.     @hp = 0
  56.     @sp = 0
  57.     @states = []
  58.     @states_turn = {}
  59.     @maxhp_plus = 0
  60.     @maxsp_plus = 0
  61.     @str_plus = 0
  62.     @dex_plus = 0
  63.     @agi_plus = 0
  64.     @int_plus = 0
  65.     @hidden = false
  66.     @immortal = false
  67.     @damage_pop = false
  68.     @damage = nil
  69.     @critical = false
  70.     @animation_id = 03
  71.     @animation_hit = false
  72.     @white_flash = false
  73.     @blink = false
  74.     @current_action = Game_BattleAction.new
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 获取 MaxHP
  78.   #--------------------------------------------------------------------------
  79.   def maxhp
  80.     n = [[base_maxhp + @maxhp_plus, 1].max, 999999].min
  81.     for i in @states
  82.       n *= $data_states.maxhp_rate / 100.0
  83.     end
  84.     n = [[Integer(n), 1].max, 999999].min
  85.     return n
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 获取 MaxSP
  89.   #--------------------------------------------------------------------------
  90.   def maxsp
  91.     n = [[base_maxsp + @maxsp_plus, 0].max, 9999].min
  92.     for i in @states
  93.       n *= $data_states.maxsp_rate / 100.0
  94.     end
  95.     n = [[Integer(n), 0].max, 9999].min
  96.     return n
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 获取力量
  100.   #--------------------------------------------------------------------------
  101.   def str
  102.     n = [[base_str + @str_plus, 1].max, 999].min
  103.     for i in @states
  104.       n *= $data_states.str_rate / 100.0
  105.     end
  106.     n = [[Integer(n), 1].max, 999].min
  107.     return n
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 获取灵巧
  111.   #--------------------------------------------------------------------------
  112.   def dex
  113.     n = [[base_dex + @dex_plus, 1].max, 999].min
  114.     for i in @states
  115.       n *= $data_states.dex_rate / 100.0
  116.     end
  117.     n = [[Integer(n), 1].max, 999].min
  118.     return n
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 获取速度
  122.   #--------------------------------------------------------------------------
  123.   def agi
  124.     n = [[base_agi + @agi_plus, 1].max, 999].min
  125.     for i in @states
  126.       n *= $data_states.agi_rate / 100.0
  127.     end
  128.     n = [[Integer(n), 1].max, 999].min
  129.     return n
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 获取魔力
  133.   #--------------------------------------------------------------------------
  134.   def int
  135.     n = [[base_int + @int_plus, 1].max, 999].min
  136.     for i in @states
  137.       n *= $data_states.int_rate / 100.0
  138.     end
  139.     n = [[Integer(n), 1].max, 999].min
  140.     return n
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 设置 MaxHP
  144.   #     maxhp : 新的 MaxHP
  145.   #--------------------------------------------------------------------------
  146.   def maxhp=(maxhp)
  147.     @maxhp_plus += maxhp - self.maxhp
  148.     @maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min
  149.     @hp = [@hp, self.maxhp].min
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 设置 MaxSP
  153.   #     maxsp : 新的 MaxSP
  154.   #--------------------------------------------------------------------------
  155.   def maxsp=(maxsp)
  156.     @maxsp_plus += maxsp - self.maxsp
  157.     @maxsp_plus = [[@maxsp_plus, -9999].max, 9999].min
  158.     @sp = [@sp, self.maxsp].min
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 设置力量
  162.   #     str : 新的力量
  163.   #--------------------------------------------------------------------------
  164.   def str=(str)
  165.     @str_plus += str - self.str
  166.     @str_plus = [[@str_plus, -999].max, 999].min
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 设置灵巧
  170.   #     dex : 新的灵巧
  171.   #--------------------------------------------------------------------------
  172.   def dex=(dex)
  173.     @dex_plus += dex - self.dex
  174.     @dex_plus = [[@dex_plus, -999].max, 999].min
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 设置速度
  178.   #     agi : 新的速度
  179.   #--------------------------------------------------------------------------
  180.   def agi=(agi)
  181.     @agi_plus += agi - self.agi
  182.     @agi_plus = [[@agi_plus, -999].max, 999].min
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 设置魔力
  186.   #     int : 新的魔力
  187.   #--------------------------------------------------------------------------
  188.   def int=(int)
  189.     @int_plus += int - self.int
  190.     @int_plus = [[@int_plus, -999].max, 999].min
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 获取命中率
  194.   #--------------------------------------------------------------------------
  195.   def hit
  196.     n = 100
  197.     for i in @states
  198.       n *= $data_states.hit_rate / 100.0
  199.     end
  200.     return Integer(n)
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 获取攻击力
  204.   #--------------------------------------------------------------------------
  205.   def atk
  206.     n = base_atk
  207.     for i in @states
  208.       n *= $data_states.atk_rate / 100.0
  209.     end
  210.     return Integer(n)
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 获取物理防御
  214.   #--------------------------------------------------------------------------
  215.   def pdef
  216.     n = base_pdef
  217.     for i in @states
  218.       n *= $data_states.pdef_rate / 100.0
  219.     end
  220.     return Integer(n)
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 获取魔法防御
  224.   #--------------------------------------------------------------------------
  225.   def mdef
  226.     n = base_mdef
  227.     for i in @states
  228.       n *= $data_states.mdef_rate / 100.0
  229.     end
  230.     return Integer(n)
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 获取回避修正
  234.   #--------------------------------------------------------------------------
  235.   def eva
  236.     n = base_eva
  237.     for i in @states
  238.       n += $data_states.eva
  239.     end
  240.     return n
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 更改 HP
  244.   #     hp : 新的 HP
  245.   #--------------------------------------------------------------------------
  246.   def hp=(hp)
  247.     @hp = [[hp, maxhp].min, 0].max
  248.     # 解除附加的战斗不能状态
  249.     for i in 1...$data_states.size
  250.       if $data_states.zero_hp
  251.         if self.dead?
  252.           add_state(i)
  253.         else
  254.           remove_state(i)
  255.         end
  256.       end
  257.     end
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 更改 SP
  261.   #     sp : 新的 SP
  262.   #--------------------------------------------------------------------------
  263.   def sp=(sp)
  264.     @sp = [[sp, maxsp].min, 0].max
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 全回复
  268.   #--------------------------------------------------------------------------
  269.   def recover_all
  270.     @hp = maxhp
  271.     @sp = maxsp
  272.     for i in @states.clone
  273.       remove_state(i)
  274.     end
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● 获取当前的动作
  278.   #--------------------------------------------------------------------------
  279.   def current_action
  280.     return @current_action
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 确定动作速度
  284.   #--------------------------------------------------------------------------
  285.   def make_action_speed
  286.     @current_action.speed = agi + rand(10 + agi / 4)
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 战斗不能判定
  290.   #--------------------------------------------------------------------------
  291.   def dead?
  292.     return (@hp == 0 and not @immortal)
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 存在判定
  296.   #--------------------------------------------------------------------------
  297.   def exist?
  298.     return (not @hidden and (@hp > 0 or @immortal))
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● HP 0 判定
  302.   #--------------------------------------------------------------------------
  303.   def hp0?
  304.     return (not @hidden and @hp == 0)
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 可以输入命令判定
  308.   #--------------------------------------------------------------------------
  309.   def inputable?
  310.     return (not @hidden and restriction <= 1)
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● 可以行动判定
  314.   #--------------------------------------------------------------------------
  315.   def movable?
  316.     return (not @hidden and restriction < 4)
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 防御中判定
  320.   #--------------------------------------------------------------------------
  321.   def guarding?
  322.     return (@current_action.kind == 0 and @current_action.basic == 1)
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 休止中判定
  326.   #--------------------------------------------------------------------------
  327.   def resting?
  328.     return (@current_action.kind == 0 and @current_action.basic == 3)
  329.   end
  330. end
  331. #==============================================================================
  332. # ■ Game_Battler (分割定义 2)
  333. #------------------------------------------------------------------------------
  334. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  335. # 超级类来使用。
  336. #==============================================================================

  337. class Game_Battler
  338.   #--------------------------------------------------------------------------
  339.   # ● 检查状态
  340.   #     state_id : 状态 ID
  341.   #--------------------------------------------------------------------------
  342.   def state?(state_id)
  343.     # 如果符合被附加的状态的条件就返回 ture
  344.     return @states.include?(state_id)
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 判断状态是否为 full
  348.   #     state_id : 状态 ID
  349.   #--------------------------------------------------------------------------
  350.   def state_full?(state_id)
  351.     # 如果符合被附加的状态的条件就返回 false
  352.     unless self.state?(state_id)
  353.       return false
  354.     end
  355.     # 秩序回合数 -1 (自动状态) 然后返回 true
  356.     if @states_turn[state_id] == -1
  357.       return true
  358.     end
  359.     # 当持续回合数等于自然解除的最低回合数时返回 ture
  360.     return @states_turn[state_id] == $data_states[state_id].hold_turn
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 附加状态
  364.   #     state_id : 状态 ID
  365.   #     force    : 强制附加标志 (处理自动状态时使用)
  366.   #--------------------------------------------------------------------------
  367.   def add_state(state_id, force = false)
  368.     # 无效状态的情况下
  369.     if $data_states[state_id] == nil
  370.       # 过程结束
  371.       return
  372.     end
  373.     # 无法强制附加的情况下
  374.     unless force
  375.       # 已存在的状态循环
  376.       for i in @states
  377.         # 新的状态和已经存在的状态 (-) 同时包含的情况下、
  378.         # 本状态不包含变化为新状态的状态变化 (-)
  379.         # (ex : 战斗不能与附加中毒同时存在的场合)
  380.         if $data_states.minus_state_set.include?(state_id) and
  381.            not $data_states[state_id].minus_state_set.include?(i)
  382.           # 过程结束
  383.           return
  384.         end
  385.       end
  386.     end
  387.     # 无法附加本状态的情况下
  388.     unless state?(state_id)
  389.       # 状态 ID 追加到 @states 序列中
  390.       @states.push(state_id)
  391.       # 选项 [当作 HP 0 的状态] 有效的情况下
  392.       if $data_states[state_id].zero_hp
  393.         # HP 更改为 0
  394.         @hp = 0
  395.       end
  396.       # 所有状态的循环
  397.       for i in 1...$data_states.size
  398.         # 状态变化 (+) 处理
  399.         if $data_states[state_id].plus_state_set.include?(i)
  400.           add_state(i)
  401.         end
  402.         # 状态变化 (-) 处理
  403.         if $data_states[state_id].minus_state_set.include?(i)
  404.           remove_state(i)
  405.         end
  406.       end
  407.       # 按比例大的排序 (值相等的情况下按照强度排序)
  408.       @states.sort! do |a, b|
  409.         state_a = $data_states[a]
  410.         state_b = $data_states
  411.         if state_a.rating > state_b.rating
  412.           -1
  413.         elsif state_a.rating < state_b.rating
  414.           +1
  415.         elsif state_a.restriction > state_b.restriction
  416.           -1
  417.         elsif state_a.restriction < state_b.restriction
  418.           +1
  419.         else
  420.           a <=> b
  421.         end
  422.       end
  423.     end
  424.     # 强制附加的场合
  425.     if force
  426.       # 设置为自然解除的最低回数 -1 (无效)
  427.       @states_turn[state_id] = -1
  428.     end
  429.     # 不能强制附加的场合
  430.     unless  @states_turn[state_id] == -1
  431.       # 设置为自然解除的最低回数
  432.       @states_turn[state_id] = $data_states[state_id].hold_turn
  433.     end
  434.     # 无法行动的场合
  435.     unless movable?
  436.       # 清除行动
  437.       @current_action.clear
  438.     end
  439.     # 检查 HP 及 SP 的最大值
  440.     @hp = [@hp, self.maxhp].min
  441.     @sp = [@sp, self.maxsp].min
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ● 解除状态
  445.   #     state_id : 状态 ID
  446.   #     force    : 强制解除标志 (处理自动状态时使用)
  447.   #--------------------------------------------------------------------------
  448.   def remove_state(state_id, force = false)
  449.     # 无法附加本状态的情况下
  450.     if state?(state_id)
  451.       # 被强制附加的状态、并不是强制解除的情况下
  452.       if @states_turn[state_id] == -1 and not force
  453.         # 过程结束
  454.         return
  455.       end
  456.       # 现在的 HP 为 0 当作选项 [当作 HP 0 的状态]有效的场合
  457.       if @hp == 0 and $data_states[state_id].zero_hp
  458.         # 判断是否有另外的 [当作 HP 0 的状态]状态
  459.         zero_hp = false
  460.         for i in @states
  461.           if i != state_id and $data_states.zero_hp
  462.             zero_hp = true
  463.           end
  464.         end
  465.         # 如果可以解除战斗不能、将 HP 更改为 1
  466.         if zero_hp == false
  467.           @hp = 1
  468.         end
  469.       end
  470.       # 将状态 ID 从 @states 队列和 @states_turn hash 中删除
  471.       @states.delete(state_id)
  472.       @states_turn.delete(state_id)
  473.     end
  474.     # 检查 HP 及 SP 的最大值
  475.     @hp = [@hp, self.maxhp].min
  476.     @sp = [@sp, self.maxsp].min
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 获取状态的动画 ID
  480.   #--------------------------------------------------------------------------
  481.   def state_animation_id
  482.     # 一个状态也没被附加的情况下
  483.     if @states.size == 0
  484.       return 0
  485.     end
  486.     # 返回概率最大的状态动画 ID
  487.     return $data_states[@states[0]].animation_id
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● 获取限制
  491.   #--------------------------------------------------------------------------
  492.   def restriction
  493.     restriction_max = 0
  494.     # 从当前附加的状态中获取最大的 restriction
  495.     for i in @states
  496.       if $data_states.restriction >= restriction_max
  497.         restriction_max = $data_states.restriction
  498.       end
  499.     end
  500.     return restriction_max
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● 判断状态 [无法获得 EXP]
  504.   #--------------------------------------------------------------------------
  505.   def cant_get_exp?
  506.     for i in @states
  507.       if $data_states.cant_get_exp
  508.         return true
  509.       end
  510.     end
  511.     return false
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● 判断状态 [无法回避攻击]
  515.   #--------------------------------------------------------------------------
  516.   def cant_evade?
  517.     for i in @states
  518.       if $data_states.cant_evade
  519.         return true
  520.       end
  521.     end
  522.     return false
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 判断状态 [连续伤害]
  526.   #--------------------------------------------------------------------------
  527.   def slip_damage?
  528.     for i in @states
  529.       if $data_states.slip_damage
  530.         return true
  531.       end
  532.     end
  533.     return false
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ● 解除战斗用状态 (战斗结束时调用)
  537.   #--------------------------------------------------------------------------
  538.   def remove_states_battle
  539.     for i in @states.clone
  540.       if $data_states.battle_only
  541.         remove_state(i)
  542.       end
  543.     end
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 状态自然解除 (回合改变时调用)
  547.   #--------------------------------------------------------------------------
  548.   def remove_states_auto
  549.     for i in @states_turn.keys.clone
  550.       if @states_turn > 0
  551.         @states_turn -= 1
  552.       elsif rand(100) < $data_states.auto_release_prob
  553.         remove_state(i)
  554.       end
  555.     end
  556.   end
  557.   #--------------------------------------------------------------------------
  558.   # ● 状态攻击解除 (受到物理伤害时调用)
  559.   #--------------------------------------------------------------------------
  560.   def remove_states_shock
  561.     for i in @states.clone
  562.       if rand(100) < $data_states.shock_release_prob
  563.         remove_state(i)
  564.       end
  565.     end
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 状态变化 (+) 的适用
  569.   #     plus_state_set  : 状态变化 (+)
  570.   #--------------------------------------------------------------------------
  571.   def states_plus(plus_state_set)
  572.     # 清除有效标志
  573.     effective = false
  574.     # 循环 (附加状态)
  575.     for i in plus_state_set
  576.       # 无法防御本状态的情况下
  577.       unless self.state_guard?(i)
  578.         # 这个状态如果不是 full 的话就设置有效标志
  579.         effective |= self.state_full?(i) == false
  580.         # 状态为 [不能抵抗] 的情况下
  581.         if $data_states.nonresistance
  582.           # 设置状态变化标志
  583.           @state_changed = true
  584.           # 附加状态
  585.           add_state(i)
  586.         # 这个状态不是 full 的情况下
  587.         elsif self.state_full?(i) == false
  588.           # 将状态的有效度变换为概率、与随机数比较
  589.           if rand(100) < [0,100,80,60,40,20,0][self.state_ranks]
  590.             # 设置状态变化标志
  591.             @state_changed = true
  592.             # 附加状态
  593.             add_state(i)
  594.           end
  595.         end
  596.       end
  597.     end
  598.     # 过程结束
  599.     return effective
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● 状态变化 (-) 的使用
  603.   #     minus_state_set : 状态变化 (-)
  604.   #--------------------------------------------------------------------------
  605.   def states_minus(minus_state_set)
  606.     # 清除有效标志
  607.     effective = false
  608.     # 循环 (解除状态)
  609.     for i in minus_state_set
  610.       # 如果这个状态被附加则设置有效标志
  611.       effective |= self.state?(i)
  612.       # 设置状态变化标志
  613.       @state_changed = true
  614.       # 解除状态
  615.       remove_state(i)
  616.     end
  617.     # 过程结束
  618.     return effective
  619.   end
  620. end
  621. #==============================================================================
  622. # ■ Game_Battler (分割定义 3)
  623. #------------------------------------------------------------------------------
  624. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  625. # 超级类来使用。
  626. #==============================================================================

  627. class Game_Battler
  628.   #--------------------------------------------------------------------------
  629.   # ● 可以使用特技的判定
  630.   #     skill_id : 特技 ID
  631.   #--------------------------------------------------------------------------
  632.   def skill_can_use?(skill_id)
  633.     # SP 不足的情况下不能使用
  634.     if $data_skills[skill_id].sp_cost > self.sp
  635.       return false
  636.     end
  637.     # 战斗不能的情况下不能使用
  638.     if dead?
  639.       return false
  640.     end
  641.     # 沉默状态的情况下、物理特技以外的特技不能使用
  642.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  643.       return false
  644.     end
  645.     # 获取可以使用的时机
  646.     occasion = $data_skills[skill_id].occasion
  647.     # 战斗中的情况下
  648.     if $game_temp.in_battle
  649.       # [平时] 或者是 [战斗中] 可以使用
  650.       return (occasion == 0 or occasion == 1)
  651.     # 不是战斗中的情况下
  652.     else
  653.       # [平时] 或者是 [菜单中] 可以使用
  654.       return (occasion == 0 or occasion == 2)
  655.     end
  656.   end
  657.   #--------------------------------------------------------------------------
  658.   # ● 应用通常攻击效果
  659.   #     attacker : 攻击者 (battler)
  660.   #--------------------------------------------------------------------------
  661.   def attack_effect(attacker)
  662.     # 清除会心一击标志
  663.     self.critical = false
  664.     # 第一命中判定
  665.     hit_result = (rand(100) < attacker.hit)
  666.     # 命中的情况下
  667.     if hit_result == true
  668.       # 计算基本伤害
  669.       atk = [attacker.atk - self.pdef / 2, 0].max
  670.       self.damage = atk * (20 + attacker.str) / 20 + rand(100)
  671.       # 属性修正
  672.       self.damage *= elements_correct(attacker.element_set)
  673.       self.damage /= 100
  674.       # 伤害符号正确的情况下
  675.       if self.damage > 0
  676.         # 会心一击修正
  677.         if rand(100) < 4 * attacker.dex / self.agi
  678.           self.damage *= 2
  679.           self.critical = true
  680.         end
  681.         # 防御修正
  682.         if self.guarding?
  683.           self.damage /= 2
  684.         end
  685.       end
  686.       # 分散
  687.       if self.damage.abs > 0
  688.         amp = [self.damage.abs * 15 / 100, 1].max
  689.         self.damage += rand(amp+1) + rand(amp+1) - amp
  690.       end
  691.       # 第二命中判定
  692.       eva = 8 * self.agi / attacker.dex + self.eva
  693.       hit = self.damage < 0 ? 100 : 100 - eva
  694.       hit = self.cant_evade? ? 100 : hit
  695.       hit_result = (rand(100) < hit)
  696.     end
  697.     # 命中的情况下
  698.     if hit_result == true
  699.       # 状态冲击解除
  700.       remove_states_shock
  701.       # HP 的伤害计算
  702.       self.hp -= self.damage
  703.       self.sp -= self.damage
  704.       # 状态变化
  705.       @state_changed = false
  706.       states_plus(attacker.plus_state_set)
  707.       states_minus(attacker.minus_state_set)
  708.     # Miss 的情况下
  709.     else
  710.       # 伤害设置为 "Miss"
  711.       self.damage = "打空"
  712.       # 清除会心一击标志
  713.       self.critical = false
  714.     end
  715.     # 过程结束
  716.     return true
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 应用特技效果
  720.   #     user  : 特技的使用者 (battler)
  721.   #     skill : 特技
  722.   #--------------------------------------------------------------------------
  723.   def skill_effect(user, skill)
  724.     # 清除会心一击标志
  725.     self.critical = false
  726.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  727.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  728.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  729.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  730.       # 过程结束
  731.       return false
  732.     end
  733.     # 清除有效标志
  734.     effective = false
  735.     # 公共事件 ID 是有效的情况下,设置为有效标志
  736.     effective |= skill.common_event_id > 0
  737.     # 第一命中判定
  738.     hit = skill.hit
  739.     if skill.atk_f > 0
  740.       hit *= user.hit / 100
  741.     end
  742.     hit_result = (rand(100) < hit)
  743.     # 不确定的特技的情况下设置为有效标志
  744.     effective |= hit < 100
  745.     # 命中的情况下
  746.     if hit_result == true
  747.       # 计算威力
  748.       power = skill.power + user.atk * skill.atk_f / 100
  749.       if power > 0
  750.         power -= self.pdef * skill.pdef_f / 200
  751.         power -= self.mdef * skill.mdef_f / 200
  752.         power = [power, 0].max
  753.       end
  754.       # 计算倍率
  755.       rate = 20
  756.       rate += (user.str * skill.str_f / 100)
  757.       rate += (user.dex * skill.dex_f / 100)
  758.       rate += (user.agi * skill.agi_f / 100)
  759.       rate += (user.int * skill.int_f / 100)
  760.       # 计算基本伤害
  761.       self.damage = power * rate / 20 + rand(100)
  762.       # 属性修正
  763.       self.damage *= elements_correct(skill.element_set)
  764.       self.damage /= 100
  765.       # 伤害符号正确的情况下
  766.       if self.damage > 0
  767.         # 防御修正
  768.         if self.guarding?
  769.           self.damage /= 2
  770.         end
  771.       end
  772.       # 分散
  773.       if skill.variance > 0 and self.damage.abs > 0
  774.         amp = [self.damage.abs * skill.variance / 100, 1].max
  775.         self.damage += rand(amp+1) + rand(amp+1) - amp
  776.       end
  777.       # 第二命中判定
  778.       eva = 8 * self.agi / user.dex + self.eva
  779.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  780.       hit = self.cant_evade? ? 100 : hit
  781.       hit_result = (rand(100) < hit)
  782.       # 不确定的特技的情况下设置为有效标志
  783.       effective |= hit < 100
  784.     end
  785.     # 命中的情况下
  786.     if hit_result == true
  787.       # 威力 0 以外的物理攻击的情况下
  788.       if skill.power != 0 and skill.atk_f > 0
  789.         # 状态冲击解除
  790.         remove_states_shock
  791.         # 设置有效标志
  792.         effective = true
  793.       end
  794.       # HP 的伤害减法运算
  795.       last_hp = self.hp
  796.       self.hp -= self.damage
  797.       self.sp += self.damage
  798.       effective |= self.hp != last_hp
  799.       # 状态变化
  800.       @state_changed = false
  801.       effective |= states_plus(skill.plus_state_set)
  802.       effective |= states_minus(skill.minus_state_set)
  803.       # 威力为 0 的场合
  804.       if skill.power == 0
  805.         # 伤害设置为空的字串
  806.         self.damage = ""
  807.         # 状态没有变化的情况下
  808.         unless @state_changed
  809.           # 伤害设置为 "Miss"
  810.           self.damage = "打空"
  811.         end
  812.       end
  813.     # Miss 的情况下
  814.     else
  815.       # 伤害设置为 "Miss"
  816.       self.damage = "打空"
  817.     end
  818.     # 不在战斗中的情况下
  819.     unless $game_temp.in_battle
  820.       # 伤害设置为 nil
  821.       self.damage = nil
  822.     end
  823.     # 过程结束
  824.     return effective
  825.   end
  826.   #--------------------------------------------------------------------------
  827.   # ● 应用物品效果
  828.   #     item : 物品
  829.   #--------------------------------------------------------------------------
  830.   def item_effect(item)
  831.     # 清除会心一击标志
  832.     self.critical = false
  833.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  834.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  835.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  836.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  837.       # 过程结束
  838.       return false
  839.     end
  840.     # 清除有效标志
  841.     effective = false
  842.     # 公共事件 ID 是有效的情况下,设置为有效标志
  843.     effective |= item.common_event_id > 0
  844.     # 命中判定
  845.     hit_result = (rand(100) < item.hit)
  846.     # 不确定的特技的情况下设置为有效标志
  847.     effective |= item.hit < 100
  848.     # 命中的情况
  849.     if hit_result == true
  850.       # 计算回复量
  851.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  852.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  853.       if recover_hp < 0
  854.         recover_hp += self.pdef * item.pdef_f / 20
  855.         recover_hp += self.mdef * item.mdef_f / 20
  856.         recover_hp = [recover_hp, 0].min
  857.       end
  858.       # 属性修正
  859.       recover_hp *= elements_correct(item.element_set)
  860.       recover_hp /= 100
  861.       recover_sp *= elements_correct(item.element_set)
  862.       recover_sp /= 100
  863.       # 分散
  864.       if item.variance > 0 and recover_hp.abs > 0
  865.         amp = [recover_hp.abs * item.variance / 100, 1].max
  866.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  867.       end
  868.       if item.variance > 0 and recover_sp.abs > 0
  869.         amp = [recover_sp.abs * item.variance / 100, 1].max
  870.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  871.       end
  872.       # 回复量符号为负的情况下
  873.       if recover_hp < 0
  874.         # 防御修正
  875.         if self.guarding?
  876.           recover_hp /= 2
  877.         end
  878.       end
  879.       # HP 回复量符号的反转、设置伤害值
  880.       self.damage = -recover_hp
  881.       # HP 以及 SP 的回复
  882.       last_hp = self.hp
  883.       last_sp = self.sp
  884.       self.hp += recover_hp
  885.       self.sp += recover_sp
  886.       effective |= self.hp != last_hp
  887.       effective |= self.sp != last_sp
  888.       # 状态变化
  889.       @state_changed = false
  890.       effective |= states_plus(item.plus_state_set)
  891.       effective |= states_minus(item.minus_state_set)
  892.       # 能力上升值有效的情况下
  893.       if item.parameter_type > 0 and item.parameter_points != 0
  894.         # 能力值的分支
  895.         case item.parameter_type
  896.         when 1  # MaxHP
  897.           @maxhp_plus += item.parameter_points
  898.         when 2  # MaxSP
  899.           @maxsp_plus += item.parameter_points
  900.         when 3  # 力量
  901.           @str_plus += item.parameter_points
  902.         when 4  # 灵巧
  903.           @dex_plus += item.parameter_points
  904.         when 5  # 速度
  905.           @agi_plus += item.parameter_points
  906.         when 6  # 魔力
  907.           @int_plus += item.parameter_points
  908.         end
  909.         # 设置有效标志
  910.         effective = true
  911.       end
  912.       # HP 回复率与回复量为 0 的情况下
  913.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  914.         # 设置伤害为空的字符串
  915.         self.damage = ""
  916.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  917.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  918.            (item.parameter_type == 0 or item.parameter_points == 0)
  919.           # 状态没有变化的情况下
  920.           unless @state_changed
  921.             # 伤害设置为 "Miss"
  922.             self.damage = "打空"
  923.           end
  924.         end
  925.       end
  926.     # Miss 的情况下
  927.     else
  928.       # 伤害设置为 "Miss"
  929.       self.damage = "打空"
  930.     end
  931.     # 不在战斗中的情况下
  932.     unless $game_temp.in_battle
  933.       # 伤害设置为 nil
  934.       self.damage = nil
  935.     end
  936.     # 过程结束
  937.     return effective
  938.   end
  939.   #--------------------------------------------------------------------------
  940.   # ● 应用连续伤害效果
  941.   #--------------------------------------------------------------------------
  942.   def slip_damage_effect
  943.     # 设置伤害
  944.     self.damage = self.maxhp / 5
  945.     # 分散
  946.     if self.damage.abs > 0
  947.       amp = [self.damage.abs * 15 / 100, 1].max
  948.       self.damage += rand(amp+1) + rand(amp+1) - amp
  949.     end
  950.     # HP 的伤害减法运算
  951.     self.hp -= self.damage
  952.     # 过程结束
  953.     return true
  954.   end
  955.   #--------------------------------------------------------------------------
  956.   # ● 属性修正计算
  957.   #     element_set : 属性
  958.   #--------------------------------------------------------------------------
  959.   def elements_correct(element_set)
  960.     # 无属性的情况
  961.     if element_set == []
  962.       # 返回 100
  963.       return 100
  964.     end
  965.     # 在被赋予的属性中返回最弱的
  966.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  967.     #   和 Game_Enemy 类的定义
  968.     weakest = -100
  969.     for i in element_set
  970.       weakest = [weakest, self.element_rate(i)].max
  971.     end
  972.     return weakest
  973.   end
  974. end
  975. #==============================================================================
  976. # ■ Game_Actor
  977. #------------------------------------------------------------------------------
  978. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  979. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  980. #==============================================================================

  981. class Game_Actor < Game_Battler
  982.   #--------------------------------------------------------------------------
  983.   # ● 定义实例变量
  984.   #--------------------------------------------------------------------------
  985.   attr_reader   :name                     # 名称
  986.   attr_reader   :character_name           # 角色 文件名
  987.   attr_reader   :character_hue            # 角色 色相
  988.   attr_reader   :class_id                 # 职业 ID
  989.   attr_reader   :weapon_id                # 武器 ID
  990.   attr_reader   :armor1_id                # 盾 ID
  991.   attr_reader   :armor2_id                # 头防具 ID
  992.   attr_reader   :armor3_id                # 身体体防具 ID
  993.   attr_reader   :armor4_id                # 装饰品 ID
  994.   attr_reader   :level                    # 等级
  995.   attr_reader   :exp                      # EXP
  996.   attr_reader   :skills                   # 特技
  997.   #--------------------------------------------------------------------------
  998.   # ● 初始化对像
  999.   #     actor_id : 角色 ID
  1000.   #--------------------------------------------------------------------------
  1001.   def initialize(actor_id)
  1002.     super()
  1003.     setup(actor_id)
  1004.   end
  1005.   #--------------------------------------------------------------------------
  1006.   # ● 设置
  1007.   #     actor_id : 角色 ID
  1008.   #--------------------------------------------------------------------------
  1009.   def setup(actor_id)
  1010.     actor = $data_actors[actor_id]
  1011.     @actor_id = actor_id
  1012.     @name = actor.name
  1013.     @character_name = actor.character_name
  1014.     @character_hue = actor.character_hue
  1015.     @battler_name = actor.battler_name
  1016.     @battler_hue = actor.battler_hue
  1017.     @class_id = actor.class_id
  1018.     @weapon_id = actor.weapon_id
  1019.     @armor1_id = actor.armor1_id
  1020.     @armor2_id = actor.armor2_id
  1021.     @armor3_id = actor.armor3_id
  1022.     @armor4_id = actor.armor4_id
  1023.     @level = actor.initial_level
  1024.     @exp_list = Array.new(101)
  1025.     make_exp_list
  1026.     @exp = @exp_list[@level]
  1027.     @skills = []
  1028.     @hp = maxhp
  1029.     @sp = maxsp
  1030.     @states = []
  1031.     @states_turn = {}
  1032.     @maxhp_plus = 0
  1033.     @maxsp_plus = 0
  1034.     @str_plus = 0
  1035.     @dex_plus = 0
  1036.     @agi_plus = 0
  1037.     @int_plus = 0
  1038.     # 学会特技
  1039.     for i in 1..@level
  1040.       for j in $data_classes[@class_id].learnings
  1041.         if j.level == i
  1042.           learn_skill(j.skill_id)
  1043.         end
  1044.       end
  1045.     end
  1046.     # 刷新自动状态
  1047.     update_auto_state(nil, $data_armors[@armor1_id])
  1048.     update_auto_state(nil, $data_armors[@armor2_id])
  1049.     update_auto_state(nil, $data_armors[@armor3_id])
  1050.     update_auto_state(nil, $data_armors[@armor4_id])
  1051.   end
  1052.   #--------------------------------------------------------------------------
  1053.   # ● 获取角色 ID
  1054.   #--------------------------------------------------------------------------
  1055.   def id
  1056.     return @actor_id
  1057.   end
  1058.   #--------------------------------------------------------------------------
  1059.   # ● 获取索引
  1060.   #--------------------------------------------------------------------------
  1061.   def index
  1062.     return $game_party.actors.index(self)
  1063.   end
  1064.   #--------------------------------------------------------------------------
  1065.   # ● 计算 EXP
  1066.   #--------------------------------------------------------------------------
  1067.   def make_exp_list
  1068.     actor = $data_actors[@actor_id]
  1069.     @exp_list[1] = 0
  1070.     pow_i = 2.4 + actor.exp_inflation / 100.0
  1071.     for i in 2..100
  1072.       if i > actor.final_level
  1073.         @exp_list = 0
  1074.       else
  1075.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  1076.         @exp_list = @exp_list[i-1] + Integer(n)
  1077.       end
  1078.     end
  1079.   end
  1080.   #--------------------------------------------------------------------------
  1081.   # ● 取得属性修正值
  1082.   #     element_id : 属性 ID
  1083.   #--------------------------------------------------------------------------
  1084.   def element_rate(element_id)
  1085.     # 获取对应属性有效度的数值
  1086.     table = [0,200,150,100,50,0,-100]
  1087.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  1088.     # 防具能防御本属性的情况下效果减半
  1089.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  1090.       armor = $data_armors
  1091.       if armor != nil and armor.guard_element_set.include?(element_id)
  1092.         result /= 2
  1093.       end
  1094.     end
  1095.     # 状态能防御本属性的情况下效果减半
  1096.     for i in @states
  1097.       if $data_states.guard_element_set.include?(element_id)
  1098.         result /= 2
  1099.       end
  1100.     end
  1101.     # 过程结束
  1102.     return result
  1103.   end
  1104.   #--------------------------------------------------------------------------
  1105.   # ● 获取属性有效度
  1106.   #--------------------------------------------------------------------------
  1107.   def state_ranks
  1108.     return $data_classes[@class_id].state_ranks
  1109.   end
  1110.   #--------------------------------------------------------------------------
  1111.   # ● 判定防御属性
  1112.   #     state_id : 属性 ID
  1113.   #--------------------------------------------------------------------------
  1114.   def state_guard?(state_id)
  1115.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  1116.       armor = $data_armors
  1117.       if armor != nil
  1118.         if armor.guard_state_set.include?(state_id)
  1119.           return true
  1120.         end
  1121.       end
  1122.     end
  1123.     return false
  1124.   end
  1125.   #--------------------------------------------------------------------------
  1126.   # ● 获取普通攻击属性
  1127.   #--------------------------------------------------------------------------
  1128.   def element_set
  1129.     weapon = $data_weapons[@weapon_id]
  1130.     return weapon != nil ? weapon.element_set : []
  1131.   end
  1132.   #--------------------------------------------------------------------------
  1133.   # ● 获取普通攻击状态变化 (+)
  1134.   #--------------------------------------------------------------------------
  1135.   def plus_state_set
  1136.     weapon = $data_weapons[@weapon_id]
  1137.     return weapon != nil ? weapon.plus_state_set : []
  1138.   end
  1139.   #--------------------------------------------------------------------------
  1140.   # ● 获取普通攻击状态变化 (-)
  1141.   #--------------------------------------------------------------------------
  1142.   def minus_state_set
  1143.     weapon = $data_weapons[@weapon_id]
  1144.     return weapon != nil ? weapon.minus_state_set : []
  1145.   end
  1146.   #--------------------------------------------------------------------------
  1147.   # ● 获取 MaxHP
  1148.   #--------------------------------------------------------------------------
  1149.   def maxhp
  1150.     n = [[base_maxhp + @maxhp_plus, 1].max, 9999].min
  1151.     for i in @states
  1152.       n *= $data_states.maxhp_rate / 100.0
  1153.     end
  1154.     n = [[Integer(n), 1].max, 9999].min
  1155.     return n
  1156.   end
  1157.   #--------------------------------------------------------------------------
  1158.   # ● 获取基本 MaxHP
  1159.   #--------------------------------------------------------------------------
  1160.   def base_maxhp
  1161.     return $data_actors[@actor_id].parameters[0, @level]
  1162.   end
  1163.   #--------------------------------------------------------------------------
  1164.   # ● 获取基本 MaxSP
  1165.   #--------------------------------------------------------------------------
  1166.   def base_maxsp
  1167.     return $data_actors[@actor_id].parameters[1, @level]
  1168.   end
  1169.   #--------------------------------------------------------------------------
  1170.   # ● 获取基本力量
  1171.   #--------------------------------------------------------------------------
  1172.   def base_str
  1173.     n = $data_actors[@actor_id].parameters[2, @level]
  1174.     weapon = $data_weapons[@weapon_id]
  1175.     armor1 = $data_armors[@armor1_id]
  1176.     armor2 = $data_armors[@armor2_id]
  1177.     armor3 = $data_armors[@armor3_id]
  1178.     armor4 = $data_armors[@armor4_id]
  1179.     n += weapon != nil ? weapon.str_plus : 0
  1180.     n += armor1 != nil ? armor1.str_plus : 0
  1181.     n += armor2 != nil ? armor2.str_plus : 0
  1182.     n += armor3 != nil ? armor3.str_plus : 0
  1183.     n += armor4 != nil ? armor4.str_plus : 0
  1184.     return [[n, 1].max, 999].min
  1185.   end
  1186.   #--------------------------------------------------------------------------
  1187.   # ● 获取基本灵巧
  1188.   #--------------------------------------------------------------------------
  1189.   def base_dex
  1190.     n = $data_actors[@actor_id].parameters[3, @level]
  1191.     weapon = $data_weapons[@weapon_id]
  1192.     armor1 = $data_armors[@armor1_id]
  1193.     armor2 = $data_armors[@armor2_id]
  1194.     armor3 = $data_armors[@armor3_id]
  1195.     armor4 = $data_armors[@armor4_id]
  1196.     n += weapon != nil ? weapon.dex_plus : 0
  1197.     n += armor1 != nil ? armor1.dex_plus : 0
  1198.     n += armor2 != nil ? armor2.dex_plus : 0
  1199.     n += armor3 != nil ? armor3.dex_plus : 0
  1200.     n += armor4 != nil ? armor4.dex_plus : 0
  1201.     return [[n, 1].max, 999].min
  1202.   end
  1203.   #--------------------------------------------------------------------------
  1204.   # ● 获取基本速度
  1205.   #--------------------------------------------------------------------------
  1206.   def base_agi
  1207.     n = $data_actors[@actor_id].parameters[4, @level]
  1208.     weapon = $data_weapons[@weapon_id]
  1209.     armor1 = $data_armors[@armor1_id]
  1210.     armor2 = $data_armors[@armor2_id]
  1211.     armor3 = $data_armors[@armor3_id]
  1212.     armor4 = $data_armors[@armor4_id]
  1213.     n += weapon != nil ? weapon.agi_plus : 0
  1214.     n += armor1 != nil ? armor1.agi_plus : 0
  1215.     n += armor2 != nil ? armor2.agi_plus : 0
  1216.     n += armor3 != nil ? armor3.agi_plus : 0
  1217.     n += armor4 != nil ? armor4.agi_plus : 0
  1218.     return [[n, 1].max, 999].min
  1219.   end
  1220.   #--------------------------------------------------------------------------
  1221.   # ● 获取基本魔力
  1222.   #--------------------------------------------------------------------------
  1223.   def base_int
  1224.     n = $data_actors[@actor_id].parameters[5, @level]
  1225.     weapon = $data_weapons[@weapon_id]
  1226.     armor1 = $data_armors[@armor1_id]
  1227.     armor2 = $data_armors[@armor2_id]
  1228.     armor3 = $data_armors[@armor3_id]
  1229.     armor4 = $data_armors[@armor4_id]
  1230.     n += weapon != nil ? weapon.int_plus : 0
  1231.     n += armor1 != nil ? armor1.int_plus : 0
  1232.     n += armor2 != nil ? armor2.int_plus : 0
  1233.     n += armor3 != nil ? armor3.int_plus : 0
  1234.     n += armor4 != nil ? armor4.int_plus : 0
  1235.     return [[n, 1].max, 999].min
  1236.   end
  1237.   #--------------------------------------------------------------------------
  1238.   # ● 获取基本攻击力
  1239.   #--------------------------------------------------------------------------
  1240.   def base_atk
  1241.     weapon = $data_weapons[@weapon_id]
  1242.     return weapon != nil ? weapon.atk : rand(60)
  1243.   end
  1244.   #--------------------------------------------------------------------------
  1245.   # ● 获取基本物理防御
  1246.   #--------------------------------------------------------------------------
  1247.   def base_pdef
  1248.     weapon = $data_weapons[@weapon_id]
  1249.     armor1 = $data_armors[@armor1_id]
  1250.     armor2 = $data_armors[@armor2_id]
  1251.     armor3 = $data_armors[@armor3_id]
  1252.     armor4 = $data_armors[@armor4_id]
  1253.     pdef1 = weapon != nil ? weapon.pdef : 0
  1254.     pdef2 = armor1 != nil ? armor1.pdef : 0
  1255.     pdef3 = armor2 != nil ? armor2.pdef : 0
  1256.     pdef4 = armor3 != nil ? armor3.pdef : 0
  1257.     pdef5 = armor4 != nil ? armor4.pdef : 0
  1258.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + 5
  1259.   end
  1260.   #--------------------------------------------------------------------------
  1261.   # ● 获取基本魔法防御
  1262.   #--------------------------------------------------------------------------
  1263.   def base_mdef
  1264.     weapon = $data_weapons[@weapon_id]
  1265.     armor1 = $data_armors[@armor1_id]
  1266.     armor2 = $data_armors[@armor2_id]
  1267.     armor3 = $data_armors[@armor3_id]
  1268.     armor4 = $data_armors[@armor4_id]
  1269.     mdef1 = weapon != nil ? weapon.mdef : 0
  1270.     mdef2 = armor1 != nil ? armor1.mdef : 0
  1271.     mdef3 = armor2 != nil ? armor2.mdef : 0
  1272.     mdef4 = armor3 != nil ? armor3.mdef : 0
  1273.     mdef5 = armor4 != nil ? armor4.mdef : 0
  1274.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
  1275.   end
  1276.   #--------------------------------------------------------------------------
  1277.   # ● 获取基本回避修正
  1278.   #--------------------------------------------------------------------------
  1279.   def base_eva
  1280.     armor1 = $data_armors[@armor1_id]
  1281.     armor2 = $data_armors[@armor2_id]
  1282.     armor3 = $data_armors[@armor3_id]
  1283.     armor4 = $data_armors[@armor4_id]
  1284.     eva1 = armor1 != nil ? armor1.eva : 0
  1285.     eva2 = armor2 != nil ? armor2.eva : 0
  1286.     eva3 = armor3 != nil ? armor3.eva : 0
  1287.     eva4 = armor4 != nil ? armor4.eva : 0
  1288.     return eva1 + eva2 + eva3 + eva4
  1289.   end
  1290.   #--------------------------------------------------------------------------
  1291.   # ● 普通攻击 获取攻击方动画 ID
  1292.   #--------------------------------------------------------------------------
  1293.   def animation1_id
  1294.     weapon = $data_weapons[@weapon_id]
  1295.     return weapon != nil ? weapon.animation1_id : 1
  1296.   end
  1297.   #--------------------------------------------------------------------------
  1298.   # ● 普通攻击 获取对像方动画 ID
  1299.   #--------------------------------------------------------------------------
  1300.   def animation2_id
  1301.     weapon = $data_weapons[@weapon_id]
  1302.     return weapon != nil ? weapon.animation2_id : 2
  1303.   end
  1304.   #--------------------------------------------------------------------------
  1305.   # ● 获取类名
  1306.   #--------------------------------------------------------------------------
  1307.   def class_name
  1308.     return $data_classes[@class_id].name
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # ● 获取 EXP 字符串
  1312.   #--------------------------------------------------------------------------
  1313.   def exp_s
  1314.     return @exp_list[@level+1] > 0 ? @exp.to_s : "-------"
  1315.   end
  1316.   #--------------------------------------------------------------------------
  1317.   # ● 获取下一等级的 EXP 字符串
  1318.   #--------------------------------------------------------------------------
  1319.   def next_exp_s
  1320.     return @exp_list[@level+1] > 0 ? @exp_list[@level+1].to_s : "-------"
  1321.   end
  1322.   #--------------------------------------------------------------------------
  1323.   # ● 获取离下一等级还需的 EXP 字符串
  1324.   #--------------------------------------------------------------------------
  1325.   def next_rest_exp_s
  1326.     return @exp_list[@level+1] > 0 ?
  1327.       (@exp_list[@level+1] - @exp).to_s : "-------"
  1328.   end
  1329.   #--------------------------------------------------------------------------
  1330.   # ● 更新自动状态
  1331.   #     old_armor : 卸下防具
  1332.   #     new_armor : 装备防具
  1333.   #--------------------------------------------------------------------------
  1334.   def update_auto_state(old_armor, new_armor)
  1335.     # 强制解除卸下防具的自动状态
  1336.     if old_armor != nil and old_armor.auto_state_id != 0
  1337.       remove_state(old_armor.auto_state_id, true)
  1338.     end
  1339.     # 强制附加装备防具的自动状态
  1340.     if new_armor != nil and new_armor.auto_state_id != 0
  1341.       add_state(new_armor.auto_state_id, true)
  1342.     end
  1343.   end
  1344.   #--------------------------------------------------------------------------
  1345.   # ● 装备固定判定
  1346.   #     equip_type : 装备类型
  1347.   #--------------------------------------------------------------------------
  1348.   def equip_fix?(equip_type)
  1349.     case equip_type
  1350.     when 0  # 武器
  1351.       return $data_actors[@actor_id].weapon_fix
  1352.     when 1  # 盾
  1353.       return $data_actors[@actor_id].armor1_fix
  1354.     when 2  # 头
  1355.       return $data_actors[@actor_id].armor2_fix
  1356.     when 3  # 身体
  1357.       return $data_actors[@actor_id].armor3_fix
  1358.     when 4  # 装饰品
  1359.       return $data_actors[@actor_id].armor4_fix
  1360.     end
  1361.     return false
  1362.   end
  1363.   #--------------------------------------------------------------------------
  1364.   # ● 变更装备
  1365.   #     equip_type : 装备类型
  1366.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  1367.   #--------------------------------------------------------------------------
  1368.   def equip(equip_type, id)
  1369.     case equip_type
  1370.     when 0  # 武器
  1371.       if id == 0 or $game_party.weapon_number(id) > 0
  1372.         $game_party.gain_weapon(@weapon_id, 1)
  1373.         @weapon_id = id
  1374.         $game_party.lose_weapon(id, 1)
  1375.       end
  1376.     when 1  # 盾
  1377.       if id == 0 or $game_party.armor_number(id) > 0
  1378.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  1379.         $game_party.gain_armor(@armor1_id, 1)
  1380.         @armor1_id = id
  1381.         $game_party.lose_armor(id, 1)
  1382.       end
  1383.     when 2  # 头
  1384.       if id == 0 or $game_party.armor_number(id) > 0
  1385.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  1386.         $game_party.gain_armor(@armor2_id, 1)
  1387.         @armor2_id = id
  1388.         $game_party.lose_armor(id, 1)
  1389.       end
  1390.     when 3  # 身体
  1391.       if id == 0 or $game_party.armor_number(id) > 0
  1392.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  1393.         $game_party.gain_armor(@armor3_id, 1)
  1394.         @armor3_id = id
  1395.         $game_party.lose_armor(id, 1)
  1396.       end
  1397.     when 4  # 装饰品
  1398.       if id == 0 or $game_party.armor_number(id) > 0
  1399.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  1400.         $game_party.gain_armor(@armor4_id, 1)
  1401.         @armor4_id = id
  1402.         $game_party.lose_armor(id, 1)
  1403.       end
  1404.     end
  1405.   end
  1406.   #--------------------------------------------------------------------------
  1407.   # ● 可以装备判定
  1408.   #     item : 物品
  1409.   #--------------------------------------------------------------------------
  1410.   def equippable?(item)
  1411.     # 武器的情况
  1412.     if item.is_a?(RPG::Weapon)
  1413.       # 包含当前的职业可以装备武器的场合
  1414.       if $data_classes[@class_id].weapon_set.include?(item.id)
  1415.         return true
  1416.       end
  1417.     end
  1418.     # 防具的情况
  1419.     if item.is_a?(RPG::Armor)
  1420.       # 不包含当前的职业可以装备武器的场合
  1421.       if $data_classes[@class_id].armor_set.include?(item.id)
  1422.         return true
  1423.       end
  1424.     end
  1425.     return false
  1426.   end
  1427.   #--------------------------------------------------------------------------
  1428.   # ● 更改 EXP
  1429.   #     exp : 新的 EXP
  1430.   #--------------------------------------------------------------------------
  1431.   def exp=(exp)
  1432.     @exp = [[exp, 9999999].min, 0].max
  1433.     # 升级
  1434.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  1435.       @level += 1
  1436.       # 学会特技
  1437.       for j in $data_classes[@class_id].learnings
  1438.         if j.level == @level
  1439.           learn_skill(j.skill_id)
  1440.         end
  1441.       end
  1442.     end
  1443.     # 降级
  1444.     while @exp < @exp_list[@level]
  1445.       @level -= 1
  1446.     end
  1447.     # 修正当前的 HP 与 SP 超过最大值
  1448.     @hp = [@hp, self.maxhp].min
  1449.     @sp = [@sp, self.maxsp].min
  1450.   end
  1451.   #--------------------------------------------------------------------------
  1452.   # ● 更改等级
  1453.   #     level : 新的等级
  1454.   #--------------------------------------------------------------------------
  1455.   def level=(level)
  1456.     # 检查上下限
  1457.     level = [[level, $data_actors[@actor_id].final_level].min, 1].max
  1458.     # 更改 EXP
  1459.     self.exp = @exp_list[level]
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 觉悟特技
  1463.   #     skill_id : 特技 ID
  1464.   #--------------------------------------------------------------------------
  1465.   def learn_skill(skill_id)
  1466.     if skill_id > 0 and not skill_learn?(skill_id)
  1467.       @skills.push(skill_id)
  1468.       @skills.sort!
  1469.     end
  1470.   end
  1471.   #--------------------------------------------------------------------------
  1472.   # ● 遗忘特技
  1473.   #     skill_id : 特技 ID
  1474.   #--------------------------------------------------------------------------
  1475.   def forget_skill(skill_id)
  1476.     @skills.delete(skill_id)
  1477.   end
  1478.   #--------------------------------------------------------------------------
  1479.   # ● 已经学会的特技判定
  1480.   #     skill_id : 特技 ID
  1481.   #--------------------------------------------------------------------------
  1482.   def skill_learn?(skill_id)
  1483.     return @skills.include?(skill_id)
  1484.   end
  1485.   #--------------------------------------------------------------------------
  1486.   # ● 可以使用特技判定
  1487.   #     skill_id : 特技 ID
  1488.   #--------------------------------------------------------------------------
  1489.   def skill_can_use?(skill_id)
  1490.     if not skill_learn?(skill_id)
  1491.       return false
  1492.     end
  1493.     return super
  1494.   end
  1495.   #--------------------------------------------------------------------------
  1496.   # ● 更改名称
  1497.   #     name : 新的名称
  1498.   #--------------------------------------------------------------------------
  1499.   def name=(name)
  1500.     @name = name
  1501.   end
  1502.   #--------------------------------------------------------------------------
  1503.   # ● 更改职业 ID
  1504.   #     class_id : 新的职业 ID
  1505.   #--------------------------------------------------------------------------
  1506.   def class_id=(class_id)
  1507.     if $data_classes[class_id] != nil
  1508.       @class_id = class_id
  1509.       # 避开无法装备的物品
  1510.       unless equippable?($data_weapons[@weapon_id])
  1511.         equip(0, 0)
  1512.       end
  1513.       unless equippable?($data_armors[@armor1_id])
  1514.         equip(1, 0)
  1515.       end
  1516.       unless equippable?($data_armors[@armor2_id])
  1517.         equip(2, 0)
  1518.       end
  1519.       unless equippable?($data_armors[@armor3_id])
  1520.         equip(3, 0)
  1521.       end
  1522.       unless equippable?($data_armors[@armor4_id])
  1523.         equip(4, 0)
  1524.       end
  1525.     end
  1526.   end
  1527.   #--------------------------------------------------------------------------
  1528.   # ● 更改图形
  1529.   #     character_name : 新的角色 文件名
  1530.   #     character_hue  : 新的角色 色相
  1531.   #     battler_name   : 新的战斗者 文件名
  1532.   #     battler_hue    : 新的战斗者 色相
  1533.   #--------------------------------------------------------------------------
  1534.   def set_graphic(character_name, character_hue, battler_name, battler_hue)
  1535.     @character_name = character_name
  1536.     @character_hue = character_hue
  1537.     @battler_name = battler_name
  1538.     @battler_hue = battler_hue
  1539.   end
  1540.   #--------------------------------------------------------------------------
  1541.   # ● 取得战斗画面的 X 坐标
  1542.   #--------------------------------------------------------------------------
  1543.   def screen_x
  1544.     # 返回计算后的队伍 X 坐标的排列顺序
  1545.     if self.index != nil
  1546.       return self.index * 160 + 80
  1547.     else
  1548.       return 0
  1549.     end
  1550.   end
  1551.   #--------------------------------------------------------------------------
  1552.   # ● 取得战斗画面的 Y 坐标
  1553.   #--------------------------------------------------------------------------
  1554.   def screen_y

  1555.     return 480 - rand(5)


  1556.   end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 取得战斗画面的 Z 坐标
  1559.   #--------------------------------------------------------------------------
  1560.   def screen_z
  1561.     # 返回计算后的队伍 Z 坐标的排列顺序
  1562.     if self.index != nil
  1563.       return 8 - self.index
  1564.     else
  1565.       return 0
  1566.     end
  1567.   end
  1568. end
  1569. #==============================================================================
  1570. # ■ Game_Enemy
  1571. #------------------------------------------------------------------------------
  1572. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
  1573. # 内部使用。
  1574. #==============================================================================

  1575. class Game_Enemy < Game_Battler
  1576.   #--------------------------------------------------------------------------
  1577.   # ● 初始化对像
  1578.   #     troop_id     : 循环 ID
  1579.   #     member_index : 循环成员的索引
  1580.   #--------------------------------------------------------------------------
  1581.   def initialize(troop_id, member_index)
  1582.     super()
  1583.     @troop_id = troop_id
  1584.     @member_index = member_index
  1585.     troop = $data_troops[@troop_id]
  1586.     @enemy_id = troop.members[@member_index].enemy_id
  1587.     enemy = $data_enemies[@enemy_id]
  1588.     @battler_name = enemy.battler_name
  1589.     @battler_hue = enemy.battler_hue
  1590.     @hp = maxhp
  1591.     @sp = maxsp
  1592.     @hidden = troop.members[@member_index].hidden
  1593.     @immortal = troop.members[@member_index].immortal
  1594.   end
  1595.   #--------------------------------------------------------------------------
  1596.   # ● 获取敌人 ID
  1597.   #--------------------------------------------------------------------------
  1598.   def id
  1599.     return @enemy_id
  1600.   end
  1601.   #--------------------------------------------------------------------------
  1602.   # ● 获取索引
  1603.   #--------------------------------------------------------------------------
  1604.   def index
  1605.     return @member_index
  1606.   end
  1607.   #--------------------------------------------------------------------------
  1608.   # ● 获取名称
  1609.   #--------------------------------------------------------------------------
  1610.   def name
  1611.     return $data_enemies[@enemy_id].name
  1612.   end
  1613.   #--------------------------------------------------------------------------
  1614.   # ● 获取基本 MaxHP
  1615.   #--------------------------------------------------------------------------
  1616.   def base_maxhp
  1617.     return $data_enemies[@enemy_id].maxhp
  1618.   end
  1619.   #--------------------------------------------------------------------------
  1620.   # ● 获取基本 MaxSP
  1621.   #--------------------------------------------------------------------------
  1622.   def base_maxsp
  1623.     return $data_enemies[@enemy_id].maxsp
  1624.   end
  1625.   #--------------------------------------------------------------------------
  1626.   # ● 获取基本力量
  1627.   #--------------------------------------------------------------------------
  1628.   def base_str
  1629.     return $data_enemies[@enemy_id].str
  1630.   end
  1631.   #--------------------------------------------------------------------------
  1632.   # ● 获取基本灵巧
  1633.   #--------------------------------------------------------------------------
  1634.   def base_dex
  1635.     return $data_enemies[@enemy_id].dex
  1636.   end
  1637.   #--------------------------------------------------------------------------
  1638.   # ● 获取基本速度
  1639.   #--------------------------------------------------------------------------
  1640.   def base_agi
  1641.     return $data_enemies[@enemy_id].agi
  1642.   end
  1643.   #--------------------------------------------------------------------------
  1644.   # ● 获取基本魔力
  1645.   #--------------------------------------------------------------------------
  1646.   def base_int
  1647.     return $data_enemies[@enemy_id].int
  1648.   end
  1649.   #--------------------------------------------------------------------------
  1650.   # ● 获取基本攻击力
  1651.   #--------------------------------------------------------------------------
  1652.   def base_atk
  1653.     return $data_enemies[@enemy_id].atk
  1654.   end
  1655.   #--------------------------------------------------------------------------
  1656.   # ● 获取基本物理防御
  1657.   #--------------------------------------------------------------------------
  1658.   def base_pdef
  1659.     return $data_enemies[@enemy_id].pdef
  1660.   end
  1661.   #--------------------------------------------------------------------------
  1662.   # ● 获取基本魔法防御
  1663.   #--------------------------------------------------------------------------
  1664.   def base_mdef
  1665.     return $data_enemies[@enemy_id].mdef
  1666.   end
  1667.   #--------------------------------------------------------------------------
  1668.   # ● 获取基本回避修正
  1669.   #--------------------------------------------------------------------------
  1670.   def base_eva
  1671.     return $data_enemies[@enemy_id].eva
  1672.   end
  1673.   #--------------------------------------------------------------------------
  1674.   # ● 普通攻击 获取攻击方动画 ID
  1675.   #--------------------------------------------------------------------------
  1676.   def animation1_id
  1677.     return $data_enemies[@enemy_id].animation1_id
  1678.   end
  1679.   #--------------------------------------------------------------------------
  1680.   # ● 普通攻击 获取对像方动画 ID
  1681.   #--------------------------------------------------------------------------
  1682.   def animation2_id
  1683.     return $data_enemies[@enemy_id].animation2_id
  1684.   end
  1685.   #--------------------------------------------------------------------------
  1686.   # ● 获取属性修正值
  1687.   #     element_id : 属性 ID
  1688.   #--------------------------------------------------------------------------
  1689.   def element_rate(element_id)
  1690.     # 获取对应属性有效度的数值
  1691.     table = [0,200,150,100,50,0,-100]
  1692.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  1693.     # 状态能防御本属性的情况下效果减半
  1694.     for i in @states
  1695.       if $data_states.guard_element_set.include?(element_id)
  1696.         result /= 2
  1697.       end
  1698.     end
  1699.     # 过程结束
  1700.     return result
  1701.   end
  1702.   #--------------------------------------------------------------------------
  1703.   # ● 获取属性有效度
  1704.   #--------------------------------------------------------------------------
  1705.   def state_ranks
  1706.     return $data_enemies[@enemy_id].state_ranks
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ● 属性防御判定
  1710.   #     state_id : 状态 ID
  1711.   #--------------------------------------------------------------------------
  1712.   def state_guard?(state_id)
  1713.     return false
  1714.   end
  1715.   #--------------------------------------------------------------------------
  1716.   # ● 获取普通攻击属性
  1717.   #--------------------------------------------------------------------------
  1718.   def element_set
  1719.     return []
  1720.   end
  1721.   #--------------------------------------------------------------------------
  1722.   # ● 获取普通攻击的状态变化 (+)
  1723.   #--------------------------------------------------------------------------
  1724.   def plus_state_set
  1725.     return []
  1726.   end
  1727.   #--------------------------------------------------------------------------
  1728.   # ● 获取普通攻击的状态变化 (-)
  1729.   #--------------------------------------------------------------------------
  1730.   def minus_state_set
  1731.     return []
  1732.   end
  1733.   #--------------------------------------------------------------------------
  1734.   # ● 获取行动
  1735.   #--------------------------------------------------------------------------
  1736.   def actions
  1737.     return $data_enemies[@enemy_id].actions
  1738.   end
  1739.   #--------------------------------------------------------------------------
  1740.   # ● 获取 EXP
  1741.   #--------------------------------------------------------------------------
  1742.   def exp
  1743.     return rand($data_enemies[@enemy_id].exp) + 1
  1744.   end
  1745.   #--------------------------------------------------------------------------
  1746.   # ● 获取金钱
  1747.   #--------------------------------------------------------------------------
  1748.   def gold
  1749.     return rand($data_enemies[@enemy_id].gold) + 1
  1750.   end
  1751.   #--------------------------------------------------------------------------
  1752.   # ● 获取物品 ID
  1753.   #--------------------------------------------------------------------------
  1754.   def item_id
  1755.     return $data_enemies[@enemy_id].item_id
  1756.   end
  1757.   #--------------------------------------------------------------------------
  1758.   # ● 获取武器 ID
  1759.   #--------------------------------------------------------------------------
  1760.   def weapon_id
  1761.     return $data_enemies[@enemy_id].weapon_id
  1762.   end
  1763.   #--------------------------------------------------------------------------
  1764.   # ● 获取防具 ID
  1765.   #--------------------------------------------------------------------------
  1766.   def armor_id
  1767.     return $data_enemies[@enemy_id].armor_id
  1768.   end
  1769.   #--------------------------------------------------------------------------
  1770.   # ● 获取宝物出现率
  1771.   #--------------------------------------------------------------------------
  1772.   def treasure_prob
  1773.     return $data_enemies[@enemy_id].treasure_prob
  1774.   end
  1775.   #--------------------------------------------------------------------------
  1776.   # ● 取得战斗画面 X 坐标
  1777.   #--------------------------------------------------------------------------
  1778.   def screen_x
  1779.     return $data_troops[@troop_id].members[@member_index].x
  1780.   end
  1781.   #--------------------------------------------------------------------------
  1782.   # ● 取得战斗画面 Y 坐标
  1783.   #--------------------------------------------------------------------------
  1784.   def screen_y
  1785.     return $data_troops[@troop_id].members[@member_index].y + rand(5)
  1786.   end
  1787.   #--------------------------------------------------------------------------
  1788.   # ● 取得战斗画面 Z 坐标
  1789.   #--------------------------------------------------------------------------
  1790.   def screen_z
  1791.     return screen_y
  1792.   end
  1793.   #--------------------------------------------------------------------------
  1794.   # ● 逃跑
  1795.   #--------------------------------------------------------------------------
  1796.   def escape
  1797.     # 设置隐藏标志
  1798.     @hidden = true
  1799.     # 清除当前行动
  1800.     self.current_action.clear
  1801.   end
  1802.   #--------------------------------------------------------------------------
  1803.   # ● 变身
  1804.   #     enemy_id : 变身为的敌人 ID
  1805.   #--------------------------------------------------------------------------
  1806.   def transform(enemy_id)
  1807.     # 更改敌人 ID
  1808.     @enemy_id = enemy_id
  1809.     # 更改战斗图形
  1810.     @battler_name = $data_enemies[@enemy_id].battler_name
  1811.     @battler_hue = $data_enemies[@enemy_id].battler_hue
  1812.     # 再生成行动
  1813.     make_action
  1814.   end
  1815.   #--------------------------------------------------------------------------
  1816.   # ● 生成行动
  1817.   #--------------------------------------------------------------------------
  1818.   def make_action
  1819.     # 清除当前行动
  1820.     self.current_action.clear
  1821.     # 无法行动的情况
  1822.     unless self.movable?
  1823.       # 过程结束
  1824.       return
  1825.     end
  1826.     # 抽取现在有效的行动
  1827.     available_actions = []
  1828.     rating_max = 0
  1829.     for action in self.actions
  1830.       # 确认回合条件
  1831.       n = $game_temp.battle_turn
  1832.       a = action.condition_turn_a
  1833.       b = action.condition_turn_b
  1834.       if (b == 0 and n != a) or
  1835.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  1836.         next
  1837.       end
  1838.       # 确认 HP 条件
  1839.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  1840.         next
  1841.       end
  1842.       # 确认等级条件
  1843.       if $game_party.max_level < action.condition_level
  1844.         next
  1845.       end
  1846.       # 确认开关条件
  1847.       switch_id = action.condition_switch_id
  1848.       if switch_id > 0 and $game_switches[switch_id] == false
  1849.         next
  1850.       end
  1851.       # 符合条件 : 添加本行动
  1852.       available_actions.push(action)
  1853.       if action.rating > rating_max
  1854.         rating_max = action.rating
  1855.       end
  1856.     end
  1857.     # 最大概率值作为 3 合计计算(0 除外)
  1858.     ratings_total = 0
  1859.     for action in available_actions
  1860.       if action.rating > rating_max - 3
  1861.         ratings_total += action.rating - (rating_max - 3)
  1862.       end
  1863.     end
  1864.     # 概率合计不为 0 的情况下
  1865.     if ratings_total > 0
  1866.       # 生成随机数
  1867.       value = rand(ratings_total)
  1868.       # 设置对应生成随机数的当前行动
  1869.       for action in available_actions
  1870.         if action.rating > rating_max - 3
  1871.           if value < action.rating - (rating_max - 3)
  1872.             self.current_action.kind = action.kind
  1873.             self.current_action.basic = action.basic
  1874.             self.current_action.skill_id = action.skill_id
  1875.             self.current_action.decide_random_target_for_enemy
  1876.             return
  1877.           else
  1878.             value -= action.rating - (rating_max - 3)
  1879.           end
  1880.         end
  1881.       end
  1882.     end
  1883.   end
  1884. end
  1885. #==============================================================================
  1886. # ■ Game_Party
  1887. #------------------------------------------------------------------------------
  1888. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  1889. # 请参考 $game_party。
  1890. #==============================================================================

  1891. class Game_Party
  1892.   #--------------------------------------------------------------------------
  1893.   # ● 定义实例变量
  1894.   #--------------------------------------------------------------------------
  1895.   attr_reader   :actors                   # 角色
  1896.   attr_reader   :gold                     # 金钱
  1897.   attr_reader   :steps                    # 步数
  1898.   #--------------------------------------------------------------------------
  1899.   # ● 初始化对像
  1900.   #--------------------------------------------------------------------------
  1901.   def initialize
  1902.     # 建立角色序列
  1903.     @actors = []
  1904.     # 初始化金钱与步数
  1905.     @gold = rand(2000) + 1
  1906.     @steps = 0
  1907.     # 生成物品、武器、防具的所持数 hash
  1908.     @items = {}
  1909.     @weapons = {}
  1910.     @armors = {}
  1911.   end
  1912.   #--------------------------------------------------------------------------
  1913.   # ● 设置初期同伴
  1914.   #--------------------------------------------------------------------------
  1915.   def setup_starting_members
  1916.     @actors = []
  1917.     for i in $data_system.party_members
  1918.       @actors.push($game_actors)
  1919.     end
  1920.   end
  1921.   #--------------------------------------------------------------------------
  1922.   # ● 设置战斗测试用同伴
  1923.   #--------------------------------------------------------------------------
  1924.   def setup_battle_test_members
  1925.     @actors = []
  1926.     for battler in $data_system.test_battlers
  1927.       actor = $game_actors[battler.actor_id]
  1928.       actor.level = battler.level
  1929.       gain_weapon(battler.weapon_id, 1)
  1930.       gain_armor(battler.armor1_id, 1)
  1931.       gain_armor(battler.armor2_id, 1)
  1932.       gain_armor(battler.armor3_id, 1)
  1933.       gain_armor(battler.armor4_id, 1)
  1934.       actor.equip(0, battler.weapon_id)
  1935.       actor.equip(1, battler.armor1_id)
  1936.       actor.equip(2, battler.armor2_id)
  1937.       actor.equip(3, battler.armor3_id)
  1938.       actor.equip(4, battler.armor4_id)
  1939.       actor.recover_all
  1940.       @actors.push(actor)
  1941.     end
  1942.     @items = {}
  1943.     for i in 1...$data_items.size
  1944.       if $data_items.name != ""
  1945.         occasion = $data_items.occasion
  1946.         if occasion == 0 or occasion == 1
  1947.           @items = 99
  1948.         end
  1949.       end
  1950.     end
  1951.   end
  1952.   #--------------------------------------------------------------------------
  1953.   # ● 同伴成员的还原
  1954.   #--------------------------------------------------------------------------
  1955.   def refresh
  1956.     # 游戏数据载入后角色对像直接从 $game_actors
  1957.     # 分离。
  1958.     # 回避由于载入造成的角色再设置的问题。
  1959.     new_actors = []
  1960.     for i in [email protected]
  1961.       if $data_actors[@actors.id] != nil
  1962.         new_actors.push($game_actors[@actors.id])
  1963.       end
  1964.     end
  1965.     @actors = new_actors
  1966.   end
  1967.   #--------------------------------------------------------------------------
  1968.   # ● 获取最大等级
  1969.   #--------------------------------------------------------------------------
  1970.   def max_level
  1971.     # 同伴人数为 0 的情况下
  1972.     if @actors.size == 0
  1973.       return 0
  1974.     end
  1975.     # 初始化本地变量 level
  1976.     level = 0
  1977.     # 求得同伴的最大等级
  1978.     for actor in @actors
  1979.       if level < actor.level
  1980.         level = actor.level
  1981.       end
  1982.     end
  1983.     return level
  1984.   end
  1985.   #--------------------------------------------------------------------------
  1986.   # ● 加入同伴
  1987.   #     actor_id : 角色 ID
  1988.   #--------------------------------------------------------------------------
  1989.   def add_actor(actor_id)
  1990.     # 获取角色
  1991.     actor = $game_actors[actor_id]
  1992.     # 同伴人数未满 4 人、本角色不在队伍中的情况下
  1993.     if @actors.size < 4 and not @actors.include?(actor)
  1994.       # 添加角色
  1995.       @actors.push(actor)
  1996.       # 还原主角
  1997.       $game_player.refresh
  1998.     end
  1999.   end
  2000.   #--------------------------------------------------------------------------
  2001.   # ● 角色离开
  2002.   #     actor_id : 角色 ID
  2003.   #--------------------------------------------------------------------------
  2004.   def remove_actor(actor_id)
  2005.     # 删除角色
  2006.     @actors.delete($game_actors[actor_id])
  2007.     # 还原主角
  2008.     $game_player.refresh
  2009.   end
  2010.   #--------------------------------------------------------------------------
  2011.   # ● 增加金钱 (减少)
  2012.   #     n : 金额
  2013.   #--------------------------------------------------------------------------
  2014.   def gain_gold(n)
  2015.     @gold = [[@gold + n, 0].max, 9999999].min
  2016.   end
  2017.   #--------------------------------------------------------------------------
  2018.   # ● 减少金钱
  2019.   #     n : 金额
  2020.   #--------------------------------------------------------------------------
  2021.   def lose_gold(n)
  2022.     # 调用数值逆转 gain_gold
  2023.     gain_gold(-n)
  2024.   end
  2025.   #--------------------------------------------------------------------------
  2026.   # ● 增加步数
  2027.   #--------------------------------------------------------------------------
  2028.   def increase_steps
  2029.     @steps = [@steps + 1, 9999999].min
  2030.   end
  2031.   #--------------------------------------------------------------------------
  2032.   # ● 获取物品的所持数
  2033.   #     item_id : 物品 ID
  2034.   #--------------------------------------------------------------------------
  2035.   def item_number(item_id)
  2036.     # 如果 hash 个数数值不存在就返回 0
  2037.     return @items.include?(item_id) ? @items[item_id] : 0
  2038.   end
  2039.   #--------------------------------------------------------------------------
  2040.   # ● 获取武器所持数
  2041.   #     weapon_id : 武器 ID
  2042.   #--------------------------------------------------------------------------
  2043.   def weapon_number(weapon_id)
  2044.     # 如果 hash 个数数值不存在就返回 0
  2045.     return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
  2046.   end
  2047.   #--------------------------------------------------------------------------
  2048.   # ● 获取防具所持数
  2049.   #     armor_id : 防具 ID
  2050.   #--------------------------------------------------------------------------
  2051.   def armor_number(armor_id)
  2052.     # 如果 hash 个数数值不存在就返回 0
  2053.     return @armors.include?(armor_id) ? @armors[armor_id] : 0
  2054.   end
  2055.   #--------------------------------------------------------------------------
  2056.   # ● 增加物品 (减少)
  2057.   #     item_id : 物品 ID
  2058.   #     n       : 个数
  2059.   #--------------------------------------------------------------------------
  2060.   def gain_item(item_id, n)
  2061.     # 更新 hash 的个数数据
  2062.     if item_id > 0
  2063.       @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
  2064.     end
  2065.   end
  2066.   #--------------------------------------------------------------------------
  2067.   # ● 增加武器 (减少)
  2068.   #     weapon_id : 武器 ID
  2069.   #     n         : 个数
  2070.   #--------------------------------------------------------------------------
  2071.   def gain_weapon(weapon_id, n)
  2072.     # 更新 hash 的个数数据
  2073.     if weapon_id > 0
  2074.       @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  2075.     end
  2076.   end
  2077.   #--------------------------------------------------------------------------
  2078.   # ● 增加防具 (减少)
  2079.   #     armor_id : 防具 ID
  2080.   #     n        : 个数
  2081.   #--------------------------------------------------------------------------
  2082.   def gain_armor(armor_id, n)
  2083.     # 更新 hash 的个数数据
  2084.     if armor_id > 0
  2085.       @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  2086.     end
  2087.   end
  2088.   #--------------------------------------------------------------------------
  2089.   # ● 减少物品
  2090.   #     item_id : 物品 ID
  2091.   #     n       : 个数
  2092.   #--------------------------------------------------------------------------
  2093.   def lose_item(item_id, n)
  2094.     # 调用 gain_item 的数值逆转
  2095.     gain_item(item_id, -n)
  2096.   end
  2097.   #--------------------------------------------------------------------------
  2098.   # ● 减少武器
  2099.   #     weapon_id : 武器 ID
  2100.   #     n         : 个数
  2101.   #--------------------------------------------------------------------------
  2102.   def lose_weapon(weapon_id, n)
  2103.     # 调用 gain_weapon 的数值逆转
  2104.     gain_weapon(weapon_id, -n)
  2105.   end
  2106.   #--------------------------------------------------------------------------
  2107.   # ● 减少防具
  2108.   #     armor_id : 防具 ID
  2109.   #     n        : 个数
  2110.   #--------------------------------------------------------------------------
  2111.   def lose_armor(armor_id, n)
  2112.     # 调用 gain_armor 的数值逆转
  2113.     gain_armor(armor_id, -n)
  2114.   end
  2115.   #--------------------------------------------------------------------------
  2116.   # ● 判断物品可以使用
  2117.   #     item_id : 物品 ID
  2118.   #--------------------------------------------------------------------------
  2119.   def item_can_use?(item_id)
  2120.     # 物品个数为 0 的情况
  2121.     if item_number(item_id) == 0
  2122.       # 不能使用
  2123.       return false
  2124.     end
  2125.     # 获取可以使用的时候
  2126.     occasion = $data_items[item_id].occasion
  2127.     # 战斗的情况
  2128.     if $game_temp.in_battle
  2129.       # 可以使用时为 0 (平时) 或者是 1 (战斗时) 可以使用
  2130.       return (occasion == 0 or occasion == 1)
  2131.     end
  2132.     # 可以使用时为 0 (平时) 或者是 2 (菜单时) 可以使用
  2133.     return (occasion == 0 or occasion == 2)
  2134.   end
  2135.   #--------------------------------------------------------------------------
  2136.   # ● 清除全体的行动
  2137.   #--------------------------------------------------------------------------
  2138.   def clear_actions
  2139.     # 清除全体同伴的行为
  2140.     for actor in @actors
  2141.       actor.current_action.clear
  2142.     end
  2143.   end
  2144.   #--------------------------------------------------------------------------
  2145.   # ● 可以输入命令的判定
  2146.   #--------------------------------------------------------------------------
  2147.   def inputable?
  2148.     # 如果一可以输入命令就返回 true
  2149.     for actor in @actors
  2150.       if actor.inputable?
  2151.         return true
  2152.       end
  2153.     end
  2154.     return false
  2155.   end
  2156.   #--------------------------------------------------------------------------
  2157.   # ● 全灭判定
  2158.   #--------------------------------------------------------------------------
  2159.   def all_dead?
  2160.     # 同伴人数为 0 的情况下
  2161.     if $game_party.actors.size == 0
  2162.       return false
  2163.     end
  2164.     # 同伴中无人 HP 在 0 以上
  2165.     for actor in @actors
  2166.       if actor.hp > 0
  2167.         return false
  2168.       end
  2169.     end
  2170.     # 全灭
  2171.     return true
  2172.   end
  2173.   #--------------------------------------------------------------------------
  2174.   # ● 检查连续伤害 (地图用)
  2175.   #--------------------------------------------------------------------------
  2176.   def check_map_slip_damage
  2177.     for actor in @actors
  2178.       if actor.hp > 0 and actor.slip_damage?
  2179.         actor.hp -= [actor.maxhp / 100, 1].max
  2180.         if actor.hp == 0
  2181.           $game_system.se_play($data_system.actor_collapse_se)
  2182.         end
  2183.         $game_screen.start_flash(Color.new(255,0,0,128), 4)
  2184.         $game_temp.gameover = $game_party.all_dead?
  2185.       end
  2186.     end
  2187.   end
  2188.   #--------------------------------------------------------------------------
  2189.   # ● 对像角色的随机确定
  2190.   #     hp0 : 限制为 HP 0 的角色
  2191.   #--------------------------------------------------------------------------
  2192.   def random_target_actor(hp0 = false)
  2193.     # 初始化轮流
  2194.     roulette = []
  2195.     # 循环
  2196.     for actor in @actors
  2197.       # 符合条件的场合
  2198.       if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  2199.         # 获取角色职业的位置 [位置]
  2200.         position = $data_classes[actor.class_id].position
  2201.         # 前卫的话 n = 4、中卫的话 n = 3、后卫的话 n = 2
  2202.         n = 4 - position
  2203.         # 添加角色的轮流 n 回
  2204.         n.times do
  2205.           roulette.push(actor)
  2206.         end
  2207.       end
  2208.     end
  2209.     # 轮流大小为 0 的情况
  2210.     if roulette.size == 0
  2211.       return nil
  2212.     end
  2213.     # 转轮盘赌,决定角色
  2214.     return roulette[rand(roulette.size)]
  2215.   end
  2216.   #--------------------------------------------------------------------------
  2217.   # ● 对像角色的随机确定 (HP 0)
  2218.   #--------------------------------------------------------------------------
  2219.   def random_target_actor_hp0
  2220.     return random_target_actor(true)
  2221.   end
  2222.   #--------------------------------------------------------------------------
  2223.   # ● 对像角色的顺序确定
  2224.   #     actor_index : 角色索引
  2225.   #--------------------------------------------------------------------------
  2226.   def smooth_target_actor(actor_index)
  2227.     # 取得对像
  2228.     actor = @actors[actor_index]
  2229.     # 对像存在的情况下
  2230.     if actor != nil and actor.exist?
  2231.       return actor
  2232.     end
  2233.     # 循环
  2234.     for actor in @actors
  2235.       # 对像存在的情况下
  2236.       if actor.exist?
  2237.         return actor
  2238.       end
  2239.     end
  2240.   end
  2241. end




  2242. module PLAN_HPSP_DRAW
  2243. FONT_NAME         = ["黑体", "楷体", "宋体"]    # フォント
  2244. FONT_SIZE         =  14                               # フォントサイズ
  2245. FONT_BOLD         = true                              # 太字
  2246. FONT_ITALIC       = true                              # 斜体

  2247. DRAW_NAME         = false                            # 名前の描画
  2248. DRAW_HP           = true                              # HP の描画
  2249. DRAW_SP           = true                              # SP の描画

  2250. DRAW_WIDTH        =  80                               # 描画幅
  2251. DRAW_HEIGHT       = 3 * 32                            # 描画高さ
  2252. DRAW_SPACE        =   0                               # 行間
  2253. DRAW_Y            =  36                               # Y 座標修正値
  2254. end


  2255. #==============================================================================
  2256. # ■ Sprite_Battler
  2257. #==============================================================================

  2258. class Sprite_Battler < RPG::Sprite
  2259. #--------------------------------------------------------------------------
  2260. # ● オブジェクト初期化
  2261. #--------------------------------------------------------------------------
  2262. alias plan_enemy_hpsp_draw_initialize initialize
  2263. def initialize(viewport, battler = nil)
  2264.   # 元のメソッドに戻す
  2265.   plan_enemy_hpsp_draw_initialize(viewport, battler)
  2266.   # エネミーの場合
  2267.   if @battler.is_a?(Game_Enemy)
  2268.     width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
  2269.     height = PLAN_HPSP_DRAW::DRAW_HEIGHT + 32
  2270.     x = @battler.screen_x - width / 2
  2271.     y = @battler.screen_y - height + 32 + PLAN_HPSP_DRAW::DRAW_Y
  2272.     @enemy_hpsp_window = Window_Base.new(x, y, width, height)
  2273.     @enemy_hpsp_window.contents = Bitmap.new(width - 32, height - 32)
  2274.     @enemy_hpsp_window.contents.font.name = PLAN_HPSP_DRAW::FONT_NAME
  2275.     @enemy_hpsp_window.contents.font.size = PLAN_HPSP_DRAW::FONT_SIZE
  2276.     @enemy_hpsp_window.contents.font.bold = PLAN_HPSP_DRAW::FONT_BOLD
  2277.     @enemy_hpsp_window.contents.font.italic = PLAN_HPSP_DRAW::FONT_ITALIC
  2278.     y = 0
  2279.     @old_enemy_hpsp = []
  2280.     one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
  2281.     if PLAN_HPSP_DRAW::DRAW_NAME
  2282.       @enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
  2283.       y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
  2284.       @old_enemy_hpsp.push(@battler.name)
  2285.     end
  2286.     if PLAN_HPSP_DRAW::DRAW_HP
  2287.       @enemy_hpsp_window.draw_actor_hp2222(@battler, 0, y, width - 32)
  2288.       y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
  2289.       @old_enemy_hpsp.push(@battler.hp)
  2290.     end
  2291.     if PLAN_HPSP_DRAW::DRAW_SP
  2292.       @enemy_hpsp_window.draw_actor_sp2222(@battler, 0, y, width - 32)
  2293.       @old_enemy_hpsp.push(@battler.sp)
  2294.     end
  2295.     @enemy_hpsp_window.opacity = 0
  2296.     @enemy_hpsp_window.contents_opacity = 0
  2297.     @enemy_hpsp_window.z = -2
  2298.   end
  2299. end
  2300. #--------------------------------------------------------------------------
  2301. # ● 解放
  2302. #--------------------------------------------------------------------------
  2303. alias plan_enemy_hpsp_draw_dispose dispose
  2304. def dispose
  2305.   # エネミーの場合
  2306.   if @battler.is_a?(Game_Enemy)
  2307.     @enemy_hpsp_window.dispose
  2308.   end
  2309.   # 元のメソッドに戻す
  2310.   plan_enemy_hpsp_draw_dispose
  2311. end
  2312. #--------------------------------------------------------------------------
  2313. # ● フレーム更新
  2314. #--------------------------------------------------------------------------
  2315. alias plan_enemy_hpsp_draw_update update
  2316. def update
  2317.   # 元のメソッドに戻す
  2318.   plan_enemy_hpsp_draw_update
  2319.   # エネミーの場合
  2320.   if @battler.is_a?(Game_Enemy)
  2321.     @enemy_hpsp_window.visible = @battler_visible
  2322.   # スプライトの座標を設定
  2323.     width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
  2324.     @enemy_hpsp_window.x = self.x - width / 2
  2325.     @now_enemy_hpsp = []
  2326.     if PLAN_HPSP_DRAW::DRAW_NAME
  2327.       @now_enemy_hpsp.push(@battler.name)
  2328.     end
  2329.     if PLAN_HPSP_DRAW::DRAW_HP
  2330.       @now_enemy_hpsp.push(@battler.hp)
  2331.     end
  2332.     if PLAN_HPSP_DRAW::DRAW_SP
  2333.       @now_enemy_hpsp.push(@battler.sp)
  2334.     end
  2335.     if @old_enemy_hpsp != @now_enemy_hpsp and $game_temp.enemy_hpsp_refresh
  2336.       @old_enemy_hpsp = @now_enemy_hpsp
  2337.       @enemy_hpsp_window.contents.clear
  2338.       y = 0
  2339.       width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
  2340.       one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
  2341.       if PLAN_HPSP_DRAW::DRAW_NAME
  2342.         @enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
  2343.         y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
  2344.       end
  2345.       if PLAN_HPSP_DRAW::DRAW_HP
  2346.         @enemy_hpsp_window.draw_actor_hp2222(@battler, 0, y, width - 32)
  2347.         y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
  2348.       end
  2349.       if PLAN_HPSP_DRAW::DRAW_SP
  2350.         @enemy_hpsp_window.draw_actor_sp2222(@battler, 0, y, width - 32)
  2351.       end
  2352.       Graphics.frame_reset
  2353.     end
  2354.   end
  2355. end
  2356. #--------------------------------------------------------------------------
  2357. # ● visible の設定
  2358. #--------------------------------------------------------------------------
  2359. if !method_defined?("plan_enemy_hpsp_draw_visible=")
  2360.   alias plan_enemy_hpsp_draw_visible= visible=
  2361. end
  2362. def visible=(bool)
  2363.   # エネミーの場合
  2364.   if @battler.is_a?(Game_Enemy)
  2365.     @enemy_hpsp_window.visible = bool
  2366.   end
  2367.   # 元のメソッドに戻す
  2368.   self.plan_enemy_hpsp_draw_visible=(bool)
  2369. end
  2370. #--------------------------------------------------------------------------
  2371. # ● 不透明度の設定
  2372. #--------------------------------------------------------------------------
  2373. if !method_defined?("plan_enemy_hpsp_draw_opacity=")
  2374.   alias plan_enemy_hpsp_draw_opacity= opacity=
  2375. end
  2376. def opacity=(n)
  2377.   # 元のメソッドに戻す
  2378.   self.plan_enemy_hpsp_draw_opacity=(n)
  2379.   # エネミーの場合
  2380.   if @battler.is_a?(Game_Enemy)
  2381.     @enemy_hpsp_window.contents_opacity = n
  2382.   end
  2383. end

  2384. end





  2385. #==============================================================================
  2386. # ■ Game_Temp
  2387. #==============================================================================

  2388. class Game_Temp
  2389. #--------------------------------------------------------------------------
  2390. # ● 公開インスタンス変数
  2391. #--------------------------------------------------------------------------
  2392. attr_accessor :enemy_hpsp_refresh
  2393. #--------------------------------------------------------------------------
  2394. # ● オブジェクト初期化
  2395. #--------------------------------------------------------------------------
  2396. alias plan_enemy_hpsp_draw_initialize initialize
  2397. def initialize
  2398.   # 元のメソッドに戻す
  2399.   plan_enemy_hpsp_draw_initialize
  2400.   @enemy_hpsp_refresh = false
  2401. end
  2402. end

  2403. #==============================================================================
  2404. # ■ Scene_Battle
  2405. #==============================================================================

  2406. class Scene_Battle
  2407. #--------------------------------------------------------------------------
  2408. # ● プレバトルフェーズ開始 (エネミー名+アルファベット用)
  2409. #--------------------------------------------------------------------------
  2410. alias plan_enemy_hpsp_draw_start_phase1 start_phase1
  2411. def start_phase1
  2412.   $game_temp.enemy_hpsp_refresh = true
  2413.   # 元のメソッドに戻す
  2414.   plan_enemy_hpsp_draw_start_phase1
  2415. end
  2416. #--------------------------------------------------------------------------
  2417. # ● パーティコマンドフェーズ開始 (エネミー名+アルファベット用)
  2418. #--------------------------------------------------------------------------
  2419. alias plan_enemy_hpsp_draw_start_phase2 start_phase2
  2420. def start_phase2
  2421.   $game_temp.enemy_hpsp_refresh = false
  2422.   # 元のメソッドに戻す
  2423.   plan_enemy_hpsp_draw_start_phase2
  2424. end
  2425. #--------------------------------------------------------------------------
  2426. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  2427. #--------------------------------------------------------------------------
  2428. alias plan_enemy_hpsp_draw_update_phase4_step5 update_phase4_step5
  2429. def update_phase4_step5
  2430.   # 元のメソッドに戻す
  2431.   plan_enemy_hpsp_draw_update_phase4_step5
  2432.   $game_temp.enemy_hpsp_refresh = true
  2433. end
  2434. #--------------------------------------------------------------------------
  2435. # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  2436. #--------------------------------------------------------------------------
  2437. alias plan_enemy_hpsp_draw_update_phase4_step6 update_phase4_step6
  2438. def update_phase4_step6
  2439.   # 元のメソッドに戻す
  2440.   plan_enemy_hpsp_draw_update_phase4_step6
  2441.   $game_temp.enemy_hpsp_refresh = false
  2442. end
  2443. end


  2444. #==============================================================================
  2445. # ■ Window_Base
  2446. #==============================================================================

  2447. class Window_Base < Window
  2448. #--------------------------------------------------------------------------
  2449. # ● 名前の描画
  2450. #--------------------------------------------------------------------------
  2451. def draw_actor_name(actor, x, y, width = 120, align = 0)
  2452.   self.contents.font.color = normal_color
  2453.   align = 1 if $scene.is_a?(Scene_Battle)
  2454.   self.contents.draw_text(x, y, width, 32, actor.name, align)
  2455. end
  2456. #--------------------------------------------------------------------------
  2457. # ● ステートの描画
  2458. #--------------------------------------------------------------------------
  2459. def draw_actor_state(actor, x, y, width = 120)
  2460.   # 元のメソッドに戻す
  2461.   text = make_battler_state_text(actor, width, true)
  2462.   self.contents.draw_text(x, y, width, 32, text, 1)
  2463. end
  2464. end
  2465. class Window_Base < Window
  2466. def draw_actor_hp2222(actor, x, y, width = 100, height=8)
  2467.    y+=3
  2468.    olx = x
  2469.    oly = y
  2470.    w = width * actor.hp / [actor.maxhp,1].max
  2471.    hp_color_1 = Color.new(255, 0, 0, 192)
  2472.    hp_color_2 = Color.new(255, 255, 0, 192)
  2473.    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
  2474.    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  2475.    x -= 1
  2476.    y += (height/4).floor
  2477.    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
  2478.    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
  2479.    x -= 1
  2480.    y += (height/4).ceil
  2481.    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
  2482.    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
  2483.    x -= 1
  2484.    y += (height/4).ceil
  2485.    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
  2486.    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  2487.    x = olx
  2488.    y = oly-14   
  2489.    # 描绘字符串 "HP"
  2490.    self.contents.font.color = system_color
  2491.    self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  2492.    # 计算描绘 MaxHP 所需的空间
  2493.    if width - 32 >= 108
  2494.      hp_x = x + width - 108
  2495.      flag = true
  2496.    elsif width - 32 >= 48
  2497.      hp_x = x + width - 48
  2498.      flag = false
  2499.    end
  2500.    # 描绘 HP
  2501.    self.contents.font.color = actor.hp == 0 ? knockout_color :
  2502.      actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  2503.    self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
  2504.    # 描绘 MaxHP
  2505.    if flag
  2506.      self.contents.font.color = normal_color
  2507.      self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  2508.      self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
  2509.    end   
  2510. end
  2511. def draw_actor_sp2222(actor, x, y, width = 100, height = 8)
  2512.    y+=3
  2513.    olx = x
  2514.    oly = y
  2515.    w = width * actor.sp / [actor.maxsp,1].max
  2516.    hp_color_1 = Color.new( 0, 0, 255, 192)
  2517.    hp_color_2 = Color.new( 0, 255, 255, 192)
  2518.    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
  2519.    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  2520.    x -= 1
  2521.    y += (height/4).floor
  2522.    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
  2523.    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
  2524.    x -= 1
  2525.    y += (height/4).ceil
  2526.    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
  2527.    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
  2528.    x -= 1
  2529.    y += (height/4).ceil
  2530.    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
  2531.    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  2532.    x = olx
  2533.    y = oly-14
  2534.    # 描绘字符串 "SP"
  2535.    self.contents.font.color = system_color
  2536.    self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  2537.    # 计算描绘 MaxSP 所需的空间
  2538.    if width - 32 >= 108
  2539.      sp_x = x + width - 108
  2540.      flag = true
  2541.    elsif width - 32 >= 48
  2542.      sp_x = x + width - 48
  2543.      flag = false
  2544.    end
  2545.    # 描绘 SP
  2546.    self.contents.font.color = actor.sp == 0 ? knockout_color :
  2547.      actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  2548.    self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
  2549.    # 描绘 MaxSP
  2550.    if flag
  2551.      self.contents.font.color = normal_color
  2552.      self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  2553.      self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
  2554.    end   
  2555. end
  2556. #--------------------------------------------------------------------------
  2557. # ● ライン描画 by 桜雅 在土
  2558. #--------------------------------------------------------------------------
  2559. def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
  2560.    # 描写距離の計算。大きめに直角時の長さ。
  2561.    distance = (start_x - end_x).abs + (start_y - end_y).abs
  2562.    # 描写開始
  2563.    if end_color == start_color
  2564.      for i in 1..distance
  2565.        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  2566.        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  2567.        if width == 1
  2568.          self.contents.set_pixel(x, y, start_color)
  2569.        else
  2570.          self.contents.fill_rect(x, y, width, width, start_color)
  2571.        end
  2572.      end
  2573.    else
  2574.      for i in 1..distance
  2575.        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  2576.        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  2577.        r = start_color.red * (distance-i)/distance + end_color.red * i/distance
  2578.        g = start_color.green * (distance-i)/distance + end_color.green * i/distance
  2579.        b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
  2580.        a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
  2581.        if width == 1
  2582.          self.contents.set_pixel(x, y, Color.new(r, g, b, a))
  2583.        else
  2584.          self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a))
  2585.        end
  2586.      end
  2587.    end
  2588. end
  2589. end



  2590. class Window_Help < Window_Base
  2591.   def set_enemy(actor)
  2592.     self.contents.clear
  2593.     draw_actor_name(actor, 4, 0)
  2594.     draw_actor_state(actor, 140, 0)
  2595.     carol3_draw_hp_bar(actor, 284, 0)
  2596.     carol3_draw_sp_bar(actor, 460, 0)
  2597.     @text = nil
  2598.     self.visible = true
  2599.   end
  2600.   def carol3_draw_hp_bar(actor, x, y, width = 128) #宽度可调,建议不要改。
  2601.     self.contents.font.color = system_color
  2602.     w = width * actor.hp / [actor.maxhp,1].max
  2603.     if actor.maxhp != 0
  2604.       rate = actor.hp.to_f / actor.maxhp
  2605.     else
  2606.       rate = 0
  2607.     end
  2608.     color1 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 150)
  2609.     self.contents.fill_rect(x+1, y+15, width+2,1, Color.new(0, 0, 0, 255))
  2610.     self.contents.fill_rect(x+1, y+16, width+2,1, Color.new(255, 255, 192, 192))
  2611.     self.contents.fill_rect(x+1, y+17, w,6,color1)
  2612.     self.contents.fill_rect(x+1, y+23, width+2,1, Color.new(255, 255, 192, 192))
  2613.     self.contents.fill_rect(x+1, y+24, width+2,1, Color.new(0, 0, 0, 255))
  2614.     self.contents.fill_rect(x, y+16, 1,8, Color.new(255, 255, 192, 192))
  2615.     self.contents.fill_rect(x-1, y+15, 1,10, Color.new(0, 0, 0, 255))
  2616.     self.contents.fill_rect(x+129, y+16, 1,8, Color.new(255, 255, 192, 192))
  2617.     self.contents.fill_rect(x+130, y+15, 1,10, Color.new(0, 0, 0, 255))
  2618.     self.contents.draw_text(x-53,y,128,32,$data_system.words.hp,1)
  2619.     if actor.hp>actor.maxhp/3
  2620.       self.contents.font.color = Color.new(255, 255, 255, 250)
  2621.     end
  2622.     if actor.hp>=actor.maxhp/6 and actor.maxhp/3>actor.hp
  2623.       self.contents.font.color = Color.new(200, 200, 0, 255)
  2624.     end
  2625.     if actor.maxhp/6>actor.hp
  2626.       self.contents.font.color = Color.new(200, 0, 0, 255)
  2627.     end
  2628.     self.contents.draw_text(x+47,y,128,32,actor.hp.to_s,1)
  2629.   end
  2630.   def carol3_draw_sp_bar(actor, x, y, width = 128)
  2631.     self.contents.font.color = system_color
  2632.     if actor.maxsp != 0
  2633.       rate = actor.sp.to_f / actor.maxsp
  2634.     else
  2635.       rate = 0
  2636.     end
  2637.     color2 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
  2638.     w = width * actor.sp / [actor.maxsp,1].max
  2639.     self.contents.fill_rect(x+1, y+15, width+2,1, Color.new(0, 0, 0, 255))
  2640.     self.contents.fill_rect(x+1, y+16, width+2,1, Color.new(255, 255, 192, 192))
  2641.     self.contents.fill_rect(x+1, y+17, w,6,color2)
  2642.     self.contents.fill_rect(x+1, y+23, width+2,1, Color.new(255, 255, 192, 192))
  2643.     self.contents.fill_rect(x+1, y+24, width+2,1, Color.new(0, 0, 0, 255))
  2644.     self.contents.fill_rect(x, y+16, 1,8, Color.new(255, 255, 192, 192))
  2645.     self.contents.fill_rect(x-1, y+15, 1,10, Color.new(0, 0, 0, 255))
  2646.     self.contents.fill_rect(x+129, y+16, 1,8, Color.new(255, 255, 192, 192))
  2647.     self.contents.fill_rect(x+130, y+15, 1,10, Color.new(0, 0, 0, 255))
  2648.     self.contents.draw_text(x-53,y,128,32,$data_system.words.sp,1)
  2649.     if actor.hp>actor.maxsp/3
  2650.       self.contents.font.color = Color.new(255, 255, 255, 250)
  2651.     end
  2652.     if actor.hp>=actor.maxsp/6 and actor.maxsp/3>actor.sp
  2653.       self.contents.font.color = Color.new(200, 200, 0, 255)
  2654.     end
  2655.     if actor.maxsp/6>actor.sp
  2656.       self.contents.font.color = Color.new(200, 0, 0, 255)
  2657.     end
  2658.     self.contents.draw_text(x+47,y,128,32,actor.sp.to_s,1)
  2659.   end
  2660. end


  2661. #==============================================================================
  2662. # ■ Window_Item
  2663. #------------------------------------------------------------------------------
  2664. #  物品画面、战斗画面、显示浏览物品的窗口。
  2665. #==============================================================================
  2666. class Window_Item < Window_Selectable
  2667.   #--------------------------------------------------------------------------
  2668.   # ● 刷新
  2669.   #--------------------------------------------------------------------------
  2670.   def refresh
  2671.     if self.contents != nil
  2672.       self.contents.dispose
  2673.       self.contents = nil
  2674.     end
  2675.     @data = []
  2676.     # 在战斗中以外添加武器、防具
  2677.     unless $game_temp.in_battle
  2678.       # 添加报务
  2679.       for i in 1...$data_items.size
  2680.         if $game_party.item_number(i) > 0
  2681.             @data.push($data_items)
  2682.         end
  2683.       end
  2684.       for i in 1...$data_weapons.size
  2685.         if $game_party.weapon_number(i) > 0
  2686.           @data.push($data_weapons)
  2687.         end
  2688.       end
  2689.       for i in 1...$data_armors.size
  2690.         if $game_party.armor_number(i) > 0
  2691.           @data.push($data_armors)
  2692.         end
  2693.       end
  2694.     else
  2695.       for i in 1...$data_items.size
  2696.         if $game_party.item_number(i) > 0
  2697.           occasion = $data_items.occasion
  2698.           if occasion == 0 or occasion == 1
  2699.              @data.push($data_items)
  2700.           end
  2701.         end
  2702.       end
  2703.     end
  2704.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  2705.     @item_max = @data.size
  2706.     if @item_max > 0
  2707.       self.contents = Bitmap.new(width - 32, row_max * 32)
  2708.       for i in 0...@item_max
  2709.         draw_item(i)
  2710.       end
  2711.     end
  2712.   end
  2713. end
  2714. #===============================================================
  2715. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  2716. #===============================================================


  2717. # ——————————————————————————————

  2718. # HP/SP/EXPゲージ表示スクリプト Ver 1.00
  2719. # 配布元?サポートURL
  2720. # http://members.jcom.home.ne.jp/cogwheel/

  2721. #===============================================================
  2722. # ■ Game_Actor
  2723. #--------------------------------------------------------
  2724. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  2725. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  2726. #==============================================================

  2727. class Game_Actor < Game_Battler
  2728.   def now_exp
  2729.     return @exp - @exp_list[@level]
  2730.   end
  2731.   def next_exp
  2732.     return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  2733.   end
  2734. end

  2735. #==========================================================
  2736. # ■ Window_Base
  2737. #------------------------------------------------------------
  2738. #  ゲーム中のすべてのウィンドウのスーパークラスです。
  2739. #============================================================

  2740. class Window_Base < Window
  2741.   #--------------------------------------------------------
  2742.   # ● HP ゲージの描画
  2743.   #--------------------------------------------------
  2744.   # オリジナルのHP描画を draw_actor_hp_original と名前変更
  2745.   alias :draw_actor_hp_original :draw_actor_hp
  2746.   def draw_actor_hp(actor, x, y, width = 144)
  2747.     # 変数rateに 現在のHP/MHPを代入
  2748.     if actor.maxhp != 0
  2749.       rate = actor.hp.to_f / actor.maxhp
  2750.     else
  2751.       rate = 0
  2752.     end
  2753.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  2754.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  2755.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  2756.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  2757.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  2758.     plus_x = 0
  2759.     rate_x = 0
  2760.     plus_y = 25
  2761.     plus_width = 0
  2762.     rate_width = 100
  2763.     height = 10
  2764.     align1 = 1
  2765.     align2 = 2
  2766.     align3 = 0
  2767.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  2768.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  2769.     grade1 = 1
  2770.     grade2 = 0
  2771.     # 色設定。color1:外枠,color2:中枠
  2772.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  2773.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  2774.     color1 = Color.new(0, 0, 0, 192)
  2775.     color2 = Color.new(255, 255, 192, 192)
  2776.     color3 = Color.new(0, 0, 0, 192)
  2777.     color4 = Color.new(64, 0, 0, 192)
  2778.     color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
  2779.     color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
  2780.     # 変数spに描画するゲージの幅を代入
  2781.     if actor.maxhp != 0
  2782.       hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
  2783.     else
  2784.       hp = 0
  2785.     end
  2786.     # ゲージの描画
  2787.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  2788.                 width, plus_width + width * rate_width / 100,
  2789.                 height, hp, align1, align2, align3,
  2790.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  2791.     # オリジナルのHP描画処理を呼び出し
  2792.     draw_actor_hp_original(actor, x, y, width)
  2793.   end
  2794.   #--------------------------------------------------------------
  2795.   # ● SP ゲージの描画
  2796.   #------------------------------------------------------------
  2797.   # オリジナルのSP描画を draw_actor_sp_original と名前変更
  2798.   alias :draw_actor_sp_original :draw_actor_sp
  2799.   def draw_actor_sp(actor, x, y, width = 144)
  2800.     # 変数rateに 現在のSP/MSPを代入
  2801.     if actor.maxsp != 0
  2802.       rate = actor.sp.to_f / actor.maxsp
  2803.     else
  2804.       rate = 1
  2805.     end
  2806.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  2807.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  2808.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  2809.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  2810.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  2811.     plus_x = 0
  2812.     rate_x = 0
  2813.     plus_y = 25
  2814.     plus_width = 0
  2815.     rate_width = 100
  2816.     height = 10
  2817.     align1 = 1
  2818.     align2 = 2
  2819.     align3 = 0
  2820.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  2821.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  2822.     grade1 = 1
  2823.     grade2 = 0
  2824.     # 色設定。color1:外枠,color2:中枠
  2825.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  2826.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  2827.     color1 = Color.new(0, 0, 0, 192)
  2828.     color2 = Color.new(255, 255, 192, 192)
  2829.     color3 = Color.new(0, 0, 0, 192)
  2830.     color4 = Color.new(0, 64, 0, 192)
  2831.     color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
  2832.     color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
  2833.     # 変数spに描画するゲージの幅を代入
  2834.     if actor.maxsp != 0
  2835.       sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
  2836.     else
  2837.       sp = (width + plus_width) * rate_width / 100
  2838.     end
  2839.     # ゲージの描画
  2840.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  2841.                 width, plus_width + width * rate_width / 100,
  2842.                 height, sp, align1, align2, align3,
  2843.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  2844.     # オリジナルのSP描画処理を呼び出し
  2845.     draw_actor_sp_original(actor, x, y, width)
  2846.   end
  2847.   #--------------------------------------------------------
  2848.   # ● EXP ゲージの描画
  2849.   #----------------------------------------------------------
  2850.   # オリジナルのEXP描画を draw_actor_sp_original と名前変更
  2851.   alias :draw_actor_exp_original :draw_actor_exp
  2852.   def draw_actor_exp(actor, x, y, width = 204)
  2853.     # 変数rateに 現在のexp/nextexpを代入
  2854.     if actor.next_exp != 0
  2855.       rate = actor.now_exp.to_f / actor.next_exp
  2856.     else
  2857.       rate = 1
  2858.     end
  2859.     # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  2860.     # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  2861.     # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  2862.     # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  2863.     # align3:ゲージタイプ 0:左詰め 1:右詰め
  2864.     plus_x = 0
  2865.     rate_x = 0
  2866.     plus_y = 25
  2867.     plus_width = 0
  2868.     rate_width = 100
  2869.     height = 10
  2870.     align1 = 1
  2871.     align2 = 2
  2872.     align3 = 0
  2873.     # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  2874.     # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重))
  2875.     grade1 = 1
  2876.     grade2 = 0
  2877.     # 色設定。color1:外枠,color2:中枠
  2878.     # color3:空ゲージダークカラー,color4:空ゲージライトカラー
  2879.     # color5:実ゲージダークカラー,color6:実ゲージライトカラー
  2880.     color1 = Color.new(0, 0, 0, 192)
  2881.     color2 = Color.new(255, 255, 192, 192)
  2882.     color3 = Color.new(0, 0, 0, 192)
  2883.     color4 = Color.new(64, 0, 0, 192)
  2884.     color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
  2885.     color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
  2886.     # 変数expに描画するゲージの幅を代入
  2887.     if actor.next_exp != 0
  2888.       exp = (width + plus_width) * actor.now_exp * rate_width /
  2889.                                                           100 / actor.next_exp
  2890.     else
  2891.       exp = (width + plus_width) * rate_width / 100
  2892.     end
  2893.     # ゲージの描画
  2894.     gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
  2895.                 width, plus_width + width * rate_width / 100,
  2896.                 height, exp, align1, align2, align3,
  2897.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  2898.     # オリジナルのEXP描画処理を呼び出し
  2899.     draw_actor_exp_original(actor, x, y)
  2900.   end
  2901.   #---------------------------------------------------------
  2902.   # ● ゲージの描画
  2903.   #-----------------------------------------------------
  2904.   def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
  2905.                 color1, color2, color3, color4, color5, color6, grade1, grade2)
  2906.     case align1
  2907.     when 1
  2908.       x += (rect_width - width) / 2
  2909.     when 2
  2910.       x += rect_width - width
  2911.     end
  2912.     case align2
  2913.     when 1
  2914.       y -= height / 2
  2915.     when 2
  2916.       y -= height
  2917.     end
  2918.     # 枠描画
  2919.     self.contents.fill_rect(x, y, width, height, color1)
  2920.     self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
  2921.     if align3 == 0
  2922.       if grade1 == 2
  2923.         grade1 = 3
  2924.       end
  2925.       if grade2 == 2
  2926.         grade2 = 3
  2927.       end
  2928.     end
  2929.     if (align3 == 1 and grade1 == 0) or grade1 > 0
  2930.       color = color3
  2931.       color3 = color4
  2932.       color4 = color
  2933.     end
  2934.     if (align3 == 1 and grade2 == 0) or grade2 > 0
  2935.       color = color5
  2936.       color5 = color6
  2937.       color6 = color
  2938.     end
  2939.     # 空ゲージの描画
  2940.     self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
  2941.                                   color3, color4, grade1)
  2942.     if align3 == 1
  2943.       x += width - gauge
  2944.     end
  2945.     # 実ゲージの描画
  2946.     self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
  2947.                                   color5, color6, grade2)
  2948.   end
  2949. end

  2950. #--------------------------------------------------------------
  2951. #  Bitmapクラスに新たな機能を追加します。
  2952. #===================================================================

  2953. class Bitmap
  2954.   #------------------------------------------------------------
  2955.   # ● 矩形をグラデーション表示
  2956.   #     color1 : スタートカラー
  2957.   #     color2 : エンドカラー
  2958.   #     align  :  0:横にグラデーション
  2959.   #               1:縦にグラデーション
  2960.   #               2:斜めにグラデーション(激重につき注意)
  2961.   #--------------------------------------------------------
  2962.   def gradation_rect(x, y, width, height, color1, color2, align = 0)
  2963.     if align == 0
  2964.       for i in x...x + width
  2965.         red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
  2966.         green = color1.green +
  2967.                 (color2.green - color1.green) * (i - x) / (width - 1)
  2968.         blue  = color1.blue +
  2969.                 (color2.blue - color1.blue) * (i - x) / (width - 1)
  2970.         alpha = color1.alpha +
  2971.                 (color2.alpha - color1.alpha) * (i - x) / (width - 1)
  2972.         color = Color.new(red, green, blue, alpha)
  2973.         fill_rect(i, y, 1, height, color)
  2974.       end
  2975.     elsif align == 1
  2976.       for i in y...y + height
  2977.         red   = color1.red +
  2978.                 (color2.red - color1.red) * (i - y) / (height - 1)
  2979.         green = color1.green +
  2980.                 (color2.green - color1.green) * (i - y) / (height - 1)
  2981.         blue  = color1.blue +
  2982.                 (color2.blue - color1.blue) * (i - y) / (height - 1)
  2983.         alpha = color1.alpha +
  2984.                 (color2.alpha - color1.alpha) * (i - y) / (height - 1)
  2985.         color = Color.new(red, green, blue, alpha)
  2986.         fill_rect(x, i, width, 1, color)
  2987.       end
  2988.     elsif align == 2
  2989.       for i in x...x + width
  2990.         for j in y...y + height
  2991.           red   = color1.red + (color2.red - color1.red) *
  2992.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  2993.           green = color1.green + (color2.green - color1.green) *
  2994.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  2995.           blue  = color1.blue + (color2.blue - color1.blue) *
  2996.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  2997.           alpha = color1.alpha + (color2.alpha - color1.alpha) *
  2998.                   ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  2999.           color = Color.new(red, green, blue, alpha)
  3000.           set_pixel(i, j, color)
  3001.         end
  3002.       end
  3003.     elsif align == 3
  3004.       for i in x...x + width
  3005.         for j in y...y + height
  3006.           red   = color1.red + (color2.red - color1.red) *
  3007.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  3008.           green = color1.green + (color2.green - color1.green) *
  3009.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  3010.           blue  = color1.blue + (color2.blue - color1.blue) *
  3011.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  3012.           alpha = color1.alpha + (color2.alpha - color1.alpha) *
  3013.                 ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
  3014.           color = Color.new(red, green, blue, alpha)
  3015.           set_pixel(i, j, color)
  3016.         end
  3017.       end
  3018.     end
  3019.   end
  3020. end

  3021. ################################################################################
  3022. #STUPID PIG工作室里面的人不是笨猪,而是一群追逐梦想的年轻人!~~
  3023. ################################################################################


  3024.    
  3025.    
  3026.    
复制代码

作者: 杀人神经婆    时间: 2012-7-20 14:22
综合站都处理是什么意思?
作者: 忧雪の伤    时间: 2012-7-20 17:49
本帖最后由 忧雪の伤 于 2012-7-20 17:52 编辑
本脚本由STUPID  PIG工作室自行研制,其制作权归本工作室所有,当然大家可以尽情的
#使用,但是所有的备注都不能删除

UI> 先不说你把默认的脚本全部复制了一遍(包括没有进行改动的),冲突率大,长度大,然后后面一大段还是其他人写的……还自行研制……别笑死我了……
作者: 不如归去    时间: 2012-7-20 17:54
既然是自行研制,麻烦解释一下后面的日文注释是怎么回事可以么?还是说写日文出来装逼?
2586
  1. #--------------------------------------------------------------------------
  2. # ● ライン描画 by 桜雅 在土
  3. #--------------------------------------------------------------------------
复制代码
此外,也太看不起自加密了吧?
作者: serena718    时间: 2012-7-20 18:22
能否用別名之類的方法整合下?
不然這樣衝突率很高,而且似乎只支援默認系統,
這樣弄不如你把算法的部分獨立出來,讓大家自行整合算了……
作者: stevenrock    时间: 2012-7-21 13:20
整合系统是个相当枯燥的工作,虽然鄙人表示估计不会用,我还是理解LZ你,再接再厉吧。
作者: f26401004    时间: 2012-7-21 17:32
不過貌似還有日站的腳本,這樣真的可以算是自行研製的嗎?
作者: 我本将心向明月    时间: 2012-7-31 22:13
枯燥乏味。。。我晕了


‘‘──我本将心向明月于2012-7-31 22:13补充以下内容:

枯燥。。。。乏味。。晕了。。
’’
作者: 958801    时间: 2016-7-12 14:22
用不起啊!!!!!!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1