Project1

标题: 赫然發覺主角怎麼死不了,無法結束遊戲 [打印本页]

作者: duzine    时间: 2015-10-30 14:19
标题: 赫然發覺主角怎麼死不了,無法結束遊戲
如標題
突然發現主角血量減少到0依然沒結束遊戲
不確定到底是什麼問題,想請教發生這類問題可能的原因?

殭屍遊戲死不了就都不用玩拉~
作者: jianyulei    时间: 2015-10-30 14:22
本帖最后由 jianyulei 于 2015-10-30 14:25 编辑

首先将工程复制粘贴,然后把粘贴出来的工程的脚本全删,看看效果是否存在。
我以前就出现过HP为0是仍然可以行动,但所有行动灰显导致游戏完全卡死的BUG,后来排查后发现是 技能消费HP 的脚本的原本BUG。

会点脚本知识的话,可以尝试全局搜索与死亡相关的判断变量,看看是不是有某个脚本重写了
作者: duzine    时间: 2015-10-30 14:54
這一刪更加絕望了阿....
幾乎都刪光了,居然還不死...
吐血
作者: duzine    时间: 2015-10-30 17:12
中午搞到晚上都還沒搞定


好不容易找到沒這個問題的版本備份,居然
比對腳本刪減還是解決不了....

腳本全刪都行不通了,怎麼會這樣
作者: duzine    时间: 2015-10-30 17:19
有這麼邪門的嗎?
HP 只是寫好玩的,什麼事件都能繼續執行
(確定不是公共事件,腳本都刪過了,遊戲DLL都乾淨了一遍)

20151030_171830.png (171.6 KB, 下载次数: 46)

20151030_171830.png

作者: 猪衰衰    时间: 2015-10-30 17:34
这种情况应该是默认脚本的问题吧,你执行游戏结束的事件命令有用吗?
作者: wangyanzhe6    时间: 2015-10-30 18:15
把你的主角设定以及主角职业设定发个图来看一下,顺便发一张0血不死的截图,以便我们
更好的了解你的问题,像这种只可能是人设自身的问题。
作者: 落雪鸦杀    时间: 2015-10-30 19:00
检查一下数据库和并行事件,看看数据库状态第一栏是不是有误操作。
然后如果没有就是……默认脚本的问题了……
作者: jianyulei    时间: 2015-10-30 19:02
本帖最后由 jianyulei 于 2015-10-30 19:06 编辑

你那图片上主角根本没有死亡的状态,看来是HP为0时的状态判定有问题。最好让人看看战斗图,你那截图我怎么看都是觉得脚本没删干净
Game_BattlerBase和Game_Battler里所有有关无法战斗的判定对比新工程看出有问题了吗?另外点中脚本的名字然后shift+ctrl+f 可以全局搜索

作者: duzine    时间: 2015-10-30 19:04
狀態欄畫面如下
這方面在不死問題尚未出現前就做修改了,所以也不確定

未命名.png (66.51 KB, 下载次数: 41)

未命名.png

作者: duzine    时间: 2015-10-30 19:12
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_BattlerBase
  4. #------------------------------------------------------------------------------
  5. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  6. #==============================================================================

  7. class Game_BattlerBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 常量(特性)
  10.   #--------------------------------------------------------------------------
  11.   FEATURE_ELEMENT_RATE  = 11              # 属性抗性
  12.   FEATURE_DEBUFF_RATE   = 12              # 弱化抗性
  13.   FEATURE_STATE_RATE    = 13              # 状态抗性
  14.   FEATURE_STATE_RESIST  = 14              # 状态免疫
  15.   FEATURE_PARAM         = 21              # 普通能力
  16.   FEATURE_XPARAM        = 22              # 添加能力
  17.   FEATURE_SPARAM        = 23              # 特殊能力
  18.   FEATURE_ATK_ELEMENT   = 31              # 攻击附带属性
  19.   FEATURE_ATK_STATE     = 32              # 攻击附带状态
  20.   FEATURE_ATK_SPEED     = 33              # 修正攻击速度
  21.   FEATURE_ATK_TIMES     = 34              # 添加攻击次数
  22.   FEATURE_STYPE_ADD     = 41              # 添加技能类型
  23.   FEATURE_STYPE_SEAL    = 42              # 禁用技能类型
  24.   FEATURE_SKILL_ADD     = 43              # 添加技能
  25.   FEATURE_SKILL_SEAL    = 44              # 禁用技能
  26.   FEATURE_EQUIP_WTYPE   = 51              # 可装备武器类型
  27.   FEATURE_EQUIP_ATYPE   = 52              # 可装备护甲类型
  28.   FEATURE_EQUIP_FIX     = 53              # 固定装备
  29.   FEATURE_EQUIP_SEAL    = 54              # 禁用装备
  30.   FEATURE_SLOT_TYPE     = 55              # 装备风格
  31.   FEATURE_ACTION_PLUS   = 61              # 添加行动次数
  32.   FEATURE_SPECIAL_FLAG  = 62              # 特殊标志
  33.   FEATURE_COLLAPSE_TYPE = 63              # 消失效果
  34.   FEATURE_PARTY_ABILITY = 64              # 队伍能力
  35.   #--------------------------------------------------------------------------
  36.   # ● 常量(特殊标志)
  37.   #--------------------------------------------------------------------------
  38.   FLAG_ID_AUTO_BATTLE   = 0               # 自动战斗
  39.   FLAG_ID_GUARD         = 1               # 擅长防御
  40.   FLAG_ID_SUBSTITUTE    = 2               # 保护弱者
  41.   FLAG_ID_PRESERVE_TP   = 3               # 特技专注
  42.   #--------------------------------------------------------------------------
  43.   # ● 常量(能力强化/弱化图标的起始编号)
  44.   #--------------------------------------------------------------------------
  45.   ICON_BUFF_START       = 64              # 强化(16 个)
  46.   ICON_DEBUFF_START     = 80              # 弱化(16 个)
  47.   #--------------------------------------------------------------------------
  48.   # ● 定义实例变量
  49.   #--------------------------------------------------------------------------
  50.   attr_reader   :hp                       # HP
  51.   attr_reader   :mp                       # MP
  52.   attr_reader   :tp                       # TP
  53.   #--------------------------------------------------------------------------
  54.   # ● 各种能力值的简易访问方法
  55.   #--------------------------------------------------------------------------
  56.   def mhp;  param(0);   end    # 最大HP          Maximum Hit Point
  57.   def mmp;  param(1);   end    # 最大MP          Maximum Magic Point
  58.   def atk;  param(2);   end    # 物理攻击        ATtacK power
  59.   def def;  param(3);   end    # 物理防御        DEFense power
  60.   def mat;  param(4);   end    # 魔法攻击        Magic ATtack power
  61.   def mdf;  param(5);   end    # 魔法防御        Magic DeFense power
  62.   def agi;  param(6);   end    # 敏 捷 值        AGIlity
  63.   def luk;  param(7);   end    # 幸 运 值        LUcK
  64.   def hit;  xparam(0);  end    # 成功几率        HIT rate
  65.   def eva;  xparam(1);  end    # 闪避几率        EVAsion rate
  66.   def cri;  xparam(2);  end    # 必杀几率        CRItical rate
  67.   def cev;  xparam(3);  end    # 闪避必杀几率    Critical EVasion rate
  68.   def mev;  xparam(4);  end    # 闪避魔法几率    Magic EVasion rate
  69.   def mrf;  xparam(5);  end    # 反射魔法几率    Magic ReFlection rate
  70.   def cnt;  xparam(6);  end    # 反击几率        CouNTer attack rate
  71.   def hrg;  xparam(7);  end    # HP再生速度      Hp ReGeneration rate
  72.   def mrg;  xparam(8);  end    # MP再生速度      Mp ReGeneration rate
  73.   def trg;  xparam(9);  end    # TP再生速度      Tp ReGeneration rate
  74.   def tgr;  sparam(0);  end    # 受到攻击的几率        TarGet Rate
  75.   def grd;  sparam(1);  end    # 防御效果比率    GuaRD effect rate
  76.   def rec;  sparam(2);  end    # 恢复效果比率    RECovery effect rate
  77.   def pha;  sparam(3);  end    # 药理知识        PHArmacology
  78.   def mcr;  sparam(4);  end    # MP消费率        Mp Cost Rate
  79.   def tcr;  sparam(5);  end    # TP消耗率        Tp Charge Rate
  80.   def pdr;  sparam(6);  end    # 物理伤害加成    Physical Damage Rate
  81.   def mdr;  sparam(7);  end    # 魔法伤害加成    Magical Damage Rate
  82.   def fdr;  sparam(8);  end    # 地形伤害加成    Floor Damage Rate
  83.   def exr;  sparam(9);  end    # 经验获得加成    EXperience Rate
  84.   #--------------------------------------------------------------------------
  85.   # ● 初始化对象
  86.   #--------------------------------------------------------------------------
  87.   def initialize
  88.     @hp = @mp = @tp = 0
  89.     @hidden = false
  90.     clear_param_plus
  91.     clear_states
  92.     clear_buffs
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 清除能力的增加值
  96.   #--------------------------------------------------------------------------
  97.   def clear_param_plus
  98.     @param_plus = [0] * 8
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 清除状态信息
  102.   #--------------------------------------------------------------------------
  103.   def clear_states
  104.     @states = []
  105.     @state_turns = {}
  106.     @state_steps = {}
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 消除状态
  110.   #--------------------------------------------------------------------------
  111.   def erase_state(state_id)
  112.     @states.delete(state_id)
  113.     @state_turns.delete(state_id)
  114.     @state_steps.delete(state_id)
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 清除能力强化信息
  118.   #--------------------------------------------------------------------------
  119.   def clear_buffs
  120.     @buffs = Array.new(8) { 0 }
  121.     @buff_turns = {}
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 检査是否含有某状态
  125.   #--------------------------------------------------------------------------
  126.   def state?(state_id)
  127.     @states.include?(state_id)
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 检査是否含有无法战斗状态
  131.   #--------------------------------------------------------------------------
  132.   def death_state?
  133.     state?(death_state_id)
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 获取无法战斗的状态ID
  137.   #--------------------------------------------------------------------------
  138.   def death_state_id
  139.     return 1
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 获取当前状态的实例数组
  143.   #--------------------------------------------------------------------------
  144.   def states
  145.     @states.collect {|id| $data_states[id] }
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 获取当前状态的图标编号数组
  149.   #--------------------------------------------------------------------------
  150.   def state_icons
  151.     icons = states.collect {|state| state.icon_index }
  152.     icons.delete(0)
  153.     icons
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 获取当前强化/弱化状态的图标编号数组
  157.   #--------------------------------------------------------------------------
  158.   def buff_icons
  159.     icons = []
  160.     @buffs.each_with_index {|lv, i| icons.push(buff_icon_index(lv, i)) }
  161.     icons.delete(0)
  162.     icons
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 获取强化/弱化状态的对应图标编号
  166.   #--------------------------------------------------------------------------
  167.   def buff_icon_index(buff_level, param_id)
  168.     if buff_level > 0
  169.       return ICON_BUFF_START + (buff_level - 1) * 8 + param_id
  170.     elsif buff_level < 0
  171.       return ICON_DEBUFF_START + (-buff_level - 1) * 8 + param_id
  172.     else
  173.       return 0
  174.     end
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 获取所有拥有特性的实例的数组
  178.   #--------------------------------------------------------------------------
  179.   def feature_objects
  180.     states
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 获取所有特性实例的数组
  184.   #--------------------------------------------------------------------------
  185.   def all_features
  186.     feature_objects.inject([]) {|r, obj| r + obj.features }
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 获取特性实例的数组(限定特性代码)
  190.   #--------------------------------------------------------------------------
  191.   def features(code)
  192.     all_features.select {|ft| ft.code == code }
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 获取特性实例的数组(限定特性代码和数据ID)
  196.   #--------------------------------------------------------------------------
  197.   def features_with_id(code, id)
  198.     all_features.select {|ft| ft.code == code && ft.data_id == id }
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 计算特性值的乘积
  202.   #--------------------------------------------------------------------------
  203.   def features_pi(code, id)
  204.     features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 计算特性值的总和(指定数据ID)
  208.   #--------------------------------------------------------------------------
  209.   def features_sum(code, id)
  210.     features_with_id(code, id).inject(0.0) {|r, ft| r += ft.value }
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 计算特性值的总和(不限定数据ID)
  214.   #--------------------------------------------------------------------------
  215.   def features_sum_all(code)
  216.     features(code).inject(0.0) {|r, ft| r += ft.value }
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 特性的集合和计算
  220.   #--------------------------------------------------------------------------
  221.   def features_set(code)
  222.     features(code).inject([]) {|r, ft| r |= [ft.data_id] }
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 获取普通能力的基础值
  226.   #--------------------------------------------------------------------------
  227.   def param_base(param_id)
  228.     return 0
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 获取普通能力的附加值
  232.   #--------------------------------------------------------------------------
  233.   def param_plus(param_id)
  234.     @param_plus[param_id]
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 获取普通能力的最小值
  238.   #--------------------------------------------------------------------------
  239.   def param_min(param_id)
  240.     return 0 if param_id == 1  # MMP
  241.     return 1
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 获取普通能力的最大值
  245.   #--------------------------------------------------------------------------
  246.   def param_max(param_id)
  247.     return 999999 if param_id == 0  # MHP
  248.     return 9999   if param_id == 1  # MMP
  249.     return 999
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 获取普通能力的变化率
  253.   #--------------------------------------------------------------------------
  254.   def param_rate(param_id)
  255.     features_pi(FEATURE_PARAM, param_id)
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 获取普通能力的强化/弱化变化率
  259.   #--------------------------------------------------------------------------
  260.   def param_buff_rate(param_id)
  261.     @buffs[param_id] * 0.25 + 1.0
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 获取普通能力
  265.   #--------------------------------------------------------------------------
  266.   def param(param_id)
  267.     value = param_base(param_id) + param_plus(param_id)
  268.     value *= param_rate(param_id) * param_buff_rate(param_id)
  269.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 获取添加能力
  273.   #--------------------------------------------------------------------------
  274.   def xparam(xparam_id)
  275.     features_sum(FEATURE_XPARAM, xparam_id)
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 获取特殊能力
  279.   #--------------------------------------------------------------------------
  280.   def sparam(sparam_id)
  281.     features_pi(FEATURE_SPARAM, sparam_id)
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 获取属性抗性
  285.   #--------------------------------------------------------------------------
  286.   def element_rate(element_id)
  287.     features_pi(FEATURE_ELEMENT_RATE, element_id)
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 获取弱化抗性
  291.   #--------------------------------------------------------------------------
  292.   def debuff_rate(param_id)
  293.     features_pi(FEATURE_DEBUFF_RATE, param_id)
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● 获取状态抗性
  297.   #--------------------------------------------------------------------------
  298.   def state_rate(state_id)
  299.     features_pi(FEATURE_STATE_RATE, state_id)
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 获取免疫状态数组
  303.   #--------------------------------------------------------------------------
  304.   def state_resist_set
  305.     features_set(FEATURE_STATE_RESIST)
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 判定状态是否免疫
  309.   #--------------------------------------------------------------------------
  310.   def state_resist?(state_id)
  311.     state_resist_set.include?(state_id)
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 获取攻击附加属性
  315.   #--------------------------------------------------------------------------
  316.   def atk_elements
  317.     features_set(FEATURE_ATK_ELEMENT)
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● 获取攻击附加状态
  321.   #--------------------------------------------------------------------------
  322.   def atk_states
  323.     features_set(FEATURE_ATK_STATE)
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ● 获取攻击附加状态的发动几率
  327.   #--------------------------------------------------------------------------
  328.   def atk_states_rate(state_id)
  329.     features_sum(FEATURE_ATK_STATE, state_id)
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 获取修正攻击速度
  333.   #--------------------------------------------------------------------------
  334.   def atk_speed
  335.     features_sum_all(FEATURE_ATK_SPEED)
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 获取添加攻击次数
  339.   #--------------------------------------------------------------------------
  340.   def atk_times_add
  341.     [features_sum_all(FEATURE_ATK_TIMES), 0].max
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ● 获取添加技能类型
  345.   #--------------------------------------------------------------------------
  346.   def added_skill_types
  347.     features_set(FEATURE_STYPE_ADD)
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 判定技能类型是否被禁用
  351.   #--------------------------------------------------------------------------
  352.   def skill_type_sealed?(stype_id)
  353.     features_set(FEATURE_STYPE_SEAL).include?(stype_id)
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 获取添加的技能
  357.   #--------------------------------------------------------------------------
  358.   def added_skills
  359.     features_set(FEATURE_SKILL_ADD)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 判定技能是否被禁用
  363.   #--------------------------------------------------------------------------
  364.   def skill_sealed?(skill_id)
  365.     features_set(FEATURE_SKILL_SEAL).include?(skill_id)
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 判定武器是否可以装备
  369.   #--------------------------------------------------------------------------
  370.   def equip_wtype_ok?(wtype_id)
  371.     features_set(FEATURE_EQUIP_WTYPE).include?(wtype_id)
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ● 判定护甲是否可以装备
  375.   #--------------------------------------------------------------------------
  376.   def equip_atype_ok?(atype_id)
  377.     features_set(FEATURE_EQUIP_ATYPE).include?(atype_id)
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 判定是否固定武器
  381.   #--------------------------------------------------------------------------
  382.   def equip_type_fixed?(etype_id)
  383.     features_set(FEATURE_EQUIP_FIX).include?(etype_id)
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ● 判定装备是否被禁用
  387.   #--------------------------------------------------------------------------
  388.   def equip_type_sealed?(etype_id)
  389.     features_set(FEATURE_EQUIP_SEAL).include?(etype_id)
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● 获取装备风格
  393.   #--------------------------------------------------------------------------
  394.   def slot_type
  395.     features_set(FEATURE_SLOT_TYPE).max || 0
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 判定是否双持武器
  399.   #--------------------------------------------------------------------------
  400.   def dual_wield?
  401.     slot_type == 1
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● 获取添加行动次数几率的数组
  405.   #--------------------------------------------------------------------------
  406.   def action_plus_set
  407.     features(FEATURE_ACTION_PLUS).collect {|ft| ft.value }
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● 判定特殊标志
  411.   #--------------------------------------------------------------------------
  412.   def special_flag(flag_id)
  413.     features(FEATURE_SPECIAL_FLAG).any? {|ft| ft.data_id == flag_id }
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 获取消失效果
  417.   #--------------------------------------------------------------------------
  418.   def collapse_type
  419.     features_set(FEATURE_COLLAPSE_TYPE).max || 0
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # ● 判定队伍能力
  423.   #--------------------------------------------------------------------------
  424.   def party_ability(ability_id)
  425.     features(FEATURE_PARTY_ABILITY).any? {|ft| ft.data_id == ability_id }
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 判定是否自动战斗
  429.   #--------------------------------------------------------------------------
  430.   def auto_battle?
  431.     special_flag(FLAG_ID_AUTO_BATTLE)
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 判定是否擅长防御
  435.   #--------------------------------------------------------------------------
  436.   def guard?
  437.     special_flag(FLAG_ID_GUARD) && movable?
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● 判定是否保护弱者
  441.   #--------------------------------------------------------------------------
  442.   def substitute?
  443.     special_flag(FLAG_ID_SUBSTITUTE) && movable?
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● 判定是否特技专注
  447.   #--------------------------------------------------------------------------
  448.   def preserve_tp?
  449.     special_flag(FLAG_ID_PRESERVE_TP)
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● 添加能力
  453.   #--------------------------------------------------------------------------
  454.   def add_param(param_id, value)
  455.     @param_plus[param_id] += value
  456.     refresh
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● 更改 HP
  460.   #--------------------------------------------------------------------------
  461.   def hp=(hp)
  462.     @hp = hp
  463.     refresh
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ● 更改 MP
  467.   #--------------------------------------------------------------------------
  468.   def mp=(mp)
  469.     @mp = mp
  470.     refresh
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● 增减 HP (事件用)
  474.   #     value        : 数值
  475.   #     enable_death : 是否允许致死
  476.   #--------------------------------------------------------------------------
  477.   def change_hp(value, enable_death)
  478.     if !enable_death && @hp + value <= 0
  479.       self.hp = 1
  480.     else
  481.       self.hp += value
  482.     end
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 更改 TP
  486.   #--------------------------------------------------------------------------
  487.   def tp=(tp)
  488.     @tp = [[tp, max_tp].min, 0].max
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 获取 TP 的最大值
  492.   #--------------------------------------------------------------------------
  493.   def max_tp
  494.     return 100
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ● 刷新
  498.   #--------------------------------------------------------------------------
  499.   def refresh
  500.     state_resist_set.each {|state_id| erase_state(state_id) }
  501.     @hp = [[@hp, mhp].min, 0].max
  502.     @mp = [[@mp, mmp].min, 0].max
  503.     @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 完全恢复
  507.   #--------------------------------------------------------------------------
  508.   def recover_all
  509.     clear_states
  510.     @hp = mhp
  511.     @mp = mmp
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● 获取 HP 的比率
  515.   #--------------------------------------------------------------------------
  516.   def hp_rate
  517.     @hp.to_f / mhp
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ● 获取 MP 的比率
  521.   #--------------------------------------------------------------------------
  522.   def mp_rate
  523.     mmp > 0 ? @mp.to_f / mmp : 0
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ● 获取 TP 的比率
  527.   #--------------------------------------------------------------------------
  528.   def tp_rate
  529.     @tp.to_f / 100
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ● 隐藏
  533.   #--------------------------------------------------------------------------
  534.   def hide
  535.     @hidden = true
  536.   end
  537.   #--------------------------------------------------------------------------
  538.   # ● 出现
  539.   #--------------------------------------------------------------------------
  540.   def appear
  541.     @hidden = false
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # ● 获取隐藏状态
  545.   #--------------------------------------------------------------------------
  546.   def hidden?
  547.     @hidden
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● 判定是否存在
  551.   #--------------------------------------------------------------------------
  552.   def exist?
  553.     !hidden?
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 判定是否死亡
  557.   #--------------------------------------------------------------------------
  558.   def dead?
  559.     exist? && death_state?
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 判定是否存活
  563.   #--------------------------------------------------------------------------
  564.   def alive?
  565.     exist? && !death_state?
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 判定是否正常
  569.   #--------------------------------------------------------------------------
  570.   def normal?
  571.     exist? && restriction == 0
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● 判定是否可以输入指令
  575.   #--------------------------------------------------------------------------
  576.   def inputable?
  577.     normal? && !auto_battle?
  578.   end
  579.   #--------------------------------------------------------------------------
  580.   # ● 判定是否可以行动
  581.   #--------------------------------------------------------------------------
  582.   def movable?
  583.     exist? && restriction < 4
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● 判定是否处于混乱
  587.   #--------------------------------------------------------------------------
  588.   def confusion?
  589.     exist? && restriction >= 1 && restriction <= 3
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● 获取混乱等级
  593.   #--------------------------------------------------------------------------
  594.   def confusion_level
  595.     confusion? ? restriction : 0
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 判定是否队友
  599.   #--------------------------------------------------------------------------
  600.   def actor?
  601.     return false
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 判定是否敌人
  605.   #--------------------------------------------------------------------------
  606.   def enemy?
  607.     return false
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ● 状态排序
  611.   #    依照优先度排列数组 @states,高优先度显示的状态排在前面。
  612.   #--------------------------------------------------------------------------
  613.   def sort_states
  614.     @states = @states.sort_by {|id| [-$data_states[id].priority, id] }
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 获取限制状态
  618.   #    从当前附加的状态中获取限制最大的状态
  619.   #--------------------------------------------------------------------------
  620.   def restriction
  621.     states.collect {|state| state.restriction }.push(0).max
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● 获取最重要的状态信息
  625.   #--------------------------------------------------------------------------
  626.   def most_important_state_text
  627.     states.each {|state| return state.message3 unless state.message3.empty? }
  628.     return ""
  629.   end
  630.   #--------------------------------------------------------------------------
  631.   # ● 判定是否装备着使用此技能所需要装备武器
  632.   #--------------------------------------------------------------------------
  633.   def skill_wtype_ok?(skill)
  634.     return true
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 计算技能消费的 MP
  638.   #--------------------------------------------------------------------------
  639.   def skill_mp_cost(skill)
  640.     (skill.mp_cost * mcr).to_i
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ● 计算技能消费的 TP
  644.   #--------------------------------------------------------------------------
  645.   def skill_tp_cost(skill)
  646.     skill.tp_cost
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● 判定是否足够扣除技能的使用消耗
  650.   #--------------------------------------------------------------------------
  651.   def skill_cost_payable?(skill)
  652.     tp >= skill_tp_cost(skill) && mp >= skill_mp_cost(skill)
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● 扣除技能的使用消耗
  656.   #--------------------------------------------------------------------------
  657.   def pay_skill_cost(skill)
  658.     self.mp -= skill_mp_cost(skill)
  659.     self.tp -= skill_tp_cost(skill)
  660.   end
  661.   #--------------------------------------------------------------------------
  662.   # ● 检查是否可以使用技能/物品
  663.   #--------------------------------------------------------------------------
  664.   def occasion_ok?(item)
  665.     $game_party.in_battle ? item.battle_ok? : item.menu_ok?
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● 检查技能/物品的使用条件(共通)
  669.   #--------------------------------------------------------------------------
  670.   def usable_item_conditions_met?(item)
  671.     movable? && occasion_ok?(item)
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● 检查技能的使用条件
  675.   #--------------------------------------------------------------------------
  676.   def skill_conditions_met?(skill)
  677.     usable_item_conditions_met?(skill) &&
  678.     skill_wtype_ok?(skill) && skill_cost_payable?(skill) &&
  679.     !skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id)
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● 检查物品的使用条件
  683.   #--------------------------------------------------------------------------
  684.   def item_conditions_met?(item)
  685.     usable_item_conditions_met?(item) && $game_party.has_item?(item)
  686.   end
  687.   #--------------------------------------------------------------------------
  688.   # ● 判定技能/使用物品是否可用
  689.   #--------------------------------------------------------------------------
  690.   def usable?(item)
  691.     return skill_conditions_met?(item) if item.is_a?(RPG::Skill)
  692.     return item_conditions_met?(item)  if item.is_a?(RPG::Item)
  693.     return false
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 判定物品是否可以装备
  697.   #--------------------------------------------------------------------------
  698.   def equippable?(item)
  699.     return false unless item.is_a?(RPG::EquipItem)
  700.     return false if equip_type_sealed?(item.etype_id)
  701.     return equip_wtype_ok?(item.wtype_id) if item.is_a?(RPG::Weapon)
  702.     return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor)
  703.     return false
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● 获取普通攻击的技能 ID
  707.   #--------------------------------------------------------------------------
  708.   def attack_skill_id
  709.     return 1
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 获取防御的技能 ID
  713.   #--------------------------------------------------------------------------
  714.   def guard_skill_id
  715.     return 2
  716.   end
  717.   #--------------------------------------------------------------------------
  718.   # ● 判定是否能使用普通攻击
  719.   #--------------------------------------------------------------------------
  720.   def attack_usable?
  721.     usable?($data_skills[attack_skill_id])
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 判定是否能进行防御
  725.   #--------------------------------------------------------------------------
  726.   def guard_usable?
  727.     usable?($data_skills[guard_skill_id])
  728.   end
  729. end
复制代码
以上為Game_BattlerBase,以下為Game_Battler
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Battler
  4. #------------------------------------------------------------------------------
  5. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  6. #==============================================================================

  7. class Game_Battler < Game_BattlerBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 常量(使用效果)
  10.   #--------------------------------------------------------------------------
  11.   EFFECT_RECOVER_HP     = 11              # 恢复 HP
  12.   EFFECT_RECOVER_MP     = 12              # 恢复 MP
  13.   EFFECT_GAIN_TP        = 13              # 增加 TP
  14.   EFFECT_ADD_STATE      = 21              # 附加状态
  15.   EFFECT_REMOVE_STATE   = 22              # 解除状态
  16.   EFFECT_ADD_BUFF       = 31              # 强化能力
  17.   EFFECT_ADD_DEBUFF     = 32              # 弱化能力
  18.   EFFECT_REMOVE_BUFF    = 33              # 解除能力强化
  19.   EFFECT_REMOVE_DEBUFF  = 34              # 解除能力弱化
  20.   EFFECT_SPECIAL        = 41              # 特殊效果
  21.   EFFECT_GROW           = 42              # 能力提升
  22.   EFFECT_LEARN_SKILL    = 43              # 学会技能
  23.   EFFECT_COMMON_EVENT   = 44              # 公共事件
  24.   #--------------------------------------------------------------------------
  25.   # ● 常量(特殊效果)
  26.   #--------------------------------------------------------------------------
  27.   SPECIAL_EFFECT_ESCAPE = 0               # 撤退
  28.   #--------------------------------------------------------------------------
  29.   # ● 定义实例变量
  30.   #--------------------------------------------------------------------------
  31.   attr_reader   :battler_name             # 战斗图像文件名
  32.   attr_reader   :battler_hue              # 战斗图像色相
  33.   attr_reader   :action_times             # 行动回数
  34.   attr_reader   :actions                  # 战斗行动(行动方)
  35.   attr_reader   :speed                    # 行动速度
  36.   attr_reader   :result                   # 行动结果(目标方)
  37.   attr_accessor :last_target_index        # 最后目标的索引
  38.   attr_accessor :animation_id             # 动画 ID
  39.   attr_accessor :animation_mirror         # 动画左右反转的标志
  40.   attr_accessor :sprite_effect_type       # 精灵的效果
  41.   #--------------------------------------------------------------------------
  42.   # ● 初始化对象
  43.   #--------------------------------------------------------------------------
  44.   def initialize
  45.     @battler_name = ""
  46.     @battler_hue = 0
  47.     @actions = []
  48.     @speed = 0
  49.     @result = Game_ActionResult.new(self)
  50.     @last_target_index = 0
  51.     @guarding = false
  52.     clear_sprite_effects
  53.     super
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 清除精灵的效果
  57.   #--------------------------------------------------------------------------
  58.   def clear_sprite_effects
  59.     @animation_id = 0
  60.     @animation_mirror = false
  61.     @sprite_effect_type = nil
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 清除战斗行动
  65.   #--------------------------------------------------------------------------
  66.   def clear_actions
  67.     @actions.clear
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 清除状态信息
  71.   #--------------------------------------------------------------------------
  72.   def clear_states
  73.     super
  74.     @result.clear_status_effects
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 附加状态
  78.   #--------------------------------------------------------------------------
  79.   def add_state(state_id)
  80.     if state_addable?(state_id)
  81.       add_new_state(state_id) unless state?(state_id)
  82.       reset_state_counts(state_id)
  83.       @result.added_states.push(state_id).uniq!
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 判定状态是否可以附加
  88.   #--------------------------------------------------------------------------
  89.   def state_addable?(state_id)
  90.     alive? && $data_states[state_id] && !state_resist?(state_id) &&
  91.       !state_removed?(state_id) && !state_restrict?(state_id)
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 判定状态是否已被解除
  95.   #--------------------------------------------------------------------------
  96.   def state_removed?(state_id)
  97.     @result.removed_states.include?(state_id)
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 判定状态是否受到行动限制影响而无法附加
  101.   #--------------------------------------------------------------------------
  102.   def state_restrict?(state_id)
  103.     $data_states[state_id].remove_by_restriction && restriction > 0
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 附加新的状态
  107.   #--------------------------------------------------------------------------
  108.   def add_new_state(state_id)
  109.     die if state_id == death_state_id
  110.     @states.push(state_id)
  111.     on_restrict if restriction > 0
  112.     sort_states
  113.     refresh
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 行动受到限制时的处理
  117.   #--------------------------------------------------------------------------
  118.   def on_restrict
  119.     clear_actions
  120.     states.each do |state|
  121.       remove_state(state.id) if state.remove_by_restriction
  122.     end
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 重置状态计数(回合数或步数)
  126.   #--------------------------------------------------------------------------
  127.   def reset_state_counts(state_id)
  128.     state = $data_states[state_id]
  129.     variance = 1 + [state.max_turns - state.min_turns, 0].max
  130.     @state_turns[state_id] = state.min_turns + rand(variance)
  131.     @state_steps[state_id] = state.steps_to_remove
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 解除状态
  135.   #--------------------------------------------------------------------------
  136.   def remove_state(state_id)
  137.     if state?(state_id)
  138.       revive if state_id == death_state_id
  139.       erase_state(state_id)
  140.       refresh
  141.       @result.removed_states.push(state_id).uniq!
  142.     end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 死亡
  146.   #--------------------------------------------------------------------------
  147.   def die
  148.     @hp = 0
  149.     clear_states
  150.     clear_buffs
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 复活
  154.   #--------------------------------------------------------------------------
  155.   def revive
  156.     @hp = 1 if @hp == 0
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 撤退
  160.   #--------------------------------------------------------------------------
  161.   def escape
  162.     hide if $game_party.in_battle
  163.     clear_actions
  164.     clear_states
  165.     Sound.play_escape
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 强化能力
  169.   #--------------------------------------------------------------------------
  170.   def add_buff(param_id, turns)
  171.     return unless alive?
  172.     @buffs[param_id] += 1 unless buff_max?(param_id)
  173.     erase_buff(param_id) if debuff?(param_id)
  174.     overwrite_buff_turns(param_id, turns)
  175.     @result.added_buffs.push(param_id).uniq!
  176.     refresh
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 弱化能力
  180.   #--------------------------------------------------------------------------
  181.   def add_debuff(param_id, turns)
  182.     return unless alive?
  183.     @buffs[param_id] -= 1 unless debuff_max?(param_id)
  184.     erase_buff(param_id) if buff?(param_id)
  185.     overwrite_buff_turns(param_id, turns)
  186.     @result.added_debuffs.push(param_id).uniq!
  187.     refresh
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 解除能力强化/弱化状态
  191.   #--------------------------------------------------------------------------
  192.   def remove_buff(param_id)
  193.     return unless alive?
  194.     return if @buffs[param_id] == 0
  195.     erase_buff(param_id)
  196.     @buff_turns.delete(param_id)
  197.     @result.removed_buffs.push(param_id).uniq!
  198.     refresh
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 消除能力强化/弱化
  202.   #--------------------------------------------------------------------------
  203.   def erase_buff(param_id)
  204.     @buffs[param_id] = 0
  205.     @buff_turns[param_id] = 0
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 判定能力强化状态
  209.   #--------------------------------------------------------------------------
  210.   def buff?(param_id)
  211.     @buffs[param_id] > 0
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 判定能力弱化状态
  215.   #--------------------------------------------------------------------------
  216.   def debuff?(param_id)
  217.     @buffs[param_id] < 0
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 判定能力强化是否为最大程度
  221.   #--------------------------------------------------------------------------
  222.   def buff_max?(param_id)
  223.     @buffs[param_id] == 2
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 判定能力弱化是否为最大程度
  227.   #--------------------------------------------------------------------------
  228.   def debuff_max?(param_id)
  229.     @buffs[param_id] == -2
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 重新设置能力强化/弱化的回合数
  233.   #    如果新的回合数比较短,保持原值。
  234.   #--------------------------------------------------------------------------
  235.   def overwrite_buff_turns(param_id, turns)
  236.     @buff_turns[param_id] = turns if @buff_turns[param_id].to_i < turns
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 更新状态的回总数数
  240.   #--------------------------------------------------------------------------
  241.   def update_state_turns
  242.     states.each do |state|
  243.       @state_turns[state.id] -= 1 if @state_turns[state.id] > 0
  244.     end
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 更新强化/弱化的回总数数
  248.   #--------------------------------------------------------------------------
  249.   def update_buff_turns
  250.     @buff_turns.keys.each do |param_id|
  251.       @buff_turns[param_id] -= 1 if @buff_turns[param_id] > 0
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 解除战斗状态
  256.   #--------------------------------------------------------------------------
  257.   def remove_battle_states
  258.     states.each do |state|
  259.       remove_state(state.id) if state.remove_at_battle_end
  260.     end
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 解除所有的强化/弱化状态
  264.   #--------------------------------------------------------------------------
  265.   def remove_all_buffs
  266.     @buffs.size.times {|param_id| remove_buff(param_id) }
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● 状态的自动解除
  270.   #     timing : 时机(1:行动结束 2:回合结束)
  271.   #--------------------------------------------------------------------------
  272.   def remove_states_auto(timing)
  273.     states.each do |state|
  274.       if @state_turns[state.id] == 0 && state.auto_removal_timing == timing
  275.         remove_state(state.id)
  276.       end
  277.     end
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 强化/弱化的自动解除
  281.   #--------------------------------------------------------------------------
  282.   def remove_buffs_auto
  283.     @buffs.size.times do |param_id|
  284.       next if @buffs[param_id] == 0 || @buff_turns[param_id] > 0
  285.       remove_buff(param_id)
  286.     end
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 受到伤害时解除状态
  290.   #--------------------------------------------------------------------------
  291.   def remove_states_by_damage
  292.     states.each do |state|
  293.       if state.remove_by_damage && rand(100) < state.chance_by_damage
  294.         remove_state(state.id)
  295.       end
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● 决定行动回数
  300.   #--------------------------------------------------------------------------
  301.   def make_action_times
  302.     action_plus_set.inject(1) {|r, p| rand < p ? r + 1 : r }
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 生成战斗行动
  306.   #--------------------------------------------------------------------------
  307.   def make_actions
  308.     clear_actions
  309.     return unless movable?
  310.     @actions = Array.new(make_action_times) { Game_Action.new(self) }
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● 决定行动速度
  314.   #--------------------------------------------------------------------------
  315.   def make_speed
  316.     @speed = @actions.collect {|action| action.speed }.min || 0
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 获取当前战斗行动
  320.   #--------------------------------------------------------------------------
  321.   def current_action
  322.     @actions[0]
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 移除当前战斗行动
  326.   #--------------------------------------------------------------------------
  327.   def remove_current_action
  328.     @actions.shift
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 强制战斗行动
  332.   #--------------------------------------------------------------------------
  333.   def force_action(skill_id, target_index)
  334.     clear_actions
  335.     action = Game_Action.new(self, true)
  336.     action.set_skill(skill_id)
  337.     if target_index == -2
  338.       action.target_index = last_target_index
  339.     elsif target_index == -1
  340.       action.decide_random_target
  341.     else
  342.       action.target_index = target_index
  343.     end
  344.     @actions.push(action)
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 计算伤害
  348.   #--------------------------------------------------------------------------
  349.   def make_damage_value(user, item)
  350.     value = item.damage.eval(user, self, $game_variables)
  351.     value *= item_element_rate(user, item)
  352.     value *= pdr if item.physical?
  353.     value *= mdr if item.magical?
  354.     value *= rec if item.damage.recover?
  355.     value = apply_critical(value) if @result.critical
  356.     value = apply_variance(value, item.damage.variance)
  357.     value = apply_guard(value)
  358.     @result.make_damage(value.to_i, item)
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 获取技能/物品的属性修正值
  362.   #--------------------------------------------------------------------------
  363.   def item_element_rate(user, item)
  364.     if item.damage.element_id < 0
  365.       user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
  366.     else
  367.       element_rate(item.damage.element_id)
  368.     end
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● 获取属性的最大修正值,返回所有属性中最有效的一个
  372.   #     elements : 属性 ID 数组
  373.   #--------------------------------------------------------------------------
  374.   def elements_max_rate(elements)
  375.     elements.inject([0.0]) {|r, i| r.push(element_rate(i)) }.max
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 应用关键一击
  379.   #--------------------------------------------------------------------------
  380.   def apply_critical(damage)
  381.     damage * 3
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● 应用离散度
  385.   #--------------------------------------------------------------------------
  386.   def apply_variance(damage, variance)
  387.     amp = [damage.abs * variance / 100, 0].max.to_i
  388.     var = rand(amp + 1) + rand(amp + 1) - amp
  389.     damage >= 0 ? damage + var : damage - var
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● 应用防御修正
  393.   #--------------------------------------------------------------------------
  394.   def apply_guard(damage)
  395.     damage / (damage > 0 && guard? ? 2 * grd : 1)
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 处理伤害
  399.   #    调用前需要设置好
  400.   #    @result.hp_damage   @result.mp_damage
  401.   #    @result.hp_drain    @result.mp_drain
  402.   #--------------------------------------------------------------------------
  403.   def execute_damage(user)
  404.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  405.     self.hp -= @result.hp_damage
  406.     self.mp -= @result.mp_damage
  407.     user.hp += @result.hp_drain
  408.     user.mp += @result.mp_drain
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● 技能/使用物品
  412.   #    对使用目标使用完毕后,应用对于使用目标以外的效果。
  413.   #--------------------------------------------------------------------------
  414.   def use_item(item)
  415.     pay_skill_cost(item) if item.is_a?(RPG::Skill)
  416.     consume_item(item)   if item.is_a?(RPG::Item)
  417.     item.effects.each {|effect| item_global_effect_apply(effect) }
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 消耗物品
  421.   #--------------------------------------------------------------------------
  422.   def consume_item(item)
  423.     $game_party.consume_item(item)
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 应用对于使用目标以外的效果
  427.   #--------------------------------------------------------------------------
  428.   def item_global_effect_apply(effect)
  429.     if effect.code == EFFECT_COMMON_EVENT
  430.       $game_temp.reserve_common_event(effect.data_id)
  431.     end
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 技能/物品的应用测试
  435.   #    如果使用目标的 HP 或者 MP 全满时,禁止使用恢复道具。
  436.   #--------------------------------------------------------------------------
  437.   def item_test(user, item)
  438.     return false if item.for_dead_friend? != dead?
  439.     return true if $game_party.in_battle
  440.     return true if item.for_opponent?
  441.     return true if item.damage.recover? && item.damage.to_hp? && hp < mhp
  442.     return true if item.damage.recover? && item.damage.to_mp? && mp < mmp
  443.     return true if item_has_any_valid_effects?(user, item)
  444.     return false
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 判定技能/物品是否有效果
  448.   #--------------------------------------------------------------------------
  449.   def item_has_any_valid_effects?(user, item)
  450.     item.effects.any? {|effect| item_effect_test(user, item, effect) }
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   # ● 计算技能/物品的反击几率
  454.   #--------------------------------------------------------------------------
  455.   def item_cnt(user, item)
  456.     return 0 unless item.physical?          # 攻击类型不是物理攻击
  457.     return 0 unless opposite?(user)         # 队友无法反击
  458.     return cnt                              # 返回反击几率
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● 计算技能/物品的反射几率
  462.   #--------------------------------------------------------------------------
  463.   def item_mrf(user, item)
  464.     return mrf if item.magical?             # 是魔法攻击则返回反射魔法几率
  465.     return 0
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● 计算技能/物品的成功几率
  469.   #--------------------------------------------------------------------------
  470.   def item_hit(user, item)
  471.     rate = item.success_rate * 0.01         # 获取成功几率
  472.     rate *= user.hit if item.physical?      # 物理攻击:计算成功几率的乘积
  473.     return rate                             # 返回计算后的成功几率
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● 计算技能/物品的闪避几率
  477.   #--------------------------------------------------------------------------
  478.   def item_eva(user, item)
  479.     return eva if item.physical?            # 是物理攻击则返回闪避几率
  480.     return mev if item.magical?             # 是魔法攻击则返回闪避魔法几率
  481.     return 0
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● 计算技能/物品的必杀几率
  485.   #--------------------------------------------------------------------------
  486.   def item_cri(user, item)
  487.     item.damage.critical ? user.cri * (1 - cev) : 0
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● 应用普通攻击的效果
  491.   #--------------------------------------------------------------------------
  492.   def attack_apply(attacker)
  493.     item_apply(attacker, $data_skills[attacker.attack_skill_id])
  494.   end
  495.   #--------------------------------------------------------------------------
  496.   # ● 应用技能/物品的效果
  497.   #--------------------------------------------------------------------------
  498.   def item_apply(user, item)
  499.     @result.clear
  500.     @result.used = item_test(user, item)
  501.     @result.missed = (@result.used && rand >= item_hit(user, item))
  502.     @result.evaded = ([email protected] && rand < item_eva(user, item))
  503.     if @result.hit?
  504.       unless item.damage.none?
  505.         @result.critical = (rand < item_cri(user, item))
  506.         make_damage_value(user, item)
  507.         execute_damage(user)
  508.       end
  509.       item.effects.each {|effect| item_effect_apply(user, item, effect) }
  510.       item_user_effect(user, item)
  511.     end
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● 测试使用效果
  515.   #--------------------------------------------------------------------------
  516.   def item_effect_test(user, item, effect)
  517.     case effect.code
  518.     when EFFECT_RECOVER_HP
  519.       hp < mhp || effect.value1 < 0 || effect.value2 < 0
  520.     when EFFECT_RECOVER_MP
  521.       mp < mmp || effect.value1 < 0 || effect.value2 < 0
  522.     when EFFECT_ADD_STATE
  523.       !state?(effect.data_id)
  524.     when EFFECT_REMOVE_STATE
  525.       state?(effect.data_id)
  526.     when EFFECT_ADD_BUFF
  527.       !buff_max?(effect.data_id)
  528.     when EFFECT_ADD_DEBUFF
  529.       !debuff_max?(effect.data_id)
  530.     when EFFECT_REMOVE_BUFF
  531.       buff?(effect.data_id)
  532.     when EFFECT_REMOVE_DEBUFF
  533.       debuff?(effect.data_id)
  534.     when EFFECT_LEARN_SKILL
  535.       actor? && !skills.include?($data_skills[effect.data_id])
  536.     else
  537.       true
  538.     end
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ● 应用使用效果
  542.   #--------------------------------------------------------------------------
  543.   def item_effect_apply(user, item, effect)
  544.     method_table = {
  545.       EFFECT_RECOVER_HP    => :item_effect_recover_hp,
  546.       EFFECT_RECOVER_MP    => :item_effect_recover_mp,
  547.       EFFECT_GAIN_TP       => :item_effect_gain_tp,
  548.       EFFECT_ADD_STATE     => :item_effect_add_state,
  549.       EFFECT_REMOVE_STATE  => :item_effect_remove_state,
  550.       EFFECT_ADD_BUFF      => :item_effect_add_buff,
  551.       EFFECT_ADD_DEBUFF    => :item_effect_add_debuff,
  552.       EFFECT_REMOVE_BUFF   => :item_effect_remove_buff,
  553.       EFFECT_REMOVE_DEBUFF => :item_effect_remove_debuff,
  554.       EFFECT_SPECIAL       => :item_effect_special,
  555.       EFFECT_GROW          => :item_effect_grow,
  556.       EFFECT_LEARN_SKILL   => :item_effect_learn_skill,
  557.       EFFECT_COMMON_EVENT  => :item_effect_common_event,
  558.     }
  559.     method_name = method_table[effect.code]
  560.     send(method_name, user, item, effect) if method_name
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 应用“恢复 HP”效果
  564.   #--------------------------------------------------------------------------
  565.   def item_effect_recover_hp(user, item, effect)
  566.     value = (mhp * effect.value1 + effect.value2) * rec
  567.     value *= user.pha if item.is_a?(RPG::Item)
  568.     value = value.to_i
  569.     @result.hp_damage -= value
  570.     @result.success = true
  571.     self.hp += value
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● 应用“恢复 MP”效果
  575.   #--------------------------------------------------------------------------
  576.   def item_effect_recover_mp(user, item, effect)
  577.     value = (mmp * effect.value1 + effect.value2) * rec
  578.     value *= user.pha if item.is_a?(RPG::Item)
  579.     value = value.to_i
  580.     @result.mp_damage -= value
  581.     @result.success = true if value != 0
  582.     self.mp += value
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ● 应用“增加 TP”效果
  586.   #--------------------------------------------------------------------------
  587.   def item_effect_gain_tp(user, item, effect)
  588.     value = effect.value1.to_i
  589.     @result.tp_damage -= value
  590.     @result.success = true if value != 0
  591.     self.tp += value
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ● 应用“附加状态”效果
  595.   #--------------------------------------------------------------------------
  596.   def item_effect_add_state(user, item, effect)
  597.     if effect.data_id == 0
  598.       item_effect_add_state_attack(user, item, effect)
  599.     else
  600.       item_effect_add_state_normal(user, item, effect)
  601.     end
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 应用“状态附加”效果:普通攻击
  605.   #--------------------------------------------------------------------------
  606.   def item_effect_add_state_attack(user, item, effect)
  607.     user.atk_states.each do |state_id|
  608.       chance = effect.value1
  609.       chance *= state_rate(state_id)
  610.       chance *= user.atk_states_rate(state_id)
  611.       chance *= luk_effect_rate(user)
  612.       if rand < chance
  613.         add_state(state_id)
  614.         @result.success = true
  615.       end
  616.     end
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ● 应用“状态附加”效果:普通
  620.   #--------------------------------------------------------------------------
  621.   def item_effect_add_state_normal(user, item, effect)
  622.     chance = effect.value1
  623.     chance *= state_rate(effect.data_id) if opposite?(user)
  624.     chance *= luk_effect_rate(user)      if opposite?(user)
  625.     if rand < chance
  626.       add_state(effect.data_id)
  627.       @result.success = true
  628.     end
  629.   end
  630.   #--------------------------------------------------------------------------
  631.   # ● 应用“状态解除”效果
  632.   #--------------------------------------------------------------------------
  633.   def item_effect_remove_state(user, item, effect)
  634.     chance = effect.value1
  635.     if rand < chance
  636.       remove_state(effect.data_id)
  637.       @result.success = true
  638.     end
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ● 应用“强化能力”效果
  642.   #--------------------------------------------------------------------------
  643.   def item_effect_add_buff(user, item, effect)
  644.     add_buff(effect.data_id, effect.value1)
  645.     @result.success = true
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● 应用“弱化能力”效果
  649.   #--------------------------------------------------------------------------
  650.   def item_effect_add_debuff(user, item, effect)
  651.     chance = debuff_rate(effect.data_id) * luk_effect_rate(user)
  652.     if rand < chance
  653.       add_debuff(effect.data_id, effect.value1)
  654.       @result.success = true
  655.     end
  656.   end
  657.   #--------------------------------------------------------------------------
  658.   # ● 应用“解除能力强化”效果
  659.   #--------------------------------------------------------------------------
  660.   def item_effect_remove_buff(user, item, effect)
  661.     remove_buff(effect.data_id) if @buffs[effect.data_id] > 0
  662.     @result.success = true
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ● 应用“解除能力弱化”效果
  666.   #--------------------------------------------------------------------------
  667.   def item_effect_remove_debuff(user, item, effect)
  668.     remove_buff(effect.data_id) if @buffs[effect.data_id] < 0
  669.     @result.success = true
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 应用“特殊效果”效果
  673.   #--------------------------------------------------------------------------
  674.   def item_effect_special(user, item, effect)
  675.     case effect.data_id
  676.     when SPECIAL_EFFECT_ESCAPE
  677.       escape
  678.     end
  679.     @result.success = true
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● 应用“能力提升”效果
  683.   #--------------------------------------------------------------------------
  684.   def item_effect_grow(user, item, effect)
  685.     add_param(effect.data_id, effect.value1.to_i)
  686.     @result.success = true
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 应用“学会技能”效果
  690.   #--------------------------------------------------------------------------
  691.   def item_effect_learn_skill(user, item, effect)
  692.     learn_skill(effect.data_id) if actor?
  693.     @result.success = true
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 应用“公共事件”效果
  697.   #--------------------------------------------------------------------------
  698.   def item_effect_common_event(user, item, effect)
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● 对技能/物品使用者的效果
  702.   #--------------------------------------------------------------------------
  703.   def item_user_effect(user, item)
  704.     user.tp += item.tp_gain * user.tcr
  705.   end
  706.   #--------------------------------------------------------------------------
  707.   # ● 获取幸运影响程度
  708.   #--------------------------------------------------------------------------
  709.   def luk_effect_rate(user)
  710.     [1.0 + (user.luk - luk) * 0.001, 0.0].max
  711.   end
  712.   #--------------------------------------------------------------------------
  713.   # ● 判定是否敌对关系
  714.   #--------------------------------------------------------------------------
  715.   def opposite?(battler)
  716.     actor? != battler.actor?
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 在地图上受到伤害时的效果
  720.   #--------------------------------------------------------------------------
  721.   def perform_map_damage_effect
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 初始化目标 TP
  725.   #--------------------------------------------------------------------------
  726.   def init_tp
  727.     self.tp = rand * 25
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # ● 清除 TP
  731.   #--------------------------------------------------------------------------
  732.   def clear_tp
  733.     self.tp = 0
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ● 受到伤害时增加的 TP
  737.   #--------------------------------------------------------------------------
  738.   def charge_tp_by_damage(damage_rate)
  739.     self.tp += 50 * damage_rate * tcr
  740.   end
  741.   #--------------------------------------------------------------------------
  742.   # ● HP 自动恢复
  743.   #--------------------------------------------------------------------------
  744.   def regenerate_hp
  745.     damage = -(mhp * hrg).to_i
  746.     perform_map_damage_effect if $game_party.in_battle && damage > 0
  747.     @result.hp_damage = [damage, max_slip_damage].min
  748.     self.hp -= @result.hp_damage
  749.   end
  750.   #--------------------------------------------------------------------------
  751.   # ● 获取连续伤害最大值
  752.   #--------------------------------------------------------------------------
  753.   def max_slip_damage
  754.     $data_system.opt_slip_death ? hp : [hp - 1, 0].max
  755.   end
  756.   #--------------------------------------------------------------------------
  757.   # ● MP 自动恢复
  758.   #--------------------------------------------------------------------------
  759.   def regenerate_mp
  760.     @result.mp_damage = -(mmp * mrg).to_i
  761.     self.mp -= @result.mp_damage
  762.   end
  763.   #--------------------------------------------------------------------------
  764.   # ● TP 自动恢复
  765.   #--------------------------------------------------------------------------
  766.   def regenerate_tp
  767.     self.tp += 100 * trg
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ● 全部自动恢复
  771.   #--------------------------------------------------------------------------
  772.   def regenerate_all
  773.     if alive?
  774.       regenerate_hp
  775.       regenerate_mp
  776.       regenerate_tp
  777.     end
  778.   end
  779.   #--------------------------------------------------------------------------
  780.   # ● 战斗开始处理
  781.   #--------------------------------------------------------------------------
  782.   def on_battle_start
  783.     init_tp unless preserve_tp?
  784.   end
  785.   #--------------------------------------------------------------------------
  786.   # ● 战斗行动结束时的处理
  787.   #--------------------------------------------------------------------------
  788.   def on_action_end
  789.     @result.clear
  790.     remove_states_auto(1)
  791.     remove_buffs_auto
  792.   end
  793.   #--------------------------------------------------------------------------
  794.   # ● 回合结束处理
  795.   #--------------------------------------------------------------------------
  796.   def on_turn_end
  797.     @result.clear
  798.     regenerate_all
  799.     update_state_turns
  800.     update_buff_turns
  801.     remove_states_auto(2)
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ● 战斗结束处理
  805.   #--------------------------------------------------------------------------
  806.   def on_battle_end
  807.     @result.clear
  808.     remove_battle_states
  809.     remove_all_buffs
  810.     clear_actions
  811.     clear_tp unless preserve_tp?
  812.     appear
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● 被伤害时的处理
  816.   #--------------------------------------------------------------------------
  817.   def on_damage(value)
  818.     remove_states_by_damage
  819.     charge_tp_by_damage(value.to_f / mhp)
  820.   end
  821. end
复制代码
麻煩大家了><   
作者: duzine    时间: 2015-10-30 20:14
總結一下

主角血量0不會死,無論是回合制還是正常事件都無法死亡
並且能繼續執行各種事件

然後HP0時不會出現死亡狀態,但是可以使用結束遊戲指令

剛剛再度發現新線索,添加狀態無法添加死亡狀態
中午到夜晚,真的解決不了
作者: duzine    时间: 2015-10-30 20:26
感謝各位的幫忙!
終於被我找到原因了(原因有雷,請息怒><)

問題出在職業設定頁,裡面設定了免疫 瀕死狀態(原死亡狀態)
我不知道遊戲是用這個狀態判斷死亡的,原來不是出在角色設定頁
終於解決了這個問題,真的感謝大家願意花時間幫忙

最後想請教最後一個問題,怎麼評分呢?
(一直想塞糖給各位,只是不知道怎麼做
作者: 卡奥尼特    时间: 2015-11-3 13:24
脚本截图发来看看,不然就不知道你用的是哪个脚本了。。。




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