Project1

标题: 随机数随出一次就不会再变了,怎么办 [打印本页]

作者: cmfwmj    时间: 2012-2-20 13:32
标题: 随机数随出一次就不会再变了,怎么办
装备随机属性,放入rand(100),可是启动游戏后,掉了个装备随机了一次后,再掉的装备就一直保持第一次的随机数不会变化了,请问这是什么问题
作者: 亿万星辰    时间: 2012-2-20 14:33
这不可能,每次rand(100)都是随机得到一个0~99之间的数字,当然不排除有极小概率使两次的结果一样,但是如果次次都一样,那么看算法和用法吧。
作者: alann    时间: 2012-2-20 14:42
随机之后有重置命令吗?
例如A随机1~99,变成88,那么随机一次之后A永远就是88了,
你要后面再加上把A的数值重置吧
作者: cmfwmj    时间: 2012-2-20 14:52
本帖最后由 cmfwmj 于 2012-2-20 14:53 编辑

下面这个脚本的第17行,[10,"力量,凶残",[[2,10]]]  ,我改成这样[10,"力量,凶残",[[2,rand(100)]]]所以就一直是第一次随机的数值不会变了,但是具体要在整个代码的什么地方重置随机数呢?不太懂脚本啊,可以帮我看下怎么改吗
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ 随机属性装备 By wyongcan
  4. #==============================================================================
  5. module Equipplus
  6. #得到随机属性装备方法:gainequip(装备ID,属性数)
  7. #~ 前缀结构:
  8. #~ ①权重(1-100) 越大越重要
  9. #~ ②名称(多个名称用","分开,会随机取其中一个添加到武器名前)
  10. #~ ③属性数组  提供两种方式:
  11. #~ 1.[属性ID,增加值]    属性ID参考说明增强脚本 增加了9号属性“极品出现率” ID为8,影响前缀的好坏 1 - 100
  12. #~ 2.与装备特性相同[code,data_id,value]  code,data_id参考说明增强脚本
  13.   @maxparamplus = 3 #最大前缀数
  14.   @moneyrate = 10 #物品价格计算公式为:原价格 + 前缀权重 * @moneyrate
  15.   @transpose = [*1..100].reverse #用于把1变成100,100变成1
  16.   @paramsplus = [           #暂时只写了三个前缀,可以自己添加,参照前缀结构
  17.   [10,"力量,凶残",[[2,10]]], #物理攻击加10
  18.   [20,"灵气",[[0,200 ],[1,200]]], # HP和MP各加200
  19.   [60,"战神",[[21,2,1.114]]] #物理攻击双倍
  20.   ]
  21.   $商店随机 = false #商店买装备时出随机属性
  22.   $战斗随机 = true #战斗后获得随机属性装备
  23.   def self.getname(paramsplus)
  24.     name = ""
  25.     paramsplus.is_a?(Array) ? paramsplus.each{|a| @temp = []; a[1].scan(/^[\u4e00-\u9fa5|\w]*|,[\u4e00-\u9fa5|\w]*/){|b| @temp.push b.gsub(","){}}; name += @temp[rand(@temp.size)]} : paramsplus[1].scan(/^[\u4e00-\u9fa5|\w]*|,[\u4e00-\u9fa5|\w]*/){|b| @temp = [] if @temp == nil ;@temp.push b.gsub(","){}}
  26.     name += @temp[rand(@temp.size)] if paramsplus.is_a?(Array) != true
  27.     name += "的"
  28.   end
  29.   def self.getluck #获得极品出现率
  30.     luck = 0
  31.     $game_party.all_members.each{|a| a.weapons.each{|a| luck += a.params[8] if a.params.size == 9};a.armors.each{|a| luck += a.params[8] if a.params.size == 9}}
  32.     luck
  33.   end
  34.   def self.getnewequip(xequip,params = nil) #提供两个参数  装备(RPG::Equip类下的)和附加前缀数,不填则为随机
  35.     return unless xequip.is_a?(RPG::EquipItem)
  36.     #xparamplus为前缀数
  37.     xequip.paramsplus = [] if xequip.paramsplus == nil
  38.     return if xequip.paramsplus.size >= @maxparamplus
  39.     params != nil ? xparamplus = params :  xparamplus = rand(@maxparamplus * 110) / 100
  40.     xparamplus = xparamplus.to_int
  41.     return xequip if xparamplus == 0
  42.     equip = xequip.dup
  43.     paramsplus = equip.paramsplus.dup  #无奈的方法,不这样改一个装备所有同父装备的装备都会变
  44.     newparams = equip.params.dup
  45.     newfeatures = equip.features.dup
  46.     aparamsplus = @paramsplus.collect{|a| [a[0] = @transpose[a[0]-1],a[1],a[2]]}.sort_by{|a| a[0]}
  47.     while paramsplus.size < xparamplus
  48.       temp = rand(aparamsplus[-1][0])
  49.       temp = [temp - getluck,0].max
  50.       x = []
  51.       for i in aparamsplus
  52.         x.push i if i[0] >= temp && paramsplus.include?(i) != true
  53.       end
  54.       if x != []
  55.         a = [(x.size-1)*100 - getluck,0].max
  56.         a = (rand(a)/100).to_int
  57.         paramsplus.push x[a]
  58.       end
  59.     end
  60.     equip.name = getname(paramsplus) + equip.name #更新名称
  61.     paramsplus.each{|a| equip.price += @transpose[a[0] - 1] * @moneyrate} #更新价格
  62.     paramsplus.select{|a| a[2].select{|a| a.size == 2}.each{|a| newparams[a[0]] += a[1]}} #更新属性
  63.     #以下为更新特性
  64.     features = []
  65.     paramsplus.each{|a| a[2].each{|a| features.push a if a.size == 3}}
  66.     while features.size > 0
  67.       i = features.pop
  68.       newfeatures.select{|a| a.code == i[0] && a.data_id == i[1]}.size == 0 ? newfeatures.push(RPG::BaseItem::Feature.new(i[0],i[1],i[2])) : newfeatures.each_with_index{|a,b| newfeatures[b].value += i[2] if a.code == i[0] && a.data_id == i[1]}
  69.     end
  70.     if equip.is_a?(RPG::Weapon)
  71.       rand(-1)
  72.       rand(0)
  73.       equip.id = $data_weapons.size
  74.       $data_weapons.insert $data_weapons.size,equip
  75.       $data_weapons[equip.id].paramsplus = paramsplus
  76.       $data_weapons[equip.id].params = newparams
  77.       $data_weapons[equip.id].features = newfeatures
  78.     else
  79.       equip.id = $data_armors.size
  80.       $data_armors.insert $data_armors.size,equip
  81.       $data_armors[equip.id].paramsplus = paramsplus
  82.       $data_armors[equip.id].params = newparams
  83.       $data_armors[equip.id].features = newfeatures
  84.     end
  85.     equip
  86.   end
  87.   def self.gainequip(id,params = nil)
  88.     $game_party.gain_item(Equipplus.getnewequip($data_weapons[id],params),1,true)
  89.   end
  90. end
  91. if $商店随机 == true
  92.   class Scene_Shop < Scene_MenuBase
  93.     def do_buy(number)
  94.       $game_party.lose_gold(number * buying_price)
  95.       if @item.is_a?(RPG::EquipItem)
  96.         x = number
  97.         loop do
  98.           break if x <= 0
  99.           x -= 1
  100.           $game_party.gain_item(Equipplus.getnewequip(@item), 1)
  101.         end
  102.       else
  103.         $game_party.gain_item(@item, number)
  104.       end
  105.     end
  106.   end
  107. end
  108. if $战斗随机 == true
  109.   module BattleManager
  110.     def self.gain_drop_items
  111.       $game_troop.make_drop_items.each do |item|
  112.         item.is_a?(RPG::EquipItem) ? xitem = Equipplus.getnewequip(item) : xitem = item
  113.         $game_party.gain_item(xitem, 1)
  114.         $game_message.add(sprintf(Vocab::ObtainItem, xitem.name))
  115.       end
  116.       wait_for_message
  117.     end
  118.   end
  119. end
  120. class RPG::EquipItem < RPG::BaseItem
  121.   alias old initialize
  122.   def initialize
  123.     old
  124.     @paramsplus #前缀
  125.   end
  126.   attr_accessor :paramsplus
  127. end
复制代码

作者: 亿万星辰    时间: 2012-2-20 14:56
那当然不会变了……因为只运行一次……
作者: cmfwmj    时间: 2012-2-20 14:59
{:nm_2:}在哪加重置呢- -
作者: 亿万星辰    时间: 2012-2-20 15:06
本帖最后由 亿万星辰 于 2012-2-20 15:10 编辑

我还没研究过这个脚本的这些设置量是做什么用的……
即使属性随机也不是在那个地方加……
因为已经是随机添加属性,那么就请多复制粘贴几个进去,设置不同的增加量好了。
作者: cmfwmj    时间: 2012-2-20 15:12
本帖最后由 cmfwmj 于 2012-2-20 15:48 编辑

恩谢谢啦,完整的脚本范例是这个,想做成随机数值的,但是又看不懂



‘‘──cmfwmj于2012-2-20 15:48补充以下内容

额,这样的话就变成随机属性增加的量是我设置的固定值了,只是我多设置了几个不同的增加量,有点不太智能,就只能随机到这些个数值了,随机最理想的就是能添加属性,然后属性的值也能随机值,这样看起来就比较好了
[@]亿万星辰[/@]
’’

装备系统增强1.0.rar

314.43 KB, 下载次数: 105


作者: 亿万星辰    时间: 2012-2-20 16:49
本帖最后由 亿万星辰 于 2012-2-20 16:50 编辑

多写几个的话不就实现你要的功能了么?
比如
[10,"力量,凶残",[[2,10]]], #物理攻击加10
你是想让这个力量凶残属性是随机增加1~10点物理攻击
那么你就写
[10,"力量,凶残",[[2,1]]], #物理攻击加1
[10,"力量,凶残",[[2,2]]], #物理攻击加2
[10,"力量,凶残",[[2,3]]], #物理攻击加3
[10,"力量,凶残",[[2,4]]], #物理攻击加4
[10,"力量,凶残",[[2,5]]], #物理攻击加5
[10,"力量,凶残",[[2,6]]], #物理攻击加6
[10,"力量,凶残",[[2,7]]], #物理攻击加7
[10,"力量,凶残",[[2,8]]], #物理攻击加8
[10,"力量,凶残",[[2,9]]], #物理攻击加9
[10,"力量,凶残",[[2,10]]], #物理攻击加10
这样不就行了?
思维上要善于转弯……
作者: cmfwmj    时间: 2012-2-20 17:17
恩,这个我有试过,可是同样是物理攻击这样的属性就会随到多次并+起来,能不能在哪加句代码,比如权重值一样的属性的不会重复抽中
[10,"力量,凶残",[[2,1]]], #物理攻击加1
[10,"力量,凶残",[[2,2]]], #物理攻击加2
[11,"狂野,杀戮",[[2,2]]], #魔法攻击加1
像这样不会抽到2个权重值为10的物理攻击的,只会抽到权重值为10和权重值为11的魔法攻击组合
作者: wyongcan2008    时间: 2012-2-24 18:06
有个简单的办法,找到return xequip if xparamplus == 0,在下面添加

  @paramsplus = [           #暂时只写了三个前缀,可以自己添加,参照前缀结构
  [10,"力量,凶残",[[2,10]]], #物理攻击加10
  [20,"灵气",[[0,200 ],[1,200]]], # HP和MP各加200
  [60,"战神",[[21,2,1.114]]] #物理攻击双倍
  ]

也就是复制一遍你的随机属性设置到这里,就能实现每次随机了。




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