Project1

标题: 不常用的脚本判断以及操作 [打印本页]

作者: 芯☆淡茹水    时间: 2018-2-11 12:05
标题: 不常用的脚本判断以及操作
本帖最后由 芯☆淡茹水 于 2018-2-11 18:49 编辑


   被人当做顾问折腾了N久,全是些偏门以及稀奇古怪的问题。

下面将这些问题整理了下,加上了用法注释。

另外可以建议一些当前没有的判断和操作,可以加入里面。

〓 添加记录 〓

1,添加杀敌记录,以及敌人杀敌数和总杀敌数的变量代入。(可以做一些杀敌任务什么的)。
2,添加角色穿上的装备数量的变量代入。(不知道这个有什么用?)


RUBY 代码复制
  1. #==============================================================================
  2. # 〓 不常用的脚本判断以及操作 〓           芯☆淡茹水
  3. #==============================================================================
  4. #==============================================================================
  5. #■ 脚本判断 ■
  6. #
  7. # 以下直接输入 事件 - 条件分歧 - 脚本
  8. #
  9. # 1,atb_any?(type, model)
  10. #    判断整个队伍里是否有某个角色的某项属性达到规定值。
  11. #    type :判断的类型(字符串)。
  12. #    model:判断的值(数值)。
  13. #
  14. #    判断类型(type)包括:"level"(等级);"hp"(血量);"sp"(魔法量)
  15. #                          "maxhp"(最大HP);"maxsp"(最大SP);"atk"(攻击力);
  16. #                          "def"(防御力);"matk"(魔攻);"mdef"(魔防);
  17. #                          "str"(力量);"dex"(敏捷);"agi"(速度);"int"(智力)
  18. #
  19. #    例:判断队伍里是否有某个角色的等级达到 20 级?
  20. #        事件 - 条件 - 脚本:atb_any?("level", 20)
  21. #
  22. #        判断队伍里是否有某个角色的攻击力达到 300 ?
  23. #        事件 - 条件 - 脚本:atb_any?("atk", 300)
  24. #
  25. # 2, atb_all?(type, model)
  26. #    判断整个队伍里所有角色的某项属性是否都达到规定值。
  27. #    type :判断的类型(字符串)。
  28. #    model:判断的值(数值)。
  29. #
  30. #    参数与第 1 条相同,但判断的方式不同。
  31. #
  32. #    例:判断队伍里所有角色的等级是否都达到 45 级?
  33. #        事件 - 条件 - 脚本:atb_all?("level", 45)
  34. #
  35. # 3, equiped_range_weapons?(range)
  36. #    判断队伍里是否有角色装备了 一个范围值 内的武器。
  37. #    range:范围值(数组或范围)。
  38. #
  39. #    例:判断队伍里是否有装备 5,10,11,25 号武器的角色?
  40. #        事件 - 条件 - 脚本:equiped_range_weapons?([5,10,11,25])
  41. #
  42. #        判断队伍里是否有装备 20 到 50 号武器的角色?
  43. #        事件 - 条件 - 脚本:equiped_range_weapons?((20..50))
  44. #
  45. # 4,equiped_range_armors?(range)
  46. #    判断队伍里是否有角色装备了 一个范围值 内的防具。
  47. #    range:范围值(数组或范围)。
  48. #
  49. #    例:判断队伍里是否有装备 2,5,8 号防具的角色?
  50. #        事件 - 条件 - 脚本:equiped_range_armors?([2,5,8])
  51. #
  52. #        判断队伍里是否有装备 50 到 100 号防具的角色?
  53. #        事件 - 条件 - 脚本:equiped_range_armors?((50..100))
  54. #
  55. # 5,has_range_items?(type, range)
  56. #    判断是否拥有 一个范围值 内的物品。(包含已穿上的装备)
  57. #    type :判断的类型(字符串)。
  58. #    range:范围值(数组或范围)。
  59. #
  60. #    判断的类型(type)包括:"item"(道具);"weapon"(武器);"armor"(防具)
  61. #
  62. #    例:判断是否拥有 12,13,22,23 号道具?
  63. #        事件 - 条件 - 脚本:has_range_items?("item", [12,13,22,23])
  64. #
  65. #        判断是否拥有 15 到 55 号武器?
  66. #        事件 - 条件 - 脚本:has_range_items?("weapon", (15..55))
  67. #
  68. # ■ 变量代入 ■
  69. #
  70. # 1, give_val_atb(type, val_id)
  71. #    将队伍里所有角色的某项属性总和代入一个变量。
  72. #    type  :代入的类型(字符串)。
  73. #    val_id:欲代入的变量ID。
  74. #
  75. #    参数(type)与 脚本判断 第 1 条的参数(type) 相同。
  76. #
  77. #    例:将队伍里所有角色的 HP 总和代入变量 10 。
  78. #        事件 - 脚本:give_val_atb("hp", 10)
  79. #
  80. # 2,give_val_equips_num(actor_id, val_id)
  81. #    将一个角色的所穿上的装备数量代入一个变量(含武器和防具)。
  82. #    actor_id :角色ID。
  83. #    val_id   :欲代入的变量ID。
  84. #
  85. #    例:将 5 号角色的所穿上的装备数量代入变量 8 。
  86. #        事件 - 脚本:give_val_equips_num(5, 8)
  87. #
  88. #
  89. # 3, give_val_killed(enemy_id, val_id)
  90. #    将当前某个敌人的杀敌数量代入一个变量。
  91. #    enemy_id :敌人ID。
  92. #    val_id   :欲代入的变量ID。
  93. #
  94. #    例:将当前杀死的 12 号敌人数量代入变量 5 。
  95. #        事件 - 脚本:give_val_killed(12, 5)
  96. #
  97. # 4, give_val_all_killed(val_id)
  98. #    将当前总杀敌数量代入一个变量。
  99. #    val_id   :欲代入的变量ID。
  100. #
  101. #==============================================================================
  102. class Game_Party
  103.   #--------------------------------------------------------------------------
  104.   alias xr_kill_record_initialize initialize
  105.   def initialize
  106.     xr_kill_record_initialize
  107.     @kill_record = {}
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   def killed(enemy_id)
  111.     return @kill_record[enemy_id] || 0
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   def all_killed
  115.     return @kill_record.empty? ? 0 : eval(@kill_record.values.join("+"))
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   def record_enemy
  119.     $game_troop.enemies.each{|e| !!e && !e.hidden && written_records(e.id)}
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   def written_records(enemy_id)
  123.     @kill_record[enemy_id] ||= 0
  124.     @kill_record[enemy_id] += 1
  125.   end
  126. end
  127. #==============================================================================
  128. class Scene_Battle
  129.   #--------------------------------------------------------------------------
  130.   alias xr_kill_record_start_phase5 start_phase5
  131.   def start_phase5
  132.     $game_party.record_enemy
  133.     xr_kill_record_start_phase5
  134.   end
  135. end
  136. #==============================================================================
  137. class Interpreter
  138.   #--------------------------------------------------------------------------
  139.   def party_actors
  140.     return $game_party.actors
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   def get_actor(actor_id)
  144.     return $game_actors[actor_id]
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   def actor_equips_array(actor_id)
  148.     a = get_actor(actor_id)
  149.     return !!a ? [a.weapon_id,a.armor1_id,a.armor2_id,a.armor3_id,a.armor4_id] : []
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   def get_atb(actor, type)
  153.     return eval("actor." + type)
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   def actor_equiped_armor?(actor, armor_id)
  157.     data = [actor.armor1_id,actor.armor2_id,actor.armor3_id,actor.armor4_id]
  158.     return data.include?(armor_id)
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   def item_num(type, id)
  162.     return eval("$game_party." + type + "_number(id)")
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   def atb_any?(type, model)
  166.     return party_actors.any?{|a| get_atb(a, type) >= model}
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   def atb_all?(type, model)
  170.     return party_actors.all?{|a| get_atb(a, type) >= model}
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   def any_has_weapon?
  174.     return party_actors.any?{|a| a.weapon_id > 0}
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   def all_has_weapon?
  178.     return party_actors.all?{|a| a.weapon_id > 0}
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   def equiped_weapon?(weapon_id)
  182.     return party_actors.any?{|a| a.weapon_id == weapon_id}
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   def equiped_range_weapons?(range)
  186.     return range.any?{|i| equiped_weapon?(i)}
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   def equiped_armor?(armor_id)
  190.     return party_actors.any?{|a| actor_equiped_armor?(a, armor_id)}
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   def equiped_range_armors?(range)
  194.     return range.any?{|i| equiped_armor?(i)}
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   def has_range_items?(type, range)
  198.     return range.any?{|i| item_num(type, i) > 0} if type == "item"
  199.     equiped = type == "weapon" ? equiped_range_weapons?(range) : equiped_range_armors?(range)
  200.     return equiped || range.any?{|i| item_num(type, i) > 0}
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   def give_val_atb(type, val_id)
  204.     $game_variables[val_id] = eval(party_actors.map{|a| get_atb(a, type)}.join("+"))
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   def give_val_equips_num(actor_id, val_id)
  208.     $game_variables[val_id] = actor_equips_array(actor_id).find_all{|id| id > 0}.size
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   def give_val_killed(enemy_id, val_id)
  212.     $game_variables[val_id] = $game_party.killed(enemy_id)
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   def give_val_all_killed(val_id)
  216.     $game_variables[val_id] = $game_party.all_killed
  217.   end
  218. end
  219. #==============================================================================

作者: chd114    时间: 2018-2-11 13:06
獲取一個角色身上裝備的數量(比如二刀流三刀流職業對個別武器限制只能帶一把相同武器)
作者: jiushiainilip19    时间: 2018-2-11 14:02
这个好,收下了,感谢大佬
作者: 黑白无双    时间: 2018-2-20 22:02
感觉真不错,谢谢楼主分享。




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