幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2227|回复: 3

[RMXP] 请问怎样让怪物有不同的掉落?

[复制链接]

5

主题

15

帖子

130

积分

③业余

积分
130
发表于 2011-7-22 21:06:53 | 显示全部楼层 |阅读模式
比如一个怪,杀死后有50%几率掉落装备A,另外50%掉落装备B?
菜单里只能设置1个装备,是不是可以通过脚本实现?比如随机生成个数字
如果等于1那么掉落A,等于2掉落B这样
怎样通过脚本获得指定装备
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2011-7-22 21:51:18 | 显示全部楼层
  1.         if enemy.name.include?("@")
  2.           arr = enemy.name.split([email=]'@'[/email])
  3.           size = (arr.size - 2) / 3
  4.           size_item = arr[1]
  5.           size_tmp = 0
  6.           for ii in 0...size
  7.             break if size_tmp == size_item
  8.             if rand(100) < arr[4 + ii * 3]
  9.               size_tmp += 1
  10.               if arr[2 + ii * 3] == 'i'
  11.                 treasures.push($data_items[(arr[3 + ii * 3]).to_i])
  12.               end
  13.               if arr[2 + ii * 3] == 'w'
  14.                 treasures.push($data_weapons[(arr[3 + ii * 3]).to_i])
  15.               end
  16.               if arr[2 + ii * 3] == 'a'
  17.                 treasures.push($data_armors[(arr[3 + ii * 3]).to_i])
  18.               end
  19.             end
  20.           end
  21.         end
复制代码


在scene_battle2

    # 限制宝物数为 6 个
    #treasures = treasures[0..5]
之上的两个end前面插入

这个并不完善,没有修正名字

用法。。。

怪物的名字做改动。。。比如“幽灵”

改成 “幽灵@1@i@2@50@w@1@75@a@11@60”
第一个@1表示该怪物只能爆出一个物品
@i@2@50表示 i 为物品 2是 2号物品  50表示概率
@w@1@75 表示 w为武器 1是1号武器 75表示概率
@a@11@60表示 a为防具 11是11号防具 60为概率

那么回过头来说第一个@1的问题。。。这里面设计了三个物品。。。第一个@1表示3个中只能爆出一个。。想3个都可以爆出来,改成@3就可以。。。

关于概率的计算。。。这个比较麻烦。。。自己看代码吧。。。我说一下 三个物品。。。如果 第一个是@1的话,只爆一个,那么永远是第一个物品的几率最大。。。(概率>50的情况)。。以上。。。这是个演示代码,没测试。。。没校正怪物名字
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

5

主题

15

帖子

130

积分

③业余

积分
130
 楼主| 发表于 2011-7-22 22:19:22 | 显示全部楼层
很感谢你的帮助,不过是不是出现什么问题?我试不出来!我是在你说的位置整段插入进去的
结果出现  脚本"scene_battle2"的164行发生SYNTAXERROR的字样,是不是我弄错什么了?
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2011-7-25 10:32:45 | 显示全部楼层
脚本有个地方出错了。。。因为变量的类型没有转换。。。

替换 def start_phase5
点击下边的复制代码即可
  1.   #--------------------------------------------------------------------------
  2.   # ● 开始结束战斗回合
  3.   #--------------------------------------------------------------------------
  4.   def start_phase5
  5.     # 转移到回合 5
  6.     @phase = 5
  7.     # 演奏战斗结束 ME
  8.     $game_system.me_play($game_system.battle_end_me)
  9.     # 还原为战斗开始前的 BGM
  10.     $game_system.bgm_play($game_temp.map_bgm)
  11.     # 初始化 EXP、金钱、宝物
  12.     exp = 0
  13.     gold = 0
  14.     treasures = []
  15.     # 循环
  16.     for enemy in $game_troop.enemies
  17.       # 敌人不是隐藏状态的情况下
  18.       unless enemy.hidden
  19.         # 获得 EXP、增加金钱
  20.         exp += enemy.exp
  21.         gold += enemy.gold
  22.         # 出现宝物判定
  23.         if rand(100) < enemy.treasure_prob
  24.           if enemy.item_id > 0
  25.             treasures.push($data_items[enemy.item_id])
  26.           end
  27.           if enemy.weapon_id > 0
  28.             treasures.push($data_weapons[enemy.weapon_id])
  29.           end
  30.           if enemy.armor_id > 0
  31.             treasures.push($data_armors[enemy.armor_id])
  32.           end
  33.         end
  34.         
  35.         if enemy.name.include?("@")
  36.           arr = enemy.name.split('@')
  37.           size = (arr.size - 2) / 3
  38.           size_item = (arr[1]).to_i
  39.           size_tmp = 0
  40.           for ii in 0...size
  41.             break if size_tmp == size_item
  42.             if rand(100) < (arr[4 + ii * 3]).to_i
  43.               size_tmp += 1
  44.               if arr[2 + ii * 3] == 'i'
  45.                 treasures.push($data_items[(arr[3 + ii * 3]).to_i])
  46.               end
  47.               if arr[2 + ii * 3] == 'w'
  48.                 treasures.push($data_weapons[(arr[3 + ii * 3]).to_i])
  49.               end
  50.               if arr[2 + ii * 3] == 'a'
  51.                 treasures.push($data_armors[(arr[3 + ii * 3]).to_i])
  52.               end
  53.             end
  54.           end
  55.         end
  56.         
  57.       end
  58.     end
  59.     # 限制宝物数为 6 个
  60.     #treasures = treasures[0..5]
  61.     # 获得 EXP
  62.     for i in 0...$game_party.actors.size
  63.       actor = $game_party.actors
  64.       if actor.cant_get_exp? == false
  65.         last_level = actor.level
  66.         actor.exp += exp
  67.         if actor.level > last_level
  68.           @status_window.level_up(i)
  69.         end
  70.       end
  71.     end
  72.     # 获得金钱
  73.     $game_party.gain_gold(gold)
  74.     # 获得宝物
  75.     for item in treasures
  76.       case item
  77.       when RPG::Item
  78.         $game_party.gain_item(item.id, 1)
  79.       when RPG::Weapon
  80.         $game_party.gain_weapon(item.id, 1)
  81.       when RPG::Armor
  82.         $game_party.gain_armor(item.id, 1)
  83.       end
  84.     end
  85.     # 生成战斗结果窗口
  86.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  87.     # 设置等待计数
  88.     @phase5_wait_count = 100
  89.   end
复制代码


注意:限制宝物为6个的那条语句,我给变成注释了,也就是不起作用了。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-17 03:11 , Processed in 0.020074 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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