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

Project1

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

[已经过期] 仇恨系统移植

[复制链接]

Lv2.观梦者

梦石
0
星屑
719
在线时间
684 小时
注册时间
2009-5-29
帖子
461
跳转到指定楼层
1
发表于 2010-10-17 20:55:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 saturnfjh 于 2010-10-18 21:49 编辑

在叶子的仇恨系统中有这么一段(XP的):
  1. class Game_Party
  2.   #--------------------------------------------------------------------------
  3.   # ● 对像角色的顺序确定
  4.   #     actor_index : 角色索引
  5.   #--------------------------------------------------------------------------
  6.   def smooth_target(actor_index, hate_system = true)
  7.    # 启用仇恨系统的情况下
  8.    if hate_system
  9.      battler = $scene.active_battler
  10.      # 战斗者不是敌人的话,按原来的顺序选择
  11.      if !battler.is_a?(Game_Enemy)
  12.        return smooth_target(actor_index, false)
  13.      end
  14.      # 检查嘲讽状态
  15.      for state_id in PROVOKE_STATES
  16.        if battler.state?(state_id)
  17.          for actor in @actors
  18.            if actor.state?(state_id) and !actor.hp0?
  19.              return actor
  20.            end
  21.          end
  22.        end
  23.      end
  24.      # 忽略仇恨的话,按原来的顺序选择
  25.      if battler.element_rate(IGNORE_HATE_ELEMENT) < 100
  26.        return smooth_target(actor_index, false)
  27.      end
  28.      # 仇恨列表整理
  29.      hate_list = battler.hate_list
  30.      for actor_id in hate_list.keys.clone
  31.        actor = $game_actors[actor_id]
  32.        if actor == nil or [email protected]?(actor) or !actor.exist? or actor.hp0?
  33.          hate_list.delete(actor_id)
  34.        end
  35.      end
  36.      highest = hate_list.values.max
  37.      # 无仇恨的情况下,按原来的顺序选择
  38.      if highest == nil or highest <= 0
  39.        return smooth_target(actor_index, false)
  40.      end
  41.      # 返回仇恨最高目标
  42.       return $game_actors[hate_list.index(highest)]
  43.    # 不启用仇恨系统的情况下
  44.    else
  45.      # 取得对像
  46.      actor = $game_actors[actor_index]
  47.      # 对像存在的情况下
  48.      if actor != nil and actor.exist?
  49.        return actor
  50.      end
  51.      # 循环
  52.      for actor in @actors
  53.        # 对像存在的情况下
  54.        if actor.exist?
  55.          return actor
  56.        end
  57.      end
  58.    end
  59. end
复制代码
要移植到VX上生效这个部分应该怎么改?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
518 小时
注册时间
2010-6-16
帖子
1073
2
发表于 2010-10-17 23:11:05 | 只看该作者
心情好,直接给你VX的……
  1. =begin
  2. 設置方法
  3. 請在戰鬥畫面中使用(戰鬥事件或是在戰鬥畫面觸發的公共事件)
  4. 仇恨值變量  
  5. $game_actors[角色編號].current_action.hatred # 我方指定角色的仇恨值變量

  6. --------------------------------------------------------------------------------
  7. $game_party.actors.[我方順序].current_action.hatred # 我方指定隊伍位置的仇恨值變量
  8. --------------------------------------------------------------------------------
  9. $game_troop.enemies[敵人順序].current_action.hatred # 敵方指定隊伍位置的仇恨值變量

  10. --------------------------------------------------------------------------------

  11. ★以下是使用範例☆
  12. $game_actors[7].current_action.hatred = 10 # 我方隊伍中角色編號為7的角色仇恨值變為10
  13. $game_party.actors.[2].current_action.hatred += 5 # 我方第3個角色(0為第1個)仇恨值增加5
  14. $game_troop.enemies[4].current_action.hatred -= 3 # 敵方第4個角色仇恨值減少3
  15.   
  16. --------------------------------------------------------------------------------
  17.   
  18. 使用者自定設置說明
  19. 【1】Sword51_AddHatred = [仇恨值增加量]
  20. 【2】Sword51_AddHatred = [每少多少血, 仇恨值增加量]
  21. 設定被攻擊的角色對發動攻擊的角色增加的仇恨值多寡設定
  22. 使用設置法1表示一律增加 仇恨值增加量 的仇恨值
  23. 使用設置法2表示每受到 每少多少血 的血量,各增加 仇恨值增加量 的仇恨值

  24. 【1】Sword51_RedHatred = [仇恨值減少量]
  25. 【2】Sword51_RedHatred = [每少多少血, 仇恨值減少量]
  26. 設定攻擊者攻擊指定目標時,則對那個目標的仇恨減少(簡單來說就是報仇後仇恨降低)
  27. 使用設置法1表示一律增加 仇恨值增少量 的仇恨值
  28. 使用設置法2表示每受到 每少多少血 的血量,各增加 仇恨值增少量 的仇恨值

  29. Sword51_Max = 0
  30. 設定仇恨值最高的上限,如果設定0則表示無上限,仇恨值可以不斷的增加

  31. Sword51_SkillHatred[技能編號] = 額外增減量 NEW
  32. 當發動指定的技能時,敵方所有怪將對那技能發動者增加仇恨
  33. 可以製作出像是敵人看到某角色幫其他角色或自己補血時,敵人不是就白打了
  34. 所以用這個效果,快速增加使用指定技能的角色的仇恨,讓對手集中火力攻擊補血者
  35. 可自行添加多個Sword51_SkillHatred設置,不使用該效果也可以全數移除掉
  36. 技能編號:設定會額外增減仇恨值的技能編號,設定0則沒設定的技能都採用0號的設定
  37. 額外增減量:設定使用指定技能所增加的仇恨值,如果是扣仇恨值可以指定負數即可(全體扣除)

  38. Sword51_ItemHatred[物品編號] = 額外增減量 NEW
  39. 效果同Sword51_SkillHatred設置的相同,只不過這個是針對物品的效果
  40. 也就是看到使用指定物品的角色,則敵方所有怪對物品使用者的仇恨將會額外增加
  41. 可自行添加多個Sword51_ltemHatred設置,不使用該效果也可以全數移除掉
  42. 物品編號:設定會額外增減仇恨值的技能編號,設定0則沒設定的技能都採用0號的設定
  43. 額外增減量:設定使用指定技能所增加的仇恨值,如果是扣仇恨值可以指定負數即可(全體扣除)

  44. =end
  45. module Sword
  46. #=======================================
  47. #★ 魔劍工舖 - 仇恨系統 1.00 (VX)
  48. # http://blog.yam.com/a870053jjkj/
  49. #=======================================
  50.   Sword51_SkillHatred, Sword51_ItemHatred = [], []
  51. =begin
  52. ========================================
  53. ● 設置方法(限戰鬥畫面使用)
  54. 已方仇恨值變量(人物順序):$game_actors[角色編號].action.hatred
  55. 已方仇恨值變量(隊伍順序):$game_party.members[我方順序].action.hatred
  56. 敵方仇恨值變量(隊伍順序):$game_troop.members[敵人順序].action.hatred
  57. ========================================
  58. =end
  59. #=======================================
  60. #● 使用者自定設置
  61. Sword51_AddHatred = [10, 1] # 增加仇恨的數量 [增加量] 或 [每扣血量, 增加量]
  62. Sword51_RedHatred = [10, 1] # 減少仇恨的數量 [減少量] 或 [每扣血量, 減少量]
  63. Sword51_Max = 0 # 設定仇恨值的最大值,設0表示無限制
  64. #--------------------------------------------------------------
  65. #○ 技能仇恨增減表(Sword51_SkillHatred[技能編號] = 增減量)
  66. Sword51_SkillHatred[1] = 50
  67. #--------------------------------------------------------------
  68. #○ 物品仇恨增減表(Sword51_ItemHatred[物品編號] = 增減量)
  69. Sword51_ItemHatred[0] = 0
  70. #=======================================
  71.   $Sword ? $Sword[51] = true : $Sword = {51=>true} # 腳本使用標誌
  72. end
  73. #=======================================
  74. #■ 處理行動 (戰鬥中的行動) 的類別
  75. class Game_BattleAction
  76.   include Sword # 連接自動設置
  77.   attr_accessor :hatred # 仇恨值記錄表
  78.   #-------------------------------------------------------------
  79.   #● 初始化物件(戰鬥者)
  80.   #  定義一個資料表,負責儲存敵人對我方角色的仇恨值數值列表
  81.   alias sword51_initialize initialize
  82.   def initialize(battler) ; sword51_initialize(battler)
  83.     @hatred = Hash.new{|a, b| a[b] = 0} # 定義仇恨紀錄表
  84.   end
  85.   #-------------------------------------------------------------
  86.   #● 隨機目標
  87.   #  將預設的敵人目標選擇來計算誰的仇恨值最高,最高仇恨者為攻擊目標
  88.   alias sword51_decide_random_target decide_random_target
  89.   def decide_random_target
  90.     hatred = [0, 0] # 目前仇恨最高的角色紀錄
  91.     @hatred.each{|k, v| hatred[1] == v ? # 計算攻擊目標
  92.     (hatred = [k, v] if rand(2) == 1) : hatred = [k, v] if hatred[1] <= v}
  93.     if hatred[0] == 0 ; sword51_decide_random_target # 隨機目標
  94.     else ; $game_party.members.each_index{|i| next unless $game_party.members[i]
  95.       @target_index = i if $game_party.members[i].id == hatred[0]}
  96.     end ; @target_index
  97.   end
  98. end
  99. #=======================================
  100. #■ 處理戰鬥畫面的類別
  101. class Scene_Battle
  102.   include Sword # 連接自動設置
  103.   #-------------------------------------------------------------
  104.   #● 執行戰鬥行動:使用技能
  105.   #  使用指定技能就增加或減少仇恨值的處理
  106.   alias sword51_execute_action_skill execute_action_skill
  107.   def execute_action_skill
  108.     skill_id = @active_battler.action.skill.id
  109.     hatred = Sword51_SkillHatred[skill_id] ? Sword51_SkillHatred[skill_id] :
  110.                   (Sword51_SkillHatred[0] ? Sword51_SkillHatred[0] : nil)
  111.     $game_troop.members.each{|enemy| enemy.action.hatred[
  112.     @active_battler.id] += hatred} if hatred # 有使用指定技能時增加憤怒值
  113.     sword51_execute_action_skill
  114.   end
  115.   #-------------------------------------------------------------
  116.   #● 執行戰鬥行動:物品
  117.   #  使用指定物品就增加或減少仇恨值的處理
  118.   alias sword51_execute_action_item execute_action_item
  119.   def execute_action_item
  120.     item_id = @active_battler.action.item.id
  121.     hatred = Sword51_ItemHatred[item_id] ? Sword51_ItemHatred[item_id] :
  122.                   (Sword51_ItemHatred[0] ? Sword51_ItemHatred[0] : nil)
  123.     $game_troop.members.each{|enemy| enemy.action.hatred[
  124.     @active_battler.id] += hatred} if hatred # 有使用指定物品時增加憤怒值
  125.     sword51_execute_action_item
  126.   end
  127.   #-------------------------------------------------------------
  128.   #● 顯示攻擊動畫
  129.   #  在顯示動畫的時候,順便增加或減少敵人對我方角色的仇恨值
  130.   alias sword51_display_attack_animation display_attack_animation
  131.   def display_attack_animation(targets)
  132.     targets.each do |target| if target.hp_damage.is_a?(Numeric) ; if target.hp_damage > 0
  133.       ahatred = Sword51_AddHatred.size == 1 ? Sword51_AddHatred[0] :  # 計算仇恨增加值
  134.       target.hp_damage / Sword51_AddHatred[0] * Sword51_AddHatred[1]
  135.       rhatred = Sword51_RedHatred.size == 1 ? Sword51_RedHatred[0] : # 計算仇恨減少值
  136.       target.hp_damage / Sword51_RedHatred[0] * Sword51_RedHatred[1]
  137.       if @active_battler.is_a?(Game_Actor) # 攻擊者是同伴時
  138.         current = $Sword_VX ? target.action.hatred[@active_battler.id] :
  139.         target.action.hatred[@active_battler.id]
  140.         next if target.is_a?(Game_Actor) # 如果我方對我方行動的話就跳過該目標
  141.         current += ahatred ; current = [current, Sword51_Max].min if Sword51_Max > 0
  142.         $Sword_VX ? target.action.hatred[@active_battler.id] = current :
  143.         target.action.hatred[@active_battler.id] = current
  144.       else # 攻擊者是敵人時
  145.         troop = $game_troop.members.index(@active_battler)
  146.         current = $Sword_VX ? target.action.hatred[troop] : target.action.hatred[troop]
  147.         next if target.is_a?(Game_Enemy) # 如果敵方對敵方行動的話就跳過該目標
  148.         current += ahatred ; current = [current, Sword51_Max].min if Sword51_Max > 0
  149.         $Sword_VX ? target.action.hatred[troop] = current :
  150.         target.action.hatred[troop] = current
  151.       end ; @active_battler.action.hatred[target.id] -= rhatred
  152.       @active_battler.action.hatred[target.id] =
  153.       [@active_battler.action.hatred[target.id], 0].max # 控制底線下限
  154.     end ; end ; end
  155.     sword51_display_attack_animation(targets)
  156.     p $game_troop.members[0].action.hatred, $game_troop.members[1].action.hatred
  157.   end
  158. end
复制代码

点评

我没用过这脚本,运算方式的话就免了…… BOSS的忽略仇恨技能就第74行下写个脚本 Sword51_SkillHatred[BOSS技能的ID] = -9999 #(这是样本)  发表于 2010-10-18 14:10
。。还是看不太懂这个脚本的运算方式。。就、讲解一下?=。=我笨。。还有要是我要设定一个BOSS的技能是忽略仇恨的怎么弄。。  发表于 2010-10-18 13:48
1.嘲讽的话看75行 2.只会减少角色的,不会减少敌方,除非你设定 3.全体的话就要用公共事件了  发表于 2010-10-18 09:48
。。还有一个。。如何制作忽略仇恨的效果。。  发表于 2010-10-18 08:54
他和治疗量挂钩。。 暂时就是这些了。。  发表于 2010-10-18 08:52
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 23:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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