Project1

标题: 敌人等级终极设定教程+范例 [打印本页]

作者: ikki    时间: 2006-11-18 18:15
标题: 敌人等级终极设定教程+范例
其实就是给敌人新建了等级属性,在队伍里的事件设置里为敌人设置等级(设置完后加完全回复哦,否则,血不满哦)。具体内容看范例吧,脚本部分很简单,事件部分也很简单{/hx}。
首先设置Game_Enemy哦。具体的可以自己根据需要更改

  1. #==============================================================================
  2. # ■ Game_Enemy
  3. #------------------------------------------------------------------------------
  4. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
  5. # 内部使用。
  6. #==============================================================================
  7. $a1 = rand(10)    #更改能力用的随机数变量
  8. $a2 = rand(5)     #更改能力用的随机数变量
  9. $a3 = rand(2)     #更改能力用的随机数变量
  10. class Game_Enemy < Game_Battler
  11.   attr_accessor   :level                    # 水平
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     troop_id     : 循环 ID
  15.   #     member_index : 循环成员的索引
  16.   #--------------------------------------------------------------------------
  17.   def initialize(troop_id, member_index)
  18.     super()
  19.     @troop_id = troop_id
  20.     @member_index = member_index
  21.     troop = $data_troops[@troop_id]
  22.     @enemy_id = troop.members[@member_index].enemy_id
  23.     enemy = $data_enemies[@enemy_id]
  24.         
  25.    
  26.     @level = 1                  #初始等级的设定
  27.    

  28.     @battler_name = enemy.battler_name
  29.     @battler_hue = enemy.battler_hue
  30.     @hp = maxhp
  31.     @sp = maxsp
  32.     @hidden = troop.members[@member_index].hidden
  33.     @immortal = troop.members[@member_index].immortal
  34.   end
  35.   
  36.   
  37.   #--------------------------------------------------------------------------
  38.   # ● 更改水品
  39.   #     level : 新的等级
  40.   #--------------------------------------------------------------------------
  41.   def level
  42.     return @level
  43.   end
  44.   
  45.   
  46.   #--------------------------------------------------------------------------
  47.   # ● 获取敌人 ID
  48.   #--------------------------------------------------------------------------
  49.   def id
  50.     return @enemy_id
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取索引
  54.   #--------------------------------------------------------------------------
  55.   def index
  56.     return @member_index
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 获取名称
  60.   #--------------------------------------------------------------------------
  61.   def name
  62.     return $data_enemies[@enemy_id].name
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 获取基本 MaxHP
  66.   #--------------------------------------------------------------------------
  67.   def base_maxhp
  68.     return ($data_enemies[@enemy_id].maxhp + $a1) * @level
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 获取基本 MaxSP
  72.   #--------------------------------------------------------------------------
  73.   def base_maxsp
  74.     return ($data_enemies[@enemy_id].maxsp + $a1) * @level
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 获取基本力量
  78.   #--------------------------------------------------------------------------
  79.   def base_str
  80.     return ($data_enemies[@enemy_id].str + $a2) * @level
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 获取基本灵巧
  84.   #--------------------------------------------------------------------------
  85.   def base_dex
  86.     return ($data_enemies[@enemy_id].dex + $a2) * @level
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 获取基本速度
  90.   #--------------------------------------------------------------------------
  91.   def base_agi
  92.     return ($data_enemies[@enemy_id].agi + $a2) * @level
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 获取基本魔力
  96.   #--------------------------------------------------------------------------
  97.   def base_int
  98.     return ($data_enemies[@enemy_id].int + $a2) * @level
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 获取基本攻击力
  102.   #--------------------------------------------------------------------------
  103.   def base_atk
  104.     return ($data_enemies[@enemy_id].atk + $a2) * @level
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 获取基本物理防御
  108.   #--------------------------------------------------------------------------
  109.   def base_pdef
  110.     return ($data_enemies[@enemy_id].pdef + $a2) * @level
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 获取基本魔法防御
  114.   #--------------------------------------------------------------------------
  115.   def base_mdef
  116.     return ($data_enemies[@enemy_id].mdef + $a2) * @level
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 获取基本回避修正
  120.   #--------------------------------------------------------------------------
  121.   def base_eva
  122.     return ($data_enemies[@enemy_id].eva + $a3) * @level
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 普通攻击 获取攻击方动画 ID
  126.   #--------------------------------------------------------------------------
  127.   def animation1_id
  128.     return $data_enemies[@enemy_id].animation1_id
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 普通攻击 获取对像方动画 ID
  132.   #--------------------------------------------------------------------------
  133.   def animation2_id
  134.     return $data_enemies[@enemy_id].animation2_id
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 获取属性修正值
  138.   #     element_id : 属性 ID
  139.   #--------------------------------------------------------------------------
  140.   def element_rate(element_id)
  141.     # 获取对应属性有效度的数值
  142.     table = [0,200,150,100,50,0,-100]
  143.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  144.     # 状态能防御本属性的情况下效果减半
  145.     for i in @states
  146.       if $data_states[i].guard_element_set.include?(element_id)
  147.         result /= 2
  148.       end
  149.     end
  150.     # 过程结束
  151.     return result
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 获取属性有效度
  155.   #--------------------------------------------------------------------------
  156.   def state_ranks
  157.     return $data_enemies[@enemy_id].state_ranks
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 属性防御判定
  161.   #     state_id : 状态 ID
  162.   #--------------------------------------------------------------------------
  163.   def state_guard?(state_id)
  164.     return false
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 获取普通攻击属性
  168.   #--------------------------------------------------------------------------
  169.   def element_set
  170.     return []
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 获取普通攻击的状态变化 (+)
  174.   #--------------------------------------------------------------------------
  175.   def plus_state_set
  176.     return []
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取普通攻击的状态变化 (-)
  180.   #--------------------------------------------------------------------------
  181.   def minus_state_set
  182.     return []
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 获取行动
  186.   #--------------------------------------------------------------------------
  187.   def actions
  188.     return $data_enemies[@enemy_id].actions
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 获取 EXP
  192.   #--------------------------------------------------------------------------
  193.   def exp
  194.     for actor in $game_party.actors
  195.       if actor.level > @level + 5 or actor.level < @level - 5
  196.         return $data_enemies[@enemy_id].exp + $a3
  197.       elsif actor.level > @level + 15
  198.         return ($data_enemies[@enemy_id].exp + $a3) / 10
  199.       else
  200.         return (($data_enemies[@enemy_id].exp + $a3) * @level) / 2
  201.       end
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 获取金钱
  206.   #--------------------------------------------------------------------------
  207.   def gold
  208.     for actor in $game_party.actors
  209.       if actor.level > @level + 5 or actor.level < @level - 5
  210.         return $data_enemies[@enemy_id].gold + $a3
  211.       elsif actor.level > @level + 15
  212.         return ($data_enemies[@enemy_id].gold + $a3) / 10
  213.       else
  214.         return (($data_enemies[@enemy_id].gold + $a3) * @level) / 2
  215.       end
  216.     end
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 获取物品 ID
  220.   #--------------------------------------------------------------------------
  221.   def item_id
  222.     return $data_enemies[@enemy_id].item_id
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 获取武器 ID
  226.   #--------------------------------------------------------------------------
  227.   def weapon_id
  228.     return $data_enemies[@enemy_id].weapon_id
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 获取放具 ID
  232.   #--------------------------------------------------------------------------
  233.   def armor_id
  234.     return $data_enemies[@enemy_id].armor_id
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 获取宝物出现率
  238.   #--------------------------------------------------------------------------
  239.   def treasure_prob
  240.     return $data_enemies[@enemy_id].treasure_prob
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 取得战斗画面 X 坐标
  244.   #--------------------------------------------------------------------------
  245.   def screen_x
  246.     return $data_troops[@troop_id].members[@member_index].x
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 取得战斗画面 Y 坐标
  250.   #--------------------------------------------------------------------------
  251.   def screen_y
  252.     return $data_troops[@troop_id].members[@member_index].y
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 取得战斗画面 Z 坐标
  256.   #--------------------------------------------------------------------------
  257.   def screen_z
  258.     return screen_y
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 逃跑
  262.   #--------------------------------------------------------------------------
  263.   def escape
  264.     # 设置击中标志
  265.     @hidden = true
  266.     # 清除当前行动
  267.     self.current_action.clear
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 变身
  271.   #     enemy_id : 变身为的敌人 ID
  272.   #--------------------------------------------------------------------------
  273.   def transform(enemy_id)
  274.     # 更改敌人 ID
  275.     @enemy_id = enemy_id
  276.     # 更改战斗图形
  277.     @battler_name = $data_enemies[@enemy_id].battler_name
  278.     @battler_hue = $data_enemies[@enemy_id].battler_hue
  279.     # 在生成行动
  280.     make_action
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 生成行动
  284.   #--------------------------------------------------------------------------
  285.   def make_action
  286.     # 清除当前行动
  287.     self.current_action.clear
  288.     # 无法行动的情况
  289.     unless self.movable?
  290.       # 过程结束
  291.       return
  292.     end
  293.     # 抽取现在有效的行动
  294.     available_actions = []
  295.     rating_max = 0
  296.     for action in self.actions
  297.       # 确认回合条件
  298.       n = $game_temp.battle_turn
  299.       a = action.condition_turn_a
  300.       b = action.condition_turn_b
  301.       if (b == 0 and n != a) or
  302.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  303.         next
  304.       end
  305.       # 确认 HP 条件
  306.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  307.         next
  308.       end
  309.       # 确认等级条件
  310.       if $game_party.max_level < action.condition_level
  311.         next
  312.       end
  313.       # 确认开关条件
  314.       switch_id = action.condition_switch_id
  315.       if switch_id > 0 and $game_switches[switch_id] == false
  316.         next
  317.       end
  318.       # 符合条件 : 添加本行动
  319.       available_actions.push(action)
  320.       if action.rating > rating_max
  321.         rating_max = action.rating
  322.       end
  323.     end
  324.     # 最大概率值作为 3 合计计算(0 除外)
  325.     ratings_total = 0
  326.     for action in available_actions
  327.       if action.rating > rating_max - 3
  328.         ratings_total += action.rating - (rating_max - 3)
  329.       end
  330.     end
  331.     # 概率合计不为 0 的情况下
  332.     if ratings_total > 0
  333.       # 生成随机数
  334.       value = rand(ratings_total)
  335.       # 设置对应生成随机数的当前行动
  336.       for action in available_actions
  337.         if action.rating > rating_max - 3
  338.           if value < action.rating - (rating_max - 3)
  339.             self.current_action.kind = action.kind
  340.             self.current_action.basic = action.basic
  341.             self.current_action.skill_id = action.skill_id
  342.             self.current_action.decide_random_target_for_enemy
  343.             return
  344.           else
  345.             value -= action.rating - (rating_max - 3)
  346.           end
  347.         end
  348.       end
  349.     end
  350.   end
  351. end
复制代码

然后,更改Window_Help,让其等级显示出来。

  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。
  5. #==============================================================================

  6. class Window_Help < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 0, 640, 64)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 设置文本
  16.   #     text  : 窗口显示的字符串
  17.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  18.   #--------------------------------------------------------------------------
  19.   def set_text(text, align = 0)
  20.     # 如果文本和对齐方式的至少一方与上次的不同
  21.     if text != @text or align != @align
  22.       # 再描绘文本
  23.       self.contents.clear
  24.       self.contents.font.color = normal_color
  25.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  26.       @text = text
  27.       @align = align
  28.       @actor = nil
  29.     end
  30.     self.visible = true
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 设置角色
  34.   #     actor : 要显示状态的角色
  35.   #--------------------------------------------------------------------------
  36.   def set_actor(actor)
  37.     if actor != @actor
  38.       self.contents.clear
  39.       draw_actor_name(actor, 4, 0)
  40.       draw_actor_state(actor, 140, 0)
  41.       draw_actor_hp(actor, 284, 0)
  42.       draw_actor_sp(actor, 460, 0)
  43.       @actor = actor
  44.       @text = nil
  45.       self.visible = true
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 设置敌人
  50.   #     enemy : 要显示名字和状态的敌人
  51.   #--------------------------------------------------------------------------
  52.   def set_enemy(enemy)
  53.    
  54.     lv = enemy.level.to_s
  55.    
  56.    
  57.     text = "等级" + lv + "  " + enemy.name
  58.     state_text = make_battler_state_text(enemy, 112, false)
  59.     if state_text != ""
  60.       text += "  " + state_text
  61.     end
  62.     set_text(text, 1)
  63.   end
  64. end
复制代码

就此,脚本部分大功告成,然后就是事件部分啦。
将下边的设置放在队伍的事件设置里,后边的数值自己随便改(别太BT哦,否则,玩家会疯掉的)。然后,在脚本插入完,还要给敌人完全回复一下,以便血魔补满。

  1. $game_troop.enemies[0].level = 10
  2. $game_troop.enemies[1].level = 6
  3. $game_troop.enemies[2].level = 5
  4. $game_troop.enemies[3].level = 8
  5. $game_troop.enemies[4].level = 12
  6. $game_troop.enemies[5].level = 9
  7. $game_troop.enemies[6].level = 15
  8. $game_troop.enemies[7].level = 7
  9. $a1 = rand(10)
  10. $a2 = rand(5)
  11. $a3 = rand(2)
复制代码



代码部分做了更新,不会出现敌人每回合能力变化了,增加3个全局变量进行了控制,终于正常了。{/dk}

工程下载:
FTP工程完美版:加入了敌人血量以区分等级差异:
ftp://[email protected]/尚� ... 级终极设定.rar


              [本贴由 絮儿 于 2007-6-30 14:25:32 进行了编辑]
作者: ikki    时间: 2006-11-18 18:15
标题: 敌人等级终极设定教程+范例
其实就是给敌人新建了等级属性,在队伍里的事件设置里为敌人设置等级(设置完后加完全回复哦,否则,血不满哦)。具体内容看范例吧,脚本部分很简单,事件部分也很简单{/hx}。
首先设置Game_Enemy哦。具体的可以自己根据需要更改

  1. #==============================================================================
  2. # ■ Game_Enemy
  3. #------------------------------------------------------------------------------
  4. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
  5. # 内部使用。
  6. #==============================================================================
  7. $a1 = rand(10)    #更改能力用的随机数变量
  8. $a2 = rand(5)     #更改能力用的随机数变量
  9. $a3 = rand(2)     #更改能力用的随机数变量
  10. class Game_Enemy < Game_Battler
  11.   attr_accessor   :level                    # 水平
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     troop_id     : 循环 ID
  15.   #     member_index : 循环成员的索引
  16.   #--------------------------------------------------------------------------
  17.   def initialize(troop_id, member_index)
  18.     super()
  19.     @troop_id = troop_id
  20.     @member_index = member_index
  21.     troop = $data_troops[@troop_id]
  22.     @enemy_id = troop.members[@member_index].enemy_id
  23.     enemy = $data_enemies[@enemy_id]
  24.         
  25.    
  26.     @level = 1                  #初始等级的设定
  27.    

  28.     @battler_name = enemy.battler_name
  29.     @battler_hue = enemy.battler_hue
  30.     @hp = maxhp
  31.     @sp = maxsp
  32.     @hidden = troop.members[@member_index].hidden
  33.     @immortal = troop.members[@member_index].immortal
  34.   end
  35.   
  36.   
  37.   #--------------------------------------------------------------------------
  38.   # ● 更改水品
  39.   #     level : 新的等级
  40.   #--------------------------------------------------------------------------
  41.   def level
  42.     return @level
  43.   end
  44.   
  45.   
  46.   #--------------------------------------------------------------------------
  47.   # ● 获取敌人 ID
  48.   #--------------------------------------------------------------------------
  49.   def id
  50.     return @enemy_id
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取索引
  54.   #--------------------------------------------------------------------------
  55.   def index
  56.     return @member_index
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 获取名称
  60.   #--------------------------------------------------------------------------
  61.   def name
  62.     return $data_enemies[@enemy_id].name
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 获取基本 MaxHP
  66.   #--------------------------------------------------------------------------
  67.   def base_maxhp
  68.     return ($data_enemies[@enemy_id].maxhp + $a1) * @level
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 获取基本 MaxSP
  72.   #--------------------------------------------------------------------------
  73.   def base_maxsp
  74.     return ($data_enemies[@enemy_id].maxsp + $a1) * @level
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 获取基本力量
  78.   #--------------------------------------------------------------------------
  79.   def base_str
  80.     return ($data_enemies[@enemy_id].str + $a2) * @level
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 获取基本灵巧
  84.   #--------------------------------------------------------------------------
  85.   def base_dex
  86.     return ($data_enemies[@enemy_id].dex + $a2) * @level
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 获取基本速度
  90.   #--------------------------------------------------------------------------
  91.   def base_agi
  92.     return ($data_enemies[@enemy_id].agi + $a2) * @level
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 获取基本魔力
  96.   #--------------------------------------------------------------------------
  97.   def base_int
  98.     return ($data_enemies[@enemy_id].int + $a2) * @level
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 获取基本攻击力
  102.   #--------------------------------------------------------------------------
  103.   def base_atk
  104.     return ($data_enemies[@enemy_id].atk + $a2) * @level
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 获取基本物理防御
  108.   #--------------------------------------------------------------------------
  109.   def base_pdef
  110.     return ($data_enemies[@enemy_id].pdef + $a2) * @level
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 获取基本魔法防御
  114.   #--------------------------------------------------------------------------
  115.   def base_mdef
  116.     return ($data_enemies[@enemy_id].mdef + $a2) * @level
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 获取基本回避修正
  120.   #--------------------------------------------------------------------------
  121.   def base_eva
  122.     return ($data_enemies[@enemy_id].eva + $a3) * @level
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 普通攻击 获取攻击方动画 ID
  126.   #--------------------------------------------------------------------------
  127.   def animation1_id
  128.     return $data_enemies[@enemy_id].animation1_id
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 普通攻击 获取对像方动画 ID
  132.   #--------------------------------------------------------------------------
  133.   def animation2_id
  134.     return $data_enemies[@enemy_id].animation2_id
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 获取属性修正值
  138.   #     element_id : 属性 ID
  139.   #--------------------------------------------------------------------------
  140.   def element_rate(element_id)
  141.     # 获取对应属性有效度的数值
  142.     table = [0,200,150,100,50,0,-100]
  143.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  144.     # 状态能防御本属性的情况下效果减半
  145.     for i in @states
  146.       if $data_states[i].guard_element_set.include?(element_id)
  147.         result /= 2
  148.       end
  149.     end
  150.     # 过程结束
  151.     return result
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 获取属性有效度
  155.   #--------------------------------------------------------------------------
  156.   def state_ranks
  157.     return $data_enemies[@enemy_id].state_ranks
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 属性防御判定
  161.   #     state_id : 状态 ID
  162.   #--------------------------------------------------------------------------
  163.   def state_guard?(state_id)
  164.     return false
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 获取普通攻击属性
  168.   #--------------------------------------------------------------------------
  169.   def element_set
  170.     return []
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 获取普通攻击的状态变化 (+)
  174.   #--------------------------------------------------------------------------
  175.   def plus_state_set
  176.     return []
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取普通攻击的状态变化 (-)
  180.   #--------------------------------------------------------------------------
  181.   def minus_state_set
  182.     return []
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 获取行动
  186.   #--------------------------------------------------------------------------
  187.   def actions
  188.     return $data_enemies[@enemy_id].actions
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 获取 EXP
  192.   #--------------------------------------------------------------------------
  193.   def exp
  194.     for actor in $game_party.actors
  195.       if actor.level > @level + 5 or actor.level < @level - 5
  196.         return $data_enemies[@enemy_id].exp + $a3
  197.       elsif actor.level > @level + 15
  198.         return ($data_enemies[@enemy_id].exp + $a3) / 10
  199.       else
  200.         return (($data_enemies[@enemy_id].exp + $a3) * @level) / 2
  201.       end
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 获取金钱
  206.   #--------------------------------------------------------------------------
  207.   def gold
  208.     for actor in $game_party.actors
  209.       if actor.level > @level + 5 or actor.level < @level - 5
  210.         return $data_enemies[@enemy_id].gold + $a3
  211.       elsif actor.level > @level + 15
  212.         return ($data_enemies[@enemy_id].gold + $a3) / 10
  213.       else
  214.         return (($data_enemies[@enemy_id].gold + $a3) * @level) / 2
  215.       end
  216.     end
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 获取物品 ID
  220.   #--------------------------------------------------------------------------
  221.   def item_id
  222.     return $data_enemies[@enemy_id].item_id
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 获取武器 ID
  226.   #--------------------------------------------------------------------------
  227.   def weapon_id
  228.     return $data_enemies[@enemy_id].weapon_id
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 获取放具 ID
  232.   #--------------------------------------------------------------------------
  233.   def armor_id
  234.     return $data_enemies[@enemy_id].armor_id
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 获取宝物出现率
  238.   #--------------------------------------------------------------------------
  239.   def treasure_prob
  240.     return $data_enemies[@enemy_id].treasure_prob
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 取得战斗画面 X 坐标
  244.   #--------------------------------------------------------------------------
  245.   def screen_x
  246.     return $data_troops[@troop_id].members[@member_index].x
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 取得战斗画面 Y 坐标
  250.   #--------------------------------------------------------------------------
  251.   def screen_y
  252.     return $data_troops[@troop_id].members[@member_index].y
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 取得战斗画面 Z 坐标
  256.   #--------------------------------------------------------------------------
  257.   def screen_z
  258.     return screen_y
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 逃跑
  262.   #--------------------------------------------------------------------------
  263.   def escape
  264.     # 设置击中标志
  265.     @hidden = true
  266.     # 清除当前行动
  267.     self.current_action.clear
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 变身
  271.   #     enemy_id : 变身为的敌人 ID
  272.   #--------------------------------------------------------------------------
  273.   def transform(enemy_id)
  274.     # 更改敌人 ID
  275.     @enemy_id = enemy_id
  276.     # 更改战斗图形
  277.     @battler_name = $data_enemies[@enemy_id].battler_name
  278.     @battler_hue = $data_enemies[@enemy_id].battler_hue
  279.     # 在生成行动
  280.     make_action
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 生成行动
  284.   #--------------------------------------------------------------------------
  285.   def make_action
  286.     # 清除当前行动
  287.     self.current_action.clear
  288.     # 无法行动的情况
  289.     unless self.movable?
  290.       # 过程结束
  291.       return
  292.     end
  293.     # 抽取现在有效的行动
  294.     available_actions = []
  295.     rating_max = 0
  296.     for action in self.actions
  297.       # 确认回合条件
  298.       n = $game_temp.battle_turn
  299.       a = action.condition_turn_a
  300.       b = action.condition_turn_b
  301.       if (b == 0 and n != a) or
  302.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  303.         next
  304.       end
  305.       # 确认 HP 条件
  306.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  307.         next
  308.       end
  309.       # 确认等级条件
  310.       if $game_party.max_level < action.condition_level
  311.         next
  312.       end
  313.       # 确认开关条件
  314.       switch_id = action.condition_switch_id
  315.       if switch_id > 0 and $game_switches[switch_id] == false
  316.         next
  317.       end
  318.       # 符合条件 : 添加本行动
  319.       available_actions.push(action)
  320.       if action.rating > rating_max
  321.         rating_max = action.rating
  322.       end
  323.     end
  324.     # 最大概率值作为 3 合计计算(0 除外)
  325.     ratings_total = 0
  326.     for action in available_actions
  327.       if action.rating > rating_max - 3
  328.         ratings_total += action.rating - (rating_max - 3)
  329.       end
  330.     end
  331.     # 概率合计不为 0 的情况下
  332.     if ratings_total > 0
  333.       # 生成随机数
  334.       value = rand(ratings_total)
  335.       # 设置对应生成随机数的当前行动
  336.       for action in available_actions
  337.         if action.rating > rating_max - 3
  338.           if value < action.rating - (rating_max - 3)
  339.             self.current_action.kind = action.kind
  340.             self.current_action.basic = action.basic
  341.             self.current_action.skill_id = action.skill_id
  342.             self.current_action.decide_random_target_for_enemy
  343.             return
  344.           else
  345.             value -= action.rating - (rating_max - 3)
  346.           end
  347.         end
  348.       end
  349.     end
  350.   end
  351. end
复制代码

然后,更改Window_Help,让其等级显示出来。

  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。
  5. #==============================================================================

  6. class Window_Help < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 0, 640, 64)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 设置文本
  16.   #     text  : 窗口显示的字符串
  17.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  18.   #--------------------------------------------------------------------------
  19.   def set_text(text, align = 0)
  20.     # 如果文本和对齐方式的至少一方与上次的不同
  21.     if text != @text or align != @align
  22.       # 再描绘文本
  23.       self.contents.clear
  24.       self.contents.font.color = normal_color
  25.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  26.       @text = text
  27.       @align = align
  28.       @actor = nil
  29.     end
  30.     self.visible = true
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 设置角色
  34.   #     actor : 要显示状态的角色
  35.   #--------------------------------------------------------------------------
  36.   def set_actor(actor)
  37.     if actor != @actor
  38.       self.contents.clear
  39.       draw_actor_name(actor, 4, 0)
  40.       draw_actor_state(actor, 140, 0)
  41.       draw_actor_hp(actor, 284, 0)
  42.       draw_actor_sp(actor, 460, 0)
  43.       @actor = actor
  44.       @text = nil
  45.       self.visible = true
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 设置敌人
  50.   #     enemy : 要显示名字和状态的敌人
  51.   #--------------------------------------------------------------------------
  52.   def set_enemy(enemy)
  53.    
  54.     lv = enemy.level.to_s
  55.    
  56.    
  57.     text = "等级" + lv + "  " + enemy.name
  58.     state_text = make_battler_state_text(enemy, 112, false)
  59.     if state_text != ""
  60.       text += "  " + state_text
  61.     end
  62.     set_text(text, 1)
  63.   end
  64. end
复制代码

就此,脚本部分大功告成,然后就是事件部分啦。
将下边的设置放在队伍的事件设置里,后边的数值自己随便改(别太BT哦,否则,玩家会疯掉的)。然后,在脚本插入完,还要给敌人完全回复一下,以便血魔补满。

  1. $game_troop.enemies[0].level = 10
  2. $game_troop.enemies[1].level = 6
  3. $game_troop.enemies[2].level = 5
  4. $game_troop.enemies[3].level = 8
  5. $game_troop.enemies[4].level = 12
  6. $game_troop.enemies[5].level = 9
  7. $game_troop.enemies[6].level = 15
  8. $game_troop.enemies[7].level = 7
  9. $a1 = rand(10)
  10. $a2 = rand(5)
  11. $a3 = rand(2)
复制代码



代码部分做了更新,不会出现敌人每回合能力变化了,增加3个全局变量进行了控制,终于正常了。{/dk}

工程下载:
FTP工程完美版:加入了敌人血量以区分等级差异:
ftp://[email protected]/尚� ... 级终极设定.rar


              [本贴由 絮儿 于 2007-6-30 14:25:32 进行了编辑]
作者: nickdkk    时间: 2006-11-18 22:07
好長喔-                           -
作者: ikki    时间: 2006-11-19 21:38
以下引用nickdkk于2006-11-18 14:07:35的发言:

好長喔-                           -

修改的地方很少啦,就几行而已,只是发的完整的才那么长的。
作者: 小传子    时间: 2006-11-19 21:40
哇哈哈 看懂了前面20行-_-||
这写技术含量的东西理解起来也真不容易
作者: 神思    时间: 2006-11-20 05:33
-___-`|||能力居然直接加rand...............
好象这样会在战斗中一直变化的说~~~~
你可以放个显血的脚本的说~~~~会一直变的说~~``orz........-______________-
作者: 风雪优游    时间: 2006-11-20 18:34
............怎么样让它不直接显示等级.....而只是显示........啊,头晕啊~~多做点注释吧= =|||
作者: ikki    时间: 2006-11-20 19:21
以下引用神思于2006-11-19 21:33:17的发言:

-___-`|||能力居然直接加rand...............
好象这样会在战斗中一直变化的说~~~~
你可以放个显血的脚本的说~~~~会一直变的说~~``orz........-______________-

啊哦,我犯了魔力宝贝曾经出现的一个错误了,{/dk}
作者: SailCat    时间: 2006-11-20 19:33
这么设定太麻烦了……

我贴我的
module RPG
  class Enemy
    def name
      name = @name.split(/@/)[0]
      return name != nil ? name.split(/,/)[0].to_s : ""
    end
    def treasure2
      name = @name.split(/@/)[0]
      return name != nil ? name.split(/,/)[1].to_s : ""
    end
    def treasure3
      name = @name.split(/@/)[0]
      return name != nil ? name.split(/,/)[2].to_s : ""
    end
    def treasure4
      name = @name.split(/@/)[0]
      return name != nil ? name.split(/,/)[3].to_s : ""
    end
    def level
      level = @name.split(/@/)[1]
      return [[level.to_i, 1].max, 99].min
    end
    def name=(str)
      @name[self.name] != nil ? @name[self.name] = str : @name = str
    end
  end
end
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取等级
  #--------------------------------------------------------------------------
  def level
    return $data_enemies[@enemy_id].level
  end
end
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 应用通常攻击效果
  #     attacker : 攻击者 (battler)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
      .....
      # 计算攻击倍率
      rate = attacker.str * 100
      rate += rate * attacker.level / 50
      rate /= 2000
      .....
  end
  #--------------------------------------------------------------------------
  # ● 应用特技效果
  #     user  : 特技的使用者 (battler)
  #     skill : 特技
  #     rate_mod : 倍率修正
  #--------------------------------------------------------------------------
  def skill_effect(user, skill, rate_mod = 1.0)
    ......
    # 如果是物理攻击命中受状态影响
    if skill.atk_f > 0
      hit *= user.hit / 100
      hit = 100 if user.aura?
    # 非确定命中的情况受等级差影响
    elsif hit != 100
      hit += user.level - self.level
    end
    ......
      # 计算倍率
      rate = user.str * skill.str_f
      rate += user.dex * skill.dex_f
      rate += user.agi * skill.agi_f
      rate += user.int * skill.int_f
      rate += rate * user.level / 50
      rate /= 2000
    ......
  end
end

无非就是改一些东西而已...让level去参与伤害的计算,真要让level改变原始能力值太难了

作者: ikki    时间: 2006-11-20 19:39
以下引用SailCat于2006-11-20 11:33:21的发言:

这么设定太麻烦了……

   ......
无非就是改一些东西而已...让level去参与伤害的计算,真要让level改变原始能力值太难了

更新后的可以了应该,你那个会跟特殊战斗脚本冲突的。
作者: SailCat    时间: 2006-11-20 19:40
特殊战斗脚本是什么……?

作者: ikki    时间: 2006-11-20 19:41
以下引用SailCat于2006-11-20 11:40:34的发言:

特殊战斗脚本是什么……?

http://rpg.blue/web/htm/news184.htm
你的会跟偷窃冲突。
作者: SailCat    时间: 2006-11-20 19:43
ft.......用这个脚本不如用公共事件来做特殊战斗……
而且偷窃的话,你把等级的分隔符(@)改成其他的字串,脚本里改一下就可以了
作者: ikki    时间: 2006-11-20 19:46
以下引用SailCat于2006-11-20 11:43:42的发言:

ft.......用这个脚本不如用公共事件来做特殊战斗……
而且偷窃的话,你把等级的分隔符(@)改成其他的字串,脚本里改一下就可以了

测试过,曾经想把敌人HP、SP上限突破脚本放在一起,结果,认上限不认偷窃了或认偷窃不认上限了。
还有就是你的公共事件的那个什么时候把这个脚本的所有功能全复刻啊?
作者: 永劫的咎人    时间: 2007-2-23 04:28
提示: 作者被禁止或删除 内容自动屏蔽




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