Project1

标题: 关于冷却时间的判定 [打印本页]

作者: wyw838    时间: 2019-5-1 15:17
标题: 关于冷却时间的判定
嘛...这个问题我以前发过一贴然而并没有解决问题...然后这几天我重新理解了一下这个脚本...(附下)发现其冷却时间的计算貌似并不是存在于技能上而是放在角色身上...这样就得用一个数据结构来处理...然而它的处理方法我实在看不太懂....准确的来说是无法取出该数据结构里的数值(如果取出这个值就能对冷却剩余回合就行判定了)。然后...其大致的处理方式应该是...在角色回合开始时...调用递减函数,然后递减函数里对每个角色依次调用减cd函数,减cd函数再对角色类下的那个数据结构进行-1操作...但是它对每个角色用减cd函数时用的不是for而是这个:actors.each {|a| a.update_cooldown}。 于是我就只能一脸懵逼==(毕竟不太熟悉ruby)所以想请大佬帮忙解决一下这个问题...(就是这么把每个技能当前的剩余冷却取出来)...调试工程我也发一下QWQ 谢谢各位大佬了QWQ
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 技能消耗依赖 v1.3 by SailCat
  3. #------------------------------------------------------------------------------
  4. #   方法:本脚本插入到Main之前使用,并依赖数据库通用备注接口插件(在其之后)
  5. #   版本:v1.3 (Build 171122)
  6. #   效果:
  7. #     1. 技能消耗SP以外的游戏数据,包括HP、道具、武器、防具、金钱、经验、变量
  8. #     2. 技能使用场合依赖游戏条件,包括开关、状态、地图相关、装备、能力、步数等
  9. #     3. 技能消耗额外的回合(技能冷却)
  10. #   配置:插件为即插即用型,没有任何配置项,也不需要在脚本中设定任何东西
  11. #   冲突:其他同类脚本,以及魔改了Scene_Skill的脚本
  12. #   说明:
  13. #     1. 技能消耗道具、武器、防具、金钱、变量时,有使用检查,不够消耗不让用。
  14. #     2. 技能消耗HP、经验时,无使用检查,扣到0为止。
  15. #     3. 技能依赖开关、状态、地图、地形、装备、属性均检查至所有条件严格相符。
  16. #     4. 技能依赖能力检查条件为能力在指定范围内,步数检查条件为指定步数以上。
  17. #     5. 备注写法:
  18. #        (写在描述里,不同条件可以叠加用分号隔开,备注和描述以#号分隔)
  19. #        (当[XX集]内容只有一条时,方括号可省略,当内容序号连续时,可写成子界)
  20. #        (条件太多写不下时,可用超长备注法,见依赖插件的说明)
  21. #        a) 技能消耗HP:ch=值
  22. #        b) 技能消耗道具:ci=[消耗道具ID集]
  23. #        消耗道具个数>1的情况下,ID后缀两位小数为消耗个数,如4.05消耗4号道具5个
  24. #        写成4和4.00是不一样的,前者消耗4号道具1个,后者要求持有4号道具但不消耗
  25. #        c) 技能消耗武器:cw=[消耗武器ID集],说明同道具,消耗的是持有的武器
  26. #        d) 技能消耗防具:ca=[消耗防具ID集],说明同道具,消耗的是持有的防具
  27. #        e) 技能消耗金钱:cg=值
  28. #        f) 技能消耗经验:cx=值
  29. #        g) 技能消耗变量:cv={变量ID=>消耗值},写成hash形式,不能省略花括号
  30. #        h) 技能消耗回合:cd=值
  31. #        i) 技能依赖开关:cs=[开关集],开关ID为正数要求ON,为负数要求OFF
  32. #        j) 技能依赖状态:cc=[状态集],状态ID为正数要求有,为负数要求没有
  33. #        k) 技能依赖地图:cm=[地图ID集],地图ID为正数要求在,为负数要求不在
  34. #        l) 技能依赖地形:ct=[地形标志集],标志为正数要求是,为负数要求不是
  35. #        m) 技能依赖装备:cq=[装备ID集],查身上装备,武器ID写负数,防具ID写正数
  36. #        n) 技能依赖步数:cp=值
  37. #        o) 技能依赖属性:ce=[属性ID集],查装备属性,正数要求有,负数要求没有
  38. #        p) 技能依赖能力:cn=能力字符串,如"str300",有多个条件直接连写
  39. #        能力可以用hp/sp/str/dex/agi/int,大小写不敏感
  40. #        条件值的写法:300或300+表示大于等于300;300-表示小于等于300;
  41. #                      =300表示恰好300;300~400表示300到400之间(闭区间)
  42. #        q) 技能依赖茂密:cb+(要求茂密处)或cb-(要求非茂密处)
  43. #        r) 技能依赖公式:cf:公式脚本字符串,公式要能返回true或false的真伪值
  44. #        公式中可以使用a代表技能使用者,v代表变量,s代表开关
  45. #==============================================================================
  46. #==============================================================================
  47. # ■ SailCat's 插件公用
  48. #==============================================================================
  49. module SailCat
  50.   $sailcat_import ||= {}
  51.   #--------------------------------------------------------------------------
  52.   # ● 植入与依赖检查
  53.   #--------------------------------------------------------------------------
  54.   if $sailcat_import[:DataNoteCore].to_f >= 2.0
  55.     $sailcat_import[:SkillCost] = 1.3
  56.   else
  57.     raise "缺少依赖插件,通用数据库备注接口(v2.0以上版本)"
  58.   end
  59. end
  60. module RPG
  61.   #============================================================================
  62.   # ■ Skill_ItemCost
  63.   #----------------------------------------------------------------------------
  64.   #  处理技能消耗道具、武器、防具的内部类
  65.   #============================================================================
  66.   class Skill_ItemCost
  67.     #--------------------------------------------------------------------------
  68.     # ● 定义实例变量
  69.     #--------------------------------------------------------------------------
  70.     attr_accessor :id                     # 消耗的物品ID
  71.     attr_accessor :number                 # 消耗的数目
  72.     #--------------------------------------------------------------------------
  73.     # ● 初期化
  74.     #--------------------------------------------------------------------------
  75.     def initialize(n)
  76.       n = 0 unless n.is_a?(Numeric)
  77.       n += 0.01 if n.is_a?(Fixnum)
  78.       @id = Integer(n).abs
  79.       @number = [Integer((n - @id) * 100.0 + 1e-6), 0].max
  80.     end
  81.     #--------------------------------------------------------------------------
  82.     # ● 检查符合性
  83.     #--------------------------------------------------------------------------
  84.     def match?(proc)
  85.       return true if @id == 0
  86.       proc.call(@id) >= [@number, 1].max
  87.     end
  88.   end
  89.   #============================================================================
  90.   # ■ Skill_EquipCheck
  91.   #----------------------------------------------------------------------------
  92.   #  处理技能依赖装备状态的内部类
  93.   #============================================================================
  94.   class Skill_EquipCheck
  95.     #--------------------------------------------------------------------------
  96.     # ● 定义实例变量
  97.     #--------------------------------------------------------------------------
  98.     attr_accessor :weapons                # 依赖的武器ID(空为不检查)
  99.     attr_accessor :armors1                # 依赖的盾牌ID(空为不检查)
  100.     attr_accessor :armors2                # 依赖的头盔ID(空为不检查)
  101.     attr_accessor :armors3                # 依赖的护甲ID(空为不检查)
  102.     attr_accessor :armors4                # 依赖的饰品ID(空为不检查)
  103.     #--------------------------------------------------------------------------
  104.     # ● 初期化
  105.     #--------------------------------------------------------------------------
  106.     def initialize(ary)
  107.       @weapons = @armors1 = @armors2 = @armors3 = @armors4 = []
  108.       ary.map! {|i| i.to_a}.flatten!
  109.       ary.each do |i|
  110.         if i < 0
  111.           @weapon_id.push(-i)
  112.         else
  113.           kind = $data_armors[i].kind + 1
  114.           instance_eval("@armors#{kind}.push(#{i})") rescue nil
  115.         end
  116.       end
  117.     end
  118.     #--------------------------------------------------------------------------
  119.     # ● 检查符合性
  120.     #--------------------------------------------------------------------------
  121.     def match?(a)
  122.       return false if !@weapons.empty? and !@weapons.include?(a.weapon_id)
  123.       return false if !@armors1.empty? and !@armors1.include?(a.armor1_id)
  124.       return false if !@armors2.empty? and !@armors2.include?(a.armor2_id)
  125.       return false if !@armors3.empty? and !@armors3.include?(a.armor3_id)
  126.       return false if !@armors4.empty? and !@armors4.include?(a.armor4_id)
  127.       return true
  128.     end
  129.   end
  130.   #============================================================================
  131.   # ■ Skill_AbilityCheck
  132.   #----------------------------------------------------------------------------
  133.   #  处理技能依赖能力的内部类
  134.   #============================================================================
  135.   class Skill_AbilityCheck
  136.     #--------------------------------------------------------------------------
  137.     # ● 常量
  138.     #--------------------------------------------------------------------------
  139.     REGEX = /(hp|sp|str|dex|agi|int)(=?([0-9]+)([+\-~])?([0-9]+)?)/i
  140.     #--------------------------------------------------------------------------
  141.     # ● 定义实例变量
  142.     #--------------------------------------------------------------------------
  143.     attr_accessor :hp_range               # 依赖的 HP % 范围
  144.     attr_accessor :sp_range               # 依赖的 SP % 范围
  145.     attr_accessor :str_range              # 依赖的力量值范围
  146.     attr_accessor :dex_range              # 依赖的灵巧值范围
  147.     attr_accessor :agi_range              # 依赖的速度值范围
  148.     attr_accessor :int_range              # 依赖的魔力值范围
  149.     #--------------------------------------------------------------------------
  150.     # ● 初期化
  151.     #--------------------------------------------------------------------------
  152.     def initialize(str)
  153.       @hp_range = @sp_range = 0..100
  154.       @str_range = @dex_range = @agi_range = @int_range = 0..999
  155.       ary = str.scan(REGEX)
  156.       ary.each do |a|
  157.         name = a[0].downcase
  158.         min = a[2]
  159.         max = a[4] || a[2]
  160.         if a[1][0] != 61
  161.           max = (name[1] == 112 ? 100 : 999) if a[3] == nil or a[3] == "+"
  162.           min = 0 if a[3] == "-" and a[4] == nil
  163.         end
  164.         instance_eval("@#{name}_range = #{min}..#{max}") rescue nil
  165.       end
  166.     end
  167.     #--------------------------------------------------------------------------
  168.     # ● 检查符合性
  169.     #--------------------------------------------------------------------------
  170.     def match?(a)
  171.       return false unless @hp_range === a.hp * 100 / a.maxhp
  172.       return false unless @sp_range === a.sp * 100 / [a.maxsp, 1].max
  173.       return false unless @str_range === a.str
  174.       return false unless @dex_range === a.dex
  175.       return false unless @agi_range === a.agi
  176.       return false unless @int_range === a.int
  177.       return true
  178.     end
  179.   end
  180.   #============================================================================
  181.   # ■ RPG::Skill
  182.   #----------------------------------------------------------------------------
  183.   #  数据库的技能类扩展
  184.   #============================================================================
  185.   class Skill
  186.     #--------------------------------------------------------------------------
  187.     # ● 备注定义
  188.     #--------------------------------------------------------------------------
  189.     def hp_cost;       _ch(0).abs;                                        end
  190.     def exp_cost;      _cx(0).abs;                                        end
  191.     def gold_cost;     _cg(0).abs;                                        end
  192.     def cooldown;      _cd(0).abs;                                        end
  193.     def variable_cost; _cv({});                                           end
  194.     def item_cost;     _ci([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  195.     def weapon_cost;   _cw([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  196.     def armor_cost;    _ca([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  197.     def switch_check;  flat_array(_cs([]));                               end
  198.     def state_check;   flat_array(_cc([]));                               end
  199.     def map_check;     flat_array(_cm([]));                               end
  200.     def terrain_check; flat_array(_ct([]));                               end
  201.     def element_check; flat_array(_ce([]));                               end
  202.     def bush_check;    _cb(nil);                                          end
  203.     def step_check;    _cp(0).abs;                                        end
  204.     def equip_check;   Skill_EquipCheck.new(_cq([]).to_a);                end
  205.     def ability_check; Skill_AbilityCheck.new(_cn("").to_s);              end
  206.     def eval_check;    _cf("true");                                       end
  207.     #--------------------------------------------------------------------------
  208.     # ● 公式依赖判定
  209.     #--------------------------------------------------------------------------
  210.     def eval_match?(actor)
  211.       result = lambda {|a, s, v| eval(eval_check) rescue true}
  212.       result.call(actor, $game_switches, $game_variables)
  213.     end
  214.     #--------------------------------------------------------------------------
  215.     # ● 通用正负依赖判定
  216.     #--------------------------------------------------------------------------
  217.     def pn_match?(set, obj, proc = Proc.new{|a, b| a == b})
  218.       (set.reject {|s| (s > 0) == proc.call(obj, s.abs)}).empty?
  219.     end
  220.     #--------------------------------------------------------------------------
  221.     # ● 变量消耗判定
  222.     #--------------------------------------------------------------------------
  223.     def variable_match?
  224.       variable_cost.each do |k, v|
  225.         return false if $game_variables[k] < v
  226.       end
  227.       return true
  228.     end
  229.     #--------------------------------------------------------------------------
  230.     # ● 道具消耗判定
  231.     #--------------------------------------------------------------------------
  232.     def item_match?(set, proc)
  233.       set.each do |s|
  234.         return false unless s.match?(proc)
  235.       end
  236.       return true
  237.     end
  238.   end
  239. end
  240. #==============================================================================
  241. # ■ Game_Battler
  242. #==============================================================================
  243. class Game_Battler
  244.   #--------------------------------------------------------------------------
  245.   # ● 使用技能的额外消耗
  246.   #     skill : 特技
  247.   #--------------------------------------------------------------------------
  248.   def skill_cost_extra(skill)
  249.     self.hp -= skill.hp_cost
  250.   end
  251. end
  252. #==============================================================================
  253. # ■ Game_Actor
  254. #==============================================================================
  255. class Game_Actor
  256.   #--------------------------------------------------------------------------
  257.   # ● 定义实例变量
  258.   #--------------------------------------------------------------------------
  259.   attr_reader   :cooldowns             # 冷却中的技能集
  260.   attr_reader   :last_cooldowns        # 剩余冷却值
  261.   #--------------------------------------------------------------------------
  262.   # ● 方法重定义
  263.   #--------------------------------------------------------------------------
  264.   unless method_defined? :sailcat_skill_can_use?
  265.     alias sailcat_skillcost_skill_can_use? skill_can_use?
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 可以使用特技判定
  269.   #     skill_id : 特技 ID
  270.   #--------------------------------------------------------------------------
  271.   def skill_can_use?(skill_id)
  272.     # 获得对应的特技实体
  273.     skill = $data_skills[skill_id]
  274.     # 装备不符的情况下,不能使用
  275.     if not skill.equip_check.match?(self)
  276.       return false
  277.     # 能力不符的情况下,不能使用
  278.     elsif not skill.ability_check.match?(self)
  279.       return false
  280.     # 步数不够的情况下,不能使用
  281.     elsif $game_party.steps < skill.step_check
  282.       return false
  283.     # 金钱不够的情况下,不能使用
  284.     elsif $game_party.gold < skill.gold_cost
  285.       return false
  286.     # 属性不符的情况下,不能使用
  287.     elsif not skill.pn_match?(skill.element_check, self, Proc.new{|a,b|
  288.       a.element_set.include?(b) or ([a.armor1_id, a.armor2_id,
  289.       a.armor3_id, a.armor4_id].inject(false) {|res, id|
  290.         res |= id > 0 and $data_armors[id].guard_element_set.include?(b)})
  291.       })
  292.       return false
  293.     # 地图不符的情况下,不能使用
  294.     elsif not skill.pn_match?(skill.map_check, $game_map.map_id)
  295.       return false
  296.     # 地形不符的情况下,不能使用
  297.     elsif not skill.pn_match?(skill.terrain_check, $game_player.terrain_tag)
  298.       return false
  299.     # 状态不符的情况下,不能使用
  300.     elsif not skill.pn_match?(skill.state_check, self,
  301.       Proc.new{|a, b| a.state?(b)})
  302.       return false
  303.     # 茂盛不符的情况下,不能使用
  304.     elsif skill.bush_check != nil and
  305.       skill.bush_check != ($game_player.bush_depth == 12)
  306.       return false
  307.     # 开关不符的情况下,不能使用
  308.     elsif not skill.pn_match?(skill.switch_check, $game_switches,
  309.       Proc.new{|a, b| a[b]})
  310.       return false
  311.     # 战斗时,冷却中的情况下,不能使用
  312.     elsif $game_temp.in_battle and cooldown?(skill_id) and $game_variables[100]==0
  313.       return false
  314.     # 变量不符的情况下,不能使用
  315.     elsif not skill.variable_match?
  316.       return false
  317.     # 道具不够的情况下,不能使用
  318.     elsif not skill.item_match?(skill.item_cost,
  319.       Proc.new{|n| $game_party.item_number(n)})
  320.       return false
  321.     # 武器不够的情况下,不能使用
  322.     elsif not skill.item_match?(skill.weapon_cost,
  323.       Proc.new{|n| $game_party.weapon_number(n)})
  324.       return false
  325.     # 防具不够的情况下,不能使用
  326.     elsif not skill.item_match?(skill.armor_cost,
  327.       Proc.new{|n| $game_party.armor_number(n)})
  328.       return false
  329.     # 公式计算为false或nil的情况下,不能使用
  330.     elsif not skill.eval_match?(self)
  331.       return false
  332.     end
  333.     # 进行原始判定
  334.     sailcat_skillcost_skill_can_use?(skill_id)
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 清除冷却技能
  338.   #--------------------------------------------------------------------------
  339.   def reset_cooldown
  340.     @cooldowns = {}
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 设置冷却技能
  344.   #     skill_id : 特技 ID
  345.   #--------------------------------------------------------------------------
  346.   def set_cooldown(skill_id)
  347.     if $data_skills[skill_id].cooldown > 0
  348.       @cooldowns[skill_id] = $data_skills[skill_id].cooldown
  349.     end
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 更新冷却技能,该方法一回合调用一次
  353.   #--------------------------------------------------------------------------
  354.   def update_cooldown
  355.     p "冷却更新"
  356.     p @cooldowns
  357.     p @cooldowns[0]
  358.     @cooldowns.each_key {|k|@cooldowns[k] -= 1}
  359.     @cooldowns.delete_if {|k, v| v == 0}
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 冷却中判定
  363.   #     skill_id : 特技 ID
  364.   #--------------------------------------------------------------------------
  365.   def cooldown?(skill_id)
  366.     @cooldowns.has_key?(skill_id)
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ● 使用技能的额外消耗
  370.   #     skill : 特技 ID
  371.   #--------------------------------------------------------------------------
  372.   def skill_cost_extra(skill)
  373.     super
  374.     self.exp -= skill.exp_cost
  375.     $game_party.lose_gold(skill.gold_cost)
  376.     skill.item_cost.each {|i| $game_party.lose_item(i.id, i.number)}
  377.     skill.weapon_cost.each {|i| $game_party.lose_weapon(i.id, i.number)}
  378.     skill.armor_cost.each {|i| $game_party.lose_armor(i.id, i.number)}
  379.     skill.variable_cost.each_pair {|k, v| $game_variables[k] -= v}
  380.     set_cooldown(skill.id) if $game_temp.in_battle
  381.   end
  382. end
  383. #==============================================================================
  384. # ■ Game_Party
  385. #==============================================================================
  386. class Game_Party
  387.   #--------------------------------------------------------------------------
  388.   # ● 清除冷却技能
  389.   #--------------------------------------------------------------------------
  390.   def reset_cooldown
  391.     actors.each {|a| a.reset_cooldown}
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ● 更新冷却技能,该方法一回合调用一次
  395.   #--------------------------------------------------------------------------
  396.   def update_cooldown
  397.     p "总角色更新"
  398.     actors.each {|a| a.update_cooldown}
  399.   end
  400. end
  401. #==============================================================================
  402. # ■ Scene_Battle
  403. #==============================================================================
  404. class Scene_Battle
  405.   #--------------------------------------------------------------------------
  406.   # ● 方法重定义
  407.   #--------------------------------------------------------------------------
  408.   unless method_defined? :sailcat_start_phase1
  409.     alias sailcat_skillcost_start_phase1 start_phase1
  410.     alias sailcat_skillcost_start_phase4 start_phase4
  411.     alias sailcat_skillcost_make_skill_action_result make_skill_action_result
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● 开始自由战斗回合
  415.   #--------------------------------------------------------------------------
  416.   def start_phase1
  417.     # 调用原方法
  418.     sailcat_skillcost_start_phase1
  419.     # 清除技能冷却
  420.     $game_party.reset_cooldown
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 开始主回合
  424.   #--------------------------------------------------------------------------
  425.   def start_phase4
  426.     # 调用原方法
  427.     sailcat_skillcost_start_phase4
  428.     # 更新技能冷却
  429.     p "主回合更新"
  430.     $game_party.update_cooldown
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 生成特技行动结果
  434.   #--------------------------------------------------------------------------
  435.   def make_skill_action_result
  436.     # 调用原方法
  437.     sailcat_skillcost_make_skill_action_result
  438.     # 额外消耗
  439.     @active_battler.skill_cost_extra(@skill)
  440.   end
  441. end
  442. #==============================================================================
  443. # ■ Scene_Skill
  444. #==============================================================================
  445. class Scene_Skill
  446.   #--------------------------------------------------------------------------
  447.   # ● 刷新画面 (特技窗口被激活的情况下)
  448.   #--------------------------------------------------------------------------
  449.   def update_skill
  450.     # 按下 B 键的情况下
  451.     if Input.trigger?(Input::B)
  452.       # 演奏取消 SE
  453.       $game_system.se_play($data_system.cancel_se)
  454.       # 切换到菜单画面
  455.       $scene = Scene_Menu.new(1)
  456.       return
  457.     end
  458.     # 按下 C 键的情况下
  459.     if Input.trigger?(Input::C)
  460.       # 获取特技窗口现在选择的特技的数据
  461.       @skill = @skill_window.skill
  462.       # 不能使用的情况下
  463.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  464.         # 演奏冻结 SE
  465.         $game_system.se_play($data_system.buzzer_se)
  466.         return
  467.       end
  468.       # 演奏确定 SE
  469.       $game_system.se_play($data_system.decision_se)
  470.       # 效果范围是我方的情况下
  471.       if @skill.scope >= 3
  472.         # 激活目标窗口
  473.         @skill_window.active = false
  474.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  475.         @target_window.visible = true
  476.         @target_window.active = true
  477.         # 设置效果范围 (单体/全体) 的对应光标位置
  478.         if @skill.scope == 4 || @skill.scope == 6
  479.           @target_window.index = -1
  480.         elsif @skill.scope == 7
  481.           @target_window.index = @actor_index - 10
  482.         else
  483.           @target_window.index = 0
  484.         end
  485.       # 效果在我方以外的情况下
  486.       else
  487.         # 公共事件 ID 有效的情况下
  488.         if @skill.common_event_id > 0
  489.           # 预约调用公共事件
  490.           $game_temp.common_event_id = @skill.common_event_id
  491.           # 演奏特技使用时的 SE
  492.           $game_system.se_play(@skill.menu_se)
  493.           # 消耗 SP
  494.           @actor.sp -= @skill.sp_cost
  495.           # 额外的消耗
  496.           @actor.skill_cost_extra(@skill)
  497.           # 再生成各窗口的内容
  498.           @status_window.refresh
  499.           @skill_window.refresh
  500.           @target_window.refresh
  501.           # 切换到地图画面
  502.           $scene = Scene_Map.new
  503.           return
  504.         end
  505.       end
  506.       return
  507.     end
  508.     # 按下 R 键的情况下
  509.     if Input.trigger?(Input::R)
  510.       # 演奏光标 SE
  511.       $game_system.se_play($data_system.cursor_se)
  512.       # 移至下一位角色
  513.       @actor_index += 1
  514.       @actor_index %= $game_party.actors.size
  515.       # 切换到别的特技画面
  516.       $scene = Scene_Skill.new(@actor_index)
  517.       return
  518.     end
  519.     # 按下 L 键的情况下
  520.     if Input.trigger?(Input::L)
  521.       # 演奏光标 SE
  522.       $game_system.se_play($data_system.cursor_se)
  523.       # 移至上一位角色
  524.       @actor_index += $game_party.actors.size - 1
  525.       @actor_index %= $game_party.actors.size
  526.       # 切换到别的特技画面
  527.       $scene = Scene_Skill.new(@actor_index)
  528.       return
  529.     end
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ● 刷新画面 (目标窗口被激活的情况下)
  533.   #--------------------------------------------------------------------------
  534.   def update_target
  535.     # 按下 B 键的情况下
  536.     if Input.trigger?(Input::B)
  537.       # 演奏取消 SE
  538.       $game_system.se_play($data_system.cancel_se)
  539.       # 删除目标窗口
  540.       @skill_window.active = true
  541.       @target_window.visible = false
  542.       @target_window.active = false
  543.       return
  544.     end
  545.     # 按下 C 键的情况下
  546.     if Input.trigger?(Input::C)
  547.       # 因为 SP 不足而无法使用的情况下
  548.       unless @actor.skill_can_use?(@skill.id)
  549.         # 演奏冻结 SE
  550.         $game_system.se_play($data_system.buzzer_se)
  551.         return
  552.       end
  553.       # 目标是全体的情况下
  554.       if @target_window.index == -1
  555.         # 对同伴全体应用特技使用效果
  556.         used = false
  557.         for i in $game_party.actors
  558.           used |= i.skill_effect(@actor, @skill)
  559.         end
  560.       end
  561.       # 目标是使用者的情况下
  562.       if @target_window.index <= -2
  563.         # 对目标角色应用特技的使用效果
  564.         target = $game_party.actors[@target_window.index + 10]
  565.         used = target.skill_effect(@actor, @skill)
  566.       end
  567.       # 目标是单体的情况下
  568.       if @target_window.index >= 0
  569.         # 对目标角色应用特技的使用效果
  570.         target = $game_party.actors[@target_window.index]
  571.         used = target.skill_effect(@actor, @skill)
  572.       end
  573.       # 使用特技的情况下
  574.       if used
  575.         # 演奏特技使用时的 SE
  576.         $game_system.se_play(@skill.menu_se)
  577.         # 消耗 SP
  578.         @actor.sp -= @skill.sp_cost
  579.         # 额外的消耗
  580.         @actor.skill_cost_extra(@skill)
  581.         # 再生成各窗口内容
  582.         @status_window.refresh
  583.         @skill_window.refresh
  584.         @target_window.refresh
  585.         # 全灭的情况下
  586.         if $game_party.all_dead?
  587.           # 切换到游戏结束画面
  588.           $scene = Scene_Gameover.new
  589.           return
  590.         end
  591.         # 公共事件 ID 有效的情况下
  592.         if @skill.common_event_id > 0
  593.           # 预约调用公共事件
  594.           $game_temp.common_event_id = @skill.common_event_id
  595.           # 切换到地图画面
  596.           $scene = Scene_Map.new
  597.           return
  598.         end
  599.       end
  600.       # 无法使用特技的情况下
  601.       unless used
  602.         # 演奏冻结 SE
  603.         $game_system.se_play($data_system.buzzer_se)
  604.       end
  605.       return
  606.     end
  607.   end
  608. end

Project1.rar

202.58 KB, 下载次数: 82


作者: soulsaga    时间: 2019-5-1 16:10
本帖最后由 soulsaga 于 2019-5-1 16:11 编辑

CD当然是要放在角色身上..避免同一技能其他人也共用CD..
另外剩余回合不是抽不出来..只是你的窗口脚本会报错而已..
作者: soulsaga    时间: 2019-5-1 16:47
本帖最后由 soulsaga 于 2019-5-1 16:50 编辑

你上传的工程很奇怪..我觉得不能用..
你新加的class Window_SkillHelp根本没有调用..你到底想别人调试什么..

QQ图片20180522095424.png (82.73 KB, 下载次数: 16)

QQ图片20180522095424.png

作者: soulsaga    时间: 2019-5-1 17:05
本帖最后由 soulsaga 于 2019-5-1 17:07 编辑

Window_Skill *里面
def update_help
    @help_window.set_text2(skill,@actor)#★★★★★
  end

游戏_显示技能信息 *里面
def set_text2(skill,actor)

self.contents.draw_text(xx, yy, infx*2, sss.height,actor.cooldowns[skill.id].to_s+"回合 ")

要改的脚本..看得懂么..

作者: wyw838    时间: 2019-5-2 14:23
soulsaga 发表于 2019-5-1 17:05
Window_Skill *里面
def update_help
    @help_window.set_text2(skill,@actor)#★★★★★

非常感谢...原来是在定义函数的时候再加一个角色的变量就方便判定了....




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