幻想森林

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

类似于暗黑的武器库生成系统

[复制链接]

7

主题

31

帖子

378

积分

④见习

积分
378
发表于 2005-7-21 12:06:08 | 显示全部楼层 |阅读模式
类似于暗黑的武器库生成系统

玩过暗黑的知道,它的武器系统非常庞大,
而且是随机生成的

我做了一个类似的生成系统

1 首先建立基础库,
  把武器ID号为100以下的数据健全,
  注意:10,20..90,100;不要定义
  只定义名称和攻击力就行
2 在Mian之前插入以下的原码
3 在新游戏的位置调用 SetWeapon 函数
4 注意在新游戏开始时,有可能进入失败,
  日文提示,我看不懂,
  多进几次就没问题了
  以后load进度就行
5 它可以自动生成101 ~ 999的全部武器
  100以下的你要自己定义
6 对职业使用的武器列表,没有填加,
  有时间再编制,
  目前它是100个武器一循环
  你需要对应前一百个武器,逐一点选。

  如果你在商店里加入这些编号,就可以看到这些武器随机生成的名字

说明,单价等等

#------------------------------
#计算随机数
def Setrand1(lv = 10)
  #变化的攻击力=武器级别 * 10 的随机数 +-各半
  ivalue = (lv / 10).to_i

  #lv = lv - (lv / 100).to_i * 100
  maxvalue = lv - ivalue * 10 #武器变化的最大值 10
  
  maxvalue1 = 0
  for t in 1..maxvalue * 10
    maxvalue1 = maxvalue1 + t
  end
  
  iret = rand(maxvalue1) + 1

  itemp = 0
  #数值越大,出现几率越小
  maxvalue1 = 0
  for t in 1..maxvalue * 10
    maxvalue1 = maxvalue1 + t
    if iret >= (maxvalue1 - t) and iret < maxvalue1 then
      break
    end
   
  end
  

  iret = (maxvalue * 10 - t).abs
  if iret == 0
    iret = 1
  end
  
  
  return iret.to_i
end#------------------------------
   

#------------------------------
#请输入注释
def SetWeapon
  
  
  for gg in 1..9
    for tt in 1..99
      if (tt / 10).to_i * 10 == tt then
        next
      end
      
      name = $data_weapons[tt].name
      icon_name = $data_weapons[tt].icon_name
      description = $data_weapons[tt].description  
      animation1_id = $data_weapons[tt].animation1_id
      animation2_id  = $data_weapons[tt].animation2_id
      atk = $data_weapons[tt].atk
      pdef = $data_weapons[tt].pdef
      mdef = $data_weapons[tt].mdef
      str_plus = $data_weapons[tt].str_plus
      dex_plus  = $data_weapons[tt].dex_plus
      agi_plus = $data_weapons[tt].agi_plus
      int_plus  = $data_weapons[tt].int_plus
   
      add = 100
      sdce = ''
      iprice = 0
      sname = ""
      while add >= 90
        #是否继续增加属性
        add = rand(100)  
        #print(add)
        t = gg * 100 + tt
      
        #随机按比例增加属性
        r = rand(100)
        
        # 按攻击力计算价格
        
        iprice = iprice + ((atk / 10).to_i) * ((atk / 10).to_i) * ((atk / 10).to_i)
        
        #40%出现增减攻击力
        if r <= 40 then
          itemp = Setrand(tt)
         
          iprice = iprice + itemp * 200
          atk = atk + itemp
          sdce = sdce + "攻击+" + itemp.to_s + ";"
          $data_weapons[t].atk = atk
          sname = '攻击之'
        end
      
        #10%出现增减物防
        if r > 40 and r <= 50 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 300
          pdef = pdef + itemp
          sdce = sdce + "物防+" + itemp.to_s + ";"
          $data_weapons[t].pdef = pdef
          $data_weapons[t].atk = atk
          sname = '物防之'
        end

        #10%出现增减魔防
        if r > 50 and r <= 60 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 400
          mdef = mdef + itemp
          sdce = sdce + "魔防+" + itemp.to_s + ";"
          $data_weapons[t].mdef  = mdef
          $data_weapons[t].atk = atk
          sname = '魔防之'
        end
      
        #5%出现增减力量
        if r > 60 and r <= 65 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 500
          str_plus = str_plus + itemp  
          sdce = sdce + '力量+' + itemp.to_s + ';'
          $data_weapons[t].str_plus = str_plus
          $data_weapons[t].atk = atk
          sname = '力量之'
        end
      
        #5%出现增减力量
        if r > 65 and r <= 70 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 500
          dex_plus = dex_plus + itemp  
          sdce = sdce + '灵巧+' + itemp.to_s + ';'
          $data_weapons[t].dex_plus = dex_plus
          $data_weapons[t].atk = atk
          sname = '灵巧之'
        end
      
        #5%出现增减力量
        if r > 70 and r <= 75 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 500
          agi_plus = agi_plus + itemp
          $data_weapons[t].agi_plus = agi_plus
          sdce = sdce + '速度+' + itemp.to_s + ';'
          $data_weapons[t].atk = atk
          sname = '速度之'
        end
      
        #5%出现增减力量
        if r > 75 and r <= 80 then
          #变化的攻击力=武器级别 * 10 的随机数 +-各半
          itemp = Setrand(tt)
          iprice = iprice + itemp * 500
          int_plus = int_plus + itemp
          sdce = sdce + '魔力+' + itemp.to_s + ';'
          $data_weapons[t].int_plus = int_plus
          $data_weapons[t].atk = atk
          sname = '魔力之'
        end
      
        #5%出现增减属性
        if r > 80 and r <= 90 and $data_weapons[t].element_set.size < 9 then
          r1 = rand(9) + 1
          isize = $data_weapons[t].element_set.size
          loop do
            if isize > 0 then
              for ttt in 1..isize
                if $data_weapons[t].element_set[ttt] == r1 then
                  break
                end
            
              end
              if ttt > isize then
                break
              end
            else
              break
            end
            r1 = rand(9) + 1
          end         
          iprice = iprice + 10000
          $data_weapons[t].element_set[isize + 1] = r1
          $data_weapons[t].atk = atk
          case r1
            when 1
              sname = '物理之'
              sdce = sdce + '+物理属性;'
            when 2
              sname = '光之'
              sdce = sdce + '+光属性;'
            when 3
              sname = '冰之'
              sdce = sdce + '+冰属性;'
            when 4
              sname = '毒之'
              sdce = sdce + '+毒属性;'
            when 5
              sname = '炎之'
              sdce = sdce + '+炎属性;'
            when 6
              sname = '雷之'
              sdce = sdce + '+雷属性;'
            when 7
              sname = '圣之'
              sdce = sdce + '+圣属性;'
            when 8
              sname = '暗之'
              sdce = sdce + '+暗属性;'
            when 9
              sname = '无之'
              sdce = sdce + '+无属性;'
          end
            
        end
      
        
        if (r > 90) then
          sname = ''
        end
        #随即计算名称
        $data_weapons[t].name = sname + name   
        $data_weapons[t].description = sdce
        iprice = (iprice/100 + 0.6).to_i * 100
        $data_weapons[t].price = iprice
      
      
      end
    end
  end


end

[em06][em01]

本帖子中包含更多资源

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

x
回复

使用道具 举报

7

主题

31

帖子

378

积分

④见习

积分
378
 楼主| 发表于 2005-7-21 13:15:03 | 显示全部楼层
发现了个小bug
把这句
if (r > 90) then
          sname = \'\'
end
写改成
if (r > 90) then
          $data_weapons[t].atk = atk
          sname = \'\'
end
回复 支持 反对

使用道具 举报

24

主题

96

帖子

1291

积分

⑥精研

死了就只有一只了

积分
1291
发表于 2005-7-21 13:37:11 | 显示全部楼层
使用方法能不能说详细一点...
回复 支持 反对

使用道具 举报

7

主题

31

帖子

378

积分

④见习

积分
378
 楼主| 发表于 2005-7-21 13:40:42 | 显示全部楼层
发个例子
gao0022@126.com
password = qwer1234
一共14个包,大了点
有片头制作的例子,如果没有存档,可以看到片头,所以建议你删掉存档文件是一下
有ACT战斗的例子,(其实很傻,尽做参考)
有武器库生成系统
回复 支持 反对

使用道具 举报

carol3 该用户已被删除
发表于 2005-7-22 02:12:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 12:45 , Processed in 0.015471 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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