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

Project1

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

[RMVX发布] 敌人属性变量

[复制链接]

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

跳转到指定楼层
1
发表于 2011-9-21 19:15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 feizhaodan 于 2011-9-21 19:16 编辑

第五弹。不多说,直接上脚本:
  1. #============================================================================
  2. # ☆ 敌人属性变量。
  3. #    由feizhaodan制作。
  4. #    发布于66RPG
  5. #    http://rpg.blue/
  6. #    版本号: 1.0.0
  7. #    2011/9/21
  8. #    转载时请连同这里一起转
  9. #============================================================================
  10. # ▽ 使用说明。
  11. # 在敌人的备注栏内填入
  12. # <Vst [+-]n[%][, true]>
  13. # 在ST内填入想要启用的属性
  14. # HP: 血, MP: 魔, ATK:攻击, DEF:防御
  15. # SPI: 智力, AGI:敏捷, EXP:经验, GOLD:金钱
  16. # 在[+-]处输入+号或者-号,不用添加[]
  17. # 在-号时表示随机减少,省略或者加号为增加。
  18. # 在n输入随机增加的量
  19. # 在[%]处输入%号,不用添加[]
  20. # 若输入则量变成元属性的n%,不加入则无用。
  21. # 后面的[, true]若写入,则无视[+-]处,
  22. # 变为随机增减随机量。
  23. #==============================================================================
  24. # ■ RPG::Enemy
  25. #------------------------------------------------------------------------------
  26. #  处理敌人的数据结构。
  27. #==============================================================================

  28. module RPG
  29.   class Enemy
  30.     def variation
  31.       var = []
  32.       str = self.note.clone
  33.       str.split(/[\r\n]+/).each{|line|
  34.       if line =~ /<(?:V)*(HP|MP|ATK|DEF|SPI|AGI|EXP|GOLD)?[ ]*([\+\-]?\d+)([%])?(?:,[ ]*(TRUE|FALSE))?>/i
  35.         temp = $~
  36.         var.push([temp[1], temp[2].to_i, temp[3], temp[4]])
  37.       end
  38.       }
  39.       return var
  40.     end
  41.   end
  42. end
  43. #==============================================================================
  44. # ■ Game_Enemy
  45. #------------------------------------------------------------------------------
  46. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
  47. #==============================================================================

  48. class Game_Enemy < Game_Battler
  49.   #--------------------------------------------------------------------------
  50.   # ○ 初始化对像(alias)
  51.   #     index    : 队伍中索引
  52.   #     enemy_id : 敌人 ID
  53.   #--------------------------------------------------------------------------
  54.   alias variable_initialize initialize
  55.   def initialize(index, enemy_id)
  56.     @hp_var = 0
  57.     @mp_var = 0
  58.     @atk_var = 0
  59.     @def_var = 0
  60.     @spi_var = 0
  61.     @agi_var = 0
  62.     @exp_var = 0
  63.     @gold_var = 0
  64.     variable_initialize(index, enemy_id)
  65.     make_variation(enemy)
  66.     @hp = maxhp
  67.     @mp = maxmp
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ○ 设置变量(新定义)
  71.   #     enemy : 敌人
  72.   #--------------------------------------------------------------------------
  73.   def make_variation(enemy)
  74.     variation = enemy.variation
  75.     pos = 1
  76.     if variation.empty?
  77.       @hp_var = 0
  78.       @mp_var = 0
  79.       @atk_var = 0
  80.       @def_var = 0
  81.       @spi_var = 0
  82.       @agi_var = 0
  83.       @gold_var = 0
  84.       @exp_var = 0
  85.     else
  86.       for i in variation
  87.         if i[1] == nil
  88.           next
  89.         end
  90.         case i[0]
  91.         when nil
  92.           if i[4] =~ /TRUE/i
  93.             @all_randum = true
  94.             i[1] = i[1] * -1        if i[1] < 0
  95.           else
  96.             @all_randum = false
  97.           end
  98.           if i[2] != nil
  99.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  100.             pos = -1 if i[1] < 0
  101.             @hp_var += (rand((enemy.maxhp * i[1] / 100) + 1) * pos)
  102.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  103.             pos = -1 if i[1] < 0
  104.             @mp_var += (rand((enemy.maxmp * i[1] / 100) + 1) * pos)
  105.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  106.             pos = -1 if i[1] < 0
  107.             @atk_var += (rand((enemy.atk * i[1] / 100) + 1) * pos)
  108.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  109.             pos = -1 if i[1] < 0
  110.             @def_var += (rand((enemy.def * i[1] / 100) + 1) * pos)
  111.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  112.             pos = -1 if i[1] < 0
  113.             @spi_var += (rand((enemy.spi * i[1] / 100) + 1) * pos)
  114.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  115.             pos = -1 if i[1] < 0
  116.             @agi_var += (rand((enemy.agi * i[1] / 100) + 1) * pos)
  117.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  118.             pos = -1 if i[1] < 0
  119.             @exp_var += (rand((enemy.exp * i[1] / 100) + 1) * pos)
  120.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  121.             pos = -1 if i[1] < 0
  122.             @gold_var += (rand((enemy.gold * i[1] / 100) + 1) * pos)
  123.           else
  124.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  125.             pos = -1 if i[1] < 0
  126.             @hp_var += (rand(i[1] + 1) * pos)
  127.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  128.             pos = -1 if i[1] < 0
  129.             @mp_var += (rand(i[1]+ 1) * pos)
  130.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  131.             pos = -1 if i[1] < 0
  132.             @atk_var += (rand(i[1] + 1) * pos)
  133.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  134.             pos = -1 if i[1] < 0
  135.             @def_var += (rand(i[1] + 1) * pos)
  136.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  137.             pos = -1 if i[1] < 0
  138.             @spi_var += (rand(i[1] + 1) * pos)
  139.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  140.             pos = -1 if i[1] < 0
  141.             @agi_var += (rand(i[1] + 1) * pos)
  142.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  143.             pos = -1 if i[1] < 0
  144.             @exp_var += (rand(i[1] + 1) * pos)
  145.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  146.             pos = -1 if i[1] < 0
  147.             @gold_var += (rand(i[1] + 1) * pos)
  148.           end
  149.         when /HP/i
  150.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  151.             pos = -1 if i[1] < 0
  152.           if i[2] != nil
  153.             @hp_var = (rand((enemy.maxhp * i[1] / 100) + 1) * pos)
  154.           else
  155.             @hp_var = (rand(i[1] + 1) * pos)
  156.           end
  157.         when /MP/i
  158.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  159.             pos = -1 if i[1] < 0
  160.           if i[2] != nil
  161.             @mp_var = (rand((enemy.maxmp * i[1] / 100) + 1) * pos)
  162.           else
  163.             @mp_var = (rand(i[1]+ 1) * pos)
  164.           end
  165.         when /ATK/i
  166.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  167.             pos = -1 if i[1] < 0
  168.           if i[2] != nil
  169.             @atk_var = (rand((enemy.atk * i[1] / 100) + 1) * pos)
  170.           else
  171.             @atk_var = (rand(i[1] + 1) * pos)
  172.           end
  173.         when /DEF/i
  174.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  175.             pos = -1 if i[1] < 0
  176.           if i[2] != nil
  177.             @def_var = (rand((enemy.def * i[1] / 100) + 1) * pos)
  178.           else
  179.             @def_var = (rand(i[1] + 1) * pos)
  180.           end
  181.         when /SPI/i
  182.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  183.             pos = -1 if i[1] < 0
  184.           if i[2] != nil
  185.             @spi_var = (rand((enemy.spi * i[1] / 100) + 1) * pos)
  186.           else
  187.             @spi_var = (rand(i[1] + 1) * pos)
  188.           end
  189.         when /AGI/i
  190.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  191.             pos = -1 if i[1] < 0
  192.           if i[2] != nil
  193.             @agi_var = (rand((enemy.agi * i[1] / 100) + 1) * pos)
  194.           else
  195.             @agi_var = (rand(i[1] + 1) * pos)
  196.           end
  197.         when /EXP/i
  198.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  199.             pos = -1 if i[1] < 0
  200.           if i[2] != nil
  201.             @exp_var = (rand((enemy.exp * i[1] / 100) + 1) * pos)
  202.           else
  203.             @exp_var = (rand(i[1] + 1) * pos)
  204.           end
  205.         when /GOLD/i
  206.             pos = ((rand(10) + 1) > 5) ? 1 : -1 if @all_randum == true
  207.             pos = -1 if i[1] < 0
  208.           if i[2] != nil
  209.             @gold_var = (rand((enemy.gold * i[1] / 100) + 1) * pos)
  210.           else
  211.             @gold_var = (rand(i[1] + 1) * pos)
  212.           end
  213.         end
  214.         pos = 1
  215.       end
  216.     end
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ 获取基本体力最大值(alias)
  220.   #--------------------------------------------------------------------------
  221.   alias variation_base_maxhp base_maxhp
  222.   def base_maxhp
  223.     n = variation_base_maxhp
  224.     n += @hp_var
  225.     return n
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ○ 获取基本魔力最大值(alias)
  229.   #--------------------------------------------------------------------------
  230.   alias variation_base_maxmp base_maxmp
  231.   def base_maxmp
  232.     n = variation_base_maxmp
  233.     n += @mp_var
  234.     return n
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ○ 获取基本攻击力(alias)
  238.   #--------------------------------------------------------------------------
  239.   alias variation_base_atk base_atk
  240.   def base_atk
  241.     n = variation_base_atk
  242.     n += @atk_var
  243.     return n
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ○ 获取基本防御力(alias)
  247.   #--------------------------------------------------------------------------
  248. alias variation_base_def base_def
  249.   def base_def
  250.     n = variation_base_def
  251.     n += @def_var
  252.     return n
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ○ 获取基本精神力(alias)
  256.   #--------------------------------------------------------------------------
  257. alias variation_base_spi base_spi
  258.   def base_spi
  259.     n = variation_base_spi
  260.     n += @spi_var
  261.     return n
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ○ 获取基本敏捷(alias)
  265.   #--------------------------------------------------------------------------
  266.   alias variation_base_agi base_agi
  267.   def base_agi
  268.     n = variation_base_agi
  269.     n += @agi_var
  270.     return n
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ○ 获取经验值(alias)
  274.   #--------------------------------------------------------------------------
  275.   alias variation_exp exp
  276.   def exp
  277.     n = variation_exp
  278.     n += @exp_var
  279.     return n
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ○ 获取金钱(alias)
  283.   #--------------------------------------------------------------------------
  284.   alias variation_gold gold
  285.   def gold
  286.     n = variation_gold
  287.     n += @gold_var
  288.     return n
  289.   end
  290. end
  291. #============================================================================
  292. # ☆ 敌人属性变量。
  293. #    由feizhaodan制作。
  294. #    发布于66RPG
  295. #    http://rpg.blue/
  296. #    版本号: 1.0.0
  297. #    2011/9/21
  298. #    转载时请连同这里一起转
  299. #============================================================================
复制代码
说明在脚本刚开始。
把设置的敌人的各种属性按照设置的内容进行随机增减,令同一种敌人也有不同的属性这种个性。

这个脚本的别名《本人的正则表达式练习》(PIA飞)

PS:脚本内容有些乱,请不要介意。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2012-4-5
帖子
117
2
发表于 2012-6-16 11:44:58 | 只看该作者
怎么都不上个范例啊!!看不懂哦!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

沉睡的八宝粥 

梦石
0
星屑
64
在线时间
832 小时
注册时间
2011-4-22
帖子
2996

短篇七萝莉正太组季军

3
发表于 2012-6-16 19:42:35 | 只看该作者
有什么用么......
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
519
在线时间
664 小时
注册时间
2010-6-30
帖子
223
4
发表于 2012-8-8 10:11:53 | 只看该作者
<VHP [+]2000[][, true]>
<VsHPt [+]2000[][, true]>
为啥没用!求解释~表示无法理解楼主说明上的意思...在st内填..是覆盖掉呢,还是填在里面.

点评

[]这个括号删掉就行  发表于 2012-8-8 12:45
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
519
在线时间
664 小时
注册时间
2010-6-30
帖子
223
5
发表于 2012-8-9 09:41:47 | 只看该作者
原来如此!这脚本果断很好用..
<VHP+100%, true> 这样的话,敌人是不是就会随机增减HP了?

true如果换成反词的话,是不是就固定了...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
94
在线时间
306 小时
注册时间
2008-3-2
帖子
164
6
发表于 2013-5-21 21:15:13 | 只看该作者
这个不错,,
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
582
在线时间
917 小时
注册时间
2013-3-13
帖子
557
7
发表于 2013-5-26 13:39:30 | 只看该作者
在敌人等级脚本中,用rand也可以。
如图:

  1. #============================================================================
  2. # 〇 让敌人也有等级(敌人能力自动设置)
  3. #                              By.冰舞蝶恋
  4. #----------------------------------------------------------------------------
  5. #
  6. #  用法:在敌人的备注里写上等级 = 设定的等级即可。
  7. #        如:等级 = 20
  8. #        如果需要随机等级,那么可以用
  9. #            等级 = rand(b)+a
  10. #            那么随机数的最小值是a,最大值是a+b-1
  11. #            比如需要2~5的随机数,那么
  12. #            等级 = rand(4)+2
  13. #            此脚本会显示所设定的敌人等级。
  14. #----------------------------------------------------------------------------
  15. #  设置:请在下方设定敌人的每级增长能力。
  16. #----------------------------------------------------------------------------
  17. #  注意:如果不需要敌人的等级,不在备注中填写相关文字即可。
  18. #        由于该脚本会自动设定敌人的等级和能力,所以当你需要自己设定敌人的能力
  19. #        时,你只需不在备注中填写即可。
  20. #----------------------------------------------------------------------------
  21. #  更新:加入敌人的金钱和经验的计算,更加省力。
  22. #============================================================================

  23. #---------------------- 以下是敌人能力设置部分 ------------------------------
  24. $hpl = rand(21) + 40   # 敌人每级所提高的生命值
  25. $mpl = rand(21) + 40   # 敌人每级所提高的魔法值
  26. $atkl = rand(3) + 3   # 敌人每级所增长的攻击力
  27. $defl = rand(6) + 4   # 敌人每级所增长的防御力
  28. $spil = rand(3) + 3   # 敌人每级所增长的精神力
  29. $agil = 2             # 敌人每级所增长的敏捷度
  30. $goldl = 2  # 敌人每级所能多获得的金钱数量
  31. $expl = 4   # 敌人每级所能多获得的经验数量
  32. #----------------------------------------------------------------------------
  33. class Game_Enemy
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取并显示敌人的等级
  36.   #--------------------------------------------------------------------------
  37.   def name
  38.     if @plural
  39.       $z = $data_enemies[@enemy_id].read_note('等级')
  40.       if $z != nil  
  41.         return @original_name + "  #{$z}级"
  42.       else
  43.         return @original_name + "  #{$z}级"
  44.       end
  45.       else
  46.       $z = $data_enemies[@enemy_id].read_note('等级')
  47.       return @original_name + "  #{$z}级"
  48.     end
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取基本体力最大值
  52.   #--------------------------------------------------------------------------
  53.   def base_maxhp
  54.     $z = $data_enemies[@enemy_id].read_note('等级')
  55.     if $z == nil
  56.       return enemy.maxhp   
  57.     elsif $game_party.members.size == 1
  58.       return $data_enemies[@enemy_id].read_note('等级') * $hpl
  59.     elsif $game_party.members.size == 2
  60.       return $data_enemies[@enemy_id].read_note('等级') * $hpl * 2
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 获取基本魔力最大值
  65.   #--------------------------------------------------------------------------
  66.   def base_maxmp
  67.     $z = $data_enemies[@enemy_id].read_note('等级')
  68.     if $z == nil
  69.       return enemy.maxmp
  70.     else
  71.       return $data_enemies[@enemy_id].read_note('等级') * $mpl
  72.     end
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取基本攻击力
  76.   #--------------------------------------------------------------------------
  77.   def base_atk
  78.     $z = $data_enemies[@enemy_id].read_note('等级')
  79.     if $z == nil
  80.       return enemy.atk
  81.     else
  82.       return $data_enemies[@enemy_id].read_note('等级') * $atkl
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 获取基本防御力
  87.   #--------------------------------------------------------------------------
  88.   def base_def
  89.     $z = $data_enemies[@enemy_id].read_note('等级')
  90.     if $z == nil
  91.       return enemy.def
  92.     else
  93.       return $data_enemies[@enemy_id].read_note('等级') * $defl
  94.     end
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 获取基本精神力
  98.   #--------------------------------------------------------------------------
  99.   def base_spi
  100.     $z = $data_enemies[@enemy_id].read_note('等级')
  101.     if $z == nil
  102.       return enemy.spi
  103.     else
  104.       return $data_enemies[@enemy_id].read_note('等级') * $spil
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 获取基本敏捷
  109.   #--------------------------------------------------------------------------
  110.   def base_agi
  111.     $z = $data_enemies[@enemy_id].read_note('等级')
  112.     if $z == nil
  113.       return enemy.agi
  114.     else
  115.       return $data_enemies[@enemy_id].read_note('等级') * $agil
  116.     end
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 获取经验值
  120.   #--------------------------------------------------------------------------
  121.   def exp
  122.     $z = $data_enemies[@enemy_id].read_note('等级')
  123.     if $z == nil
  124.       return enemy.exp
  125.     elsif $game_party.members.size == 1
  126.       return $data_enemies[@enemy_id].read_note('等级') * $expl
  127.     elsif $game_party.members.size == 2
  128.       return Integer($data_enemies[@enemy_id].read_note('等级') * $expl * 1.2)
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 获取金钱
  133.   #--------------------------------------------------------------------------
  134.   def gold
  135.     $z = $data_enemies[@enemy_id].read_note('等级')
  136.     if $z == nil
  137.       return enemy.gold
  138.     else
  139.       return $data_enemies[@enemy_id].read_note('等级') * $goldl
  140.     end
  141.   end
  142. end
  143. #----------------------------------------------------------------------------
  144. # 以下大神部分By.沉影不器
  145. #----------------------------------------------------------------------------
  146. module RPG
  147.   module ReadNote
  148.     def self.read(str, section, mismatch = nil)
  149.       str.each_line do |line|
  150.         eval("#{line}; return #{section}") if line =~ /^\s*#{section}\s*=/i
  151.       end
  152.       return mismatch
  153.     end
  154.   end
  155.   class BaseItem
  156.     def read_note(section, mismatch = nil)
  157.       ReadNote.read(self.note, section, mismatch)
  158.     end
  159.   end
  160.   class Enemy
  161.     def read_note(section, mismatch = nil)
  162.       ReadNote.read(self.note, section, mismatch)
  163.     end
  164.   end
  165.   class State
  166.     def read_note(section, mismatch = nil)
  167.       ReadNote.read(self.note, section, mismatch)
  168.     end
  169.   end
  170. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-28 15:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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