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

Project1

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

[通用发布] 综合战斗处理第一代

[复制链接]

Lv1.梦旅人

梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
帖子
148
跳转到指定楼层
1
发表于 2012-7-1 18:05:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 退屈£无聊 于 2012-7-2 08:55 编辑
  1. #==============================================================================
  2. #                           《综合战斗处理第一代》
  3. #介绍;这款脚本加了以下内容;
  4. #      1.空手攻击的动画ID是第一个,被攻动画ID是第二个
  5. #      2.空手时攻防能力,修改防御力在 1252行,攻击力在 1236行
  6. #      3.增加了入场的动画,入场动画为3
  7. #      4.增加了  当物理攻击时,被攻方SP 与  HP 一起减少
  8. #      5.增加了  当物理攻击时,被攻方SP增加,HP 减少
  9. #      6.增加了  连续伤害时,被攻方SP增加,HP 减少HP的5%
  10. #      7.增加了  战斗人物的上下摇动,如果不想要,就把1550行的  return 480 - rand(5)改为return 480
  11. #
  12. #
  13. #制作人;STUPID  ANT            制作组;STUPID  PIG工作室
  14. ##########################《使用声明》#########################################
  15. #本脚本由STUPID  PIG工作室自行研制,其制作权归本工作室所有,当然大家可以尽情的
  16. #使用,但是所有的备注都不能删除,呵呵~~就算你加密,我们也不怕,很轻松就能看到!
  17. #在使用过程中如果有什么漏洞或新的想法,可以联系我们,QQ;1660618519
  18. #当然,我不经常在线,所以你们还可以打我手机;13977375101
  19. #祝你们做游戏愉快!~
  20. #==============================================================================

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

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

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

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

  1545.     return 480 - rand(5)


  1546.   end
  1547.   #--------------------------------------------------------------------------
  1548.   # ● 取得战斗画面的 Z 坐标
  1549.   #--------------------------------------------------------------------------
  1550.   def screen_z
  1551.     # 返回计算后的队伍 Z 坐标的排列顺序
  1552.     if self.index != nil
  1553.       return 8 - self.index
  1554.     else
  1555.       return 0
  1556.     end
  1557.   end
  1558. end
复制代码

点评

{:5_161:}非常支持LZ发布,但是为了发布区较多的群众请使用代码框功能,全部复制完后按ctrl+A全选然后按一下<>这个按钮. 谢谢合作,发布区有您更精彩:)   发表于 2012-7-2 08:58

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

2
发表于 2012-7-1 18:07:14 | 只看该作者
通用?XP VX VA都能用?

点评

同样也是XP  发表于 2012-7-1 18:33
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
132 小时
注册时间
2012-1-21
帖子
512
3
发表于 2012-7-1 18:36:10 | 只看该作者
第三遍说明:
阁下不会用代码插入功能吗


对于多余的未修改的方法可以在脚本中省略不写,当然,阁下的脚本目测很难与其他战斗系统兼容,所以请说面脚本冲突关系

另外,我可以吐槽这两段么
#本脚本由STUPID  PIG工作室自行研制,其制作权归本工作室所有,当然大家可以尽情的
#使用,但是所有的备注都不能删除,呵呵~~就算你加密,我们也不怕,很轻松就能看到!

点评

帖子里插入代码  发表于 2012-7-5 13:48
UI> 啥叫代码插入啊RO君XDD,人家是alias……  发表于 2012-7-5 10:04
心情大好呢
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2012-7-2 14:46:39 | 只看该作者
感觉很无用的说···因为有的游戏已经抛弃RM默认的战斗了
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
320 小时
注册时间
2011-6-23
帖子
260
5
发表于 2012-7-5 08:07:52 | 只看该作者
好神奇的战斗……战斗一开始就显示物品动画,接着人物震动……一直震动……震动震动……
攻击时可以消耗对手的SP? = =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
帖子
148
6
 楼主| 发表于 2012-7-8 13:19:06 | 只看该作者
说句实在话,这是一个简单的教学脚本,非常适合新手学习,
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
帖子
148
7
 楼主| 发表于 2012-7-8 14:24:42 | 只看该作者
零の使魔 发表于 2012-7-1 18:36
第三遍说明:

对于多余的未修改的方法可以在脚本中省略不写,当然,阁下的脚本目测很难与其他战斗系统兼容 ...

STUPID PIG工作室是我建立的!~~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 17:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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