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

Project1

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

[已经过期] 关于【大菠萝3】随机装备系统的几个问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
12 小时
注册时间
2008-5-12
帖子
6
跳转到指定楼层
1
发表于 2013-3-21 11:07:50 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
话说,昨天下载了【大菠萝3】随机装备系统之后,迅速投入使用,感觉效果很不错,但很快就发现了两个比较头疼的问题。
一个是,装备的随机属性太高了,即使是按照作者大大的说明,将单项最大值(<EXTRA=单个属性最大值>)改成了3,居然还是会出现这种等级的东西——

对于平衡影响太大了,所以想问问,如何在脚本里修改增加随机属性的幅度或种类

第二个问题,使用了改脚本之后,测试时,使用“最强装备”按钮有时候会出现这种情况

但Game_Actor脚本从头至尾都没有修改过,所以想问问怎么办(话说原作者的范例中也有时会出现这个问题)

以下是脚本全文
RUBY 代码复制
  1. #------------------------------------------------------------------------------
  2. # 无责任随机装备系统 v0.5
  3. #                       by pigsss
  4. #
  5. # 使用方法:装备备注<EXTRA=单个属性最大值>
  6. # eg. <EXTRA=100> 那么每项最多赋予+100基础属性,特性计算有所不同
  7. # <SNAME> 表示该物品不需要名字前缀
  8. # 最近玩大菠萝3有感的产物,后续会不会更新看心情(大雾)
  9. #------------------------------------------------------------------------------
  10. module Setup
  11.   #----品质与几率
  12.   LEVELS = {0 => 0.7,  # 白色
  13.             1 => 0.2,  # 蓝色
  14.             2 => 0.05, # 黄色
  15.             3 => 0.025,# 橙色
  16.             4 => 0.015,# 紫色
  17.             5 => 0.01} # 红色
  18.  
  19.   #----基础属性(描述用)
  20.   PARAM = {0 => "生命",
  21.            1 => "魔法",
  22.            2 => "攻击力",
  23.            3 => "防御力",
  24.            4 => "魔法攻击力",
  25.            5 => "魔法防御力",
  26.            6 => "敏捷",
  27.            7 => "幸运"}
  28.  
  29.   BASICWORDS = {0 => "野熊之",
  30.                 1 => "夜枭之",
  31.                 2 => "锋利的",
  32.                 3 => "坚强的",
  33.                 4 => "强能之",
  34.                 5 => "明镜之",
  35.                 6 => "猫鼬之",
  36.                 7 => "兔脚之"}
  37.  
  38.   #----特性(描述用)
  39.   FEA = {11 => "属性抗性",
  40.          13 => "状态抗性",
  41.          14 => "状态免疫",
  42.          22 => ["命中率","回避率","必杀率","必杀回避率","魔法回避率","魔法反射率","反击率","生命回复率","魔法回复率","特技值回复率"],
  43.          23 => ["嘲讽","防御加成","回复加成","药效加成","耗魔","特技值回复","物理伤害","魔法伤害","地形伤害","经验获取"],
  44.          31 => "攻击属性",
  45.          32 => "击中附加",
  46.          33 => "攻击速度",
  47.          34 => "攻击次数",
  48.          # 可以被赋予的技能id列表
  49.          43 => ["技能赋予",[26,61,117]],
  50.          64 => ["遇敌几率减半","随机遇敌无效","偷袭无效","先制几率提高","双倍金钱","双倍掉率",]
  51.          }
  52.  
  53.   FEAWORDS = {11 => "抗",
  54.               13 => "抗",
  55.               14 => "免",
  56.               22 => ["青铜之","闪避之","杀戮之","轻巧之","五彩之","镜面之","尖刺之","重生之","精神之","暴戾之",],
  57.               23 => ["孙子之","坚硬之","生命之","药师之","节能之","冲动之","暴力之","聪慧之","洞察之","经验之",],
  58.               31 => "之",
  59.               32 => "之",
  60.               33 => "迅速的",
  61.               34 => "连击之",
  62.               64 => ["隐遁之","策略之","光明之","暗影之","财富之","机遇之",]
  63.               }
  64.  
  65. end
  66.  
  67. class Array  
  68.   def random(weights)  
  69.     weights ||= [1.0] * length  
  70.     total = weights.inject(0.0) {|sum, w| sum + w}  
  71.     point = rand * total  
  72.  
  73.     zip(weights).sort{|a, b| a[1] <=> b[1]}.each do |element, weight|  
  74.       return element if weight >= point  
  75.       point -= weight  
  76.     end  
  77.   end  
  78. end
  79.  
  80. class RPG::EquipItem < RPG::BaseItem
  81.   @@plus_id = 0
  82. end
  83.  
  84. class RPG::Weapon
  85.   attr_accessor :features
  86.   attr_accessor :level
  87.   EX = /<EXTRA=(\d+)\s*>/i
  88.   SNAME = /<SNAME>/
  89.   def initialize
  90.     super
  91.     @wtype_id = 0
  92.     @animation_id = 0
  93.     @features.push(RPG::BaseItem::Feature.new(31, 1, 0))
  94.     @features.push(RPG::BaseItem::Feature.new(22, 0, 0))
  95.     @level = 0
  96.   end
  97.  
  98.   def extra
  99.     @note =~ EX ? $1.to_i.abs : 0
  100.   end
  101.  
  102.   def sname?
  103.     @note =~ SNAME ? true : false
  104.   end
  105.  
  106.   def plus_id
  107.     @@plus_id
  108.   end
  109.  
  110.   def plus_id=(id)
  111.     @@plus_id = id
  112.   end
  113. end
  114.  
  115. class RPG::Armor
  116.   attr_accessor :features
  117.   attr_accessor :level
  118.   EX = /<EXTRA=(\d+)\s*>/i
  119.   SNAME = /<SNAME>/
  120.   def initialize
  121.     super
  122.     @atype_id = 0
  123.     @etype_id = 1
  124.     @features.push(RPG::BaseItem::Feature.new(22, 1, 0))
  125.     @level = 0
  126.   end
  127.  
  128.   def extra
  129.     @note =~ EX ? $1.to_i.abs : 0
  130.   end
  131.  
  132.   def sname?
  133.     @note =~ SNAME ? true : false
  134.   end
  135.  
  136.   def plus_id
  137.     @@plus_id
  138.   end
  139.  
  140.   def plus_id=(id)
  141.     @@plus_id = id
  142.   end
  143. end
  144.  
  145. class RPG::UsableItem < RPG::BaseItem
  146.   attr_accessor :level
  147.   alias :o_initialize :initialize
  148.   def initialize
  149.     o_initialize
  150.     @level = 0
  151.   end
  152. end
  153.  
  154. class Game_Enemy < Game_Battler
  155.   #--------------------------------------------------------------------------
  156.   # ● 获取物品实例
  157.   #--------------------------------------------------------------------------
  158.   def item_object(kind, data_id)
  159.     return $data_items  [data_id] if kind == 1
  160.     r = RandomEquip.new
  161.     l = Setup::LEVELS.keys.random(Setup::LEVELS.values)
  162.     return r.make_new_weapon(data_id, l) if kind == 2
  163.     return r.make_new_armor(data_id, l) if kind == 3
  164.     return nil
  165.   end  
  166. end
  167.  
  168. class Game_Interpreter
  169.   #--------------------------------------------------------------------------
  170.   # ● 增减武器
  171.   #--------------------------------------------------------------------------
  172.   def command_127
  173.     value = operate_value(@params[1], @params[2], @params[3])
  174.     r = RandomEquip.new
  175.     l = Setup::LEVELS.keys.random(Setup::LEVELS.values)
  176.     $game_party.gain_item(r.make_new_weapon(@params[0], l), value, @params[4])
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 增减护甲
  180.   #--------------------------------------------------------------------------
  181.   def command_128
  182.     value = operate_value(@params[1], @params[2], @params[3])
  183.     r = RandomEquip.new
  184.     l = Setup::LEVELS.keys.random(Setup::LEVELS.values)
  185.     $game_party.gain_item(r.make_new_armor(@params[0], l), value, @params[4])
  186.   end
  187. end
  188.  
  189. class RandomEquip
  190.   include Setup
  191.   #--------------------------------------------------------------------------
  192.   # ● 初始化对象
  193.   #--------------------------------------------------------------------------
  194.   def initialize
  195.     @new_weapon = nil
  196.     @new_armor = nil
  197.     @point = 0
  198.   end
  199.  
  200.   def make_new_weapon(id, level)
  201.     @new_weapon = $data_weapons[id].clone
  202.     @new_weapon.plus_id += 1
  203.     @new_weapon.id = @new_weapon.id + @new_weapon.id * 1000 + @new_weapon.plus_id
  204.     @new_weapon.params = @new_weapon.params.clone
  205.     @new_weapon.features = @new_weapon.features.clone
  206.     @point = @new_weapon.extra
  207.  
  208.     ss = rand(level + 1)
  209.     fs = level - ss
  210.     puts ss,fs
  211.     params = PARAM.keys
  212.  
  213.     ss.times {
  214.     break if params.empty?
  215.     i = params.random([1 / params.size.to_f] * params.size)
  216.     params.delete(i)
  217.     value = randst
  218.     value = [value, level * 5].max
  219.     @new_weapon.params[i] += value
  220.     @new_weapon.name = BASICWORDS[i] + @new_weapon.name unless @new_weapon.sname?
  221.     #@new_weapon.description = @new_weapon.description + " " + (randst > 0 ? PARAM[i] + "+" + value.to_s + " " : "")
  222.     }
  223.  
  224.     features = FEA.keys
  225.     fs.times {
  226.     break if features.empty?
  227.       i = features.random([1 / features.size.to_f] * features.size)
  228.       features.delete(i)
  229.       add_features(@new_weapon, i, level)
  230.     }
  231.     @new_weapon.level = level
  232.     $data_weapons[id + id * 1000 + @new_weapon.plus_id] = @new_weapon
  233.     save_data($data_weapons, "Data/Weapons.rvdata2")
  234.     @new_weapon
  235.   end
  236.  
  237.   def make_new_armor(id, level)
  238.     @new_armor = $data_armors[id].clone
  239.     @new_armor.plus_id += 1
  240.     @new_armor.id = @new_armor.id + @new_armor.id * 1000 + @new_armor.plus_id
  241.     @new_armor.params = @new_armor.params.clone
  242.     @new_armor.features = @new_armor.features.clone
  243.     @point = @new_armor.extra
  244.     ss = rand(level + 1)
  245.     fs = level - ss
  246.     params = PARAM.keys
  247.     ss.times {
  248.     break if params.empty?
  249.     i = params.random([1 / params.size.to_f] * params.size)
  250.     params.delete(i)
  251.     value = randst
  252.     value = [value, level * 5].max
  253.     @new_armor.params[i] += value
  254.     @new_armor.name = BASICWORDS[i] + @new_armor.name unless @new_armor.sname?
  255.     #@new_armor.description = @new_armor.description + " " + (randst > 0 ? PARAM[i] + "+" + value.to_s + " " : "")
  256.     }
  257.  
  258.     features = FEA.keys
  259.     fs.times {
  260.     break if features.empty?
  261.     i = features.random([1 / features.size.to_f] * features.size)
  262.     features.delete(i)
  263.     add_features(@new_armor, i, level)
  264.     }
  265.  
  266.     @new_armor.level = level
  267.     $data_armors[id + id * 1000 + @new_armor.plus_id] = @new_armor
  268.     save_data($data_armors, "Data/Armors.rvdata2")
  269.     @new_armor
  270.   end
  271.  
  272.  
  273.   def add_features(equip, i, level)
  274.     value = randst
  275.     case i
  276.     when 33,34 # 次数&攻击速度
  277.       value /= 10 if i == 34
  278.       value = [[value, 1].max, level].min if i == 34
  279.       equip.features << RPG::BaseItem::Feature.new(i, 0, value)
  280.       equip.name = FEAWORDS[i] + equip.name unless equip.sname?
  281.       #equip.description = equip.description + " " + (value > 0 ? FEA[i] + "+" + value.to_s + " " : "")
  282.     when 11,31 # 属性相关
  283.       j = rand($data_system.elements.size)
  284.       j = [[j,1].max, $data_system.elements.size - 1].min
  285.       value = [[100 - value, 5].max, 99].min if i == 11
  286.       equip.features << RPG::BaseItem::Feature.new(i, j, value)
  287.       equip.name = $data_system.elements[j] + FEAWORDS[i] + equip.name if i == 31 unless equip.sname?
  288.       equip.name = FEAWORDS[i] + $data_system.elements[j] + equip.name if i == 11 unless equip.sname?
  289.       #equip.description = equip.description + " " + FEA[i] + ":" + $data_system.elements[j] + " " if i == 31
  290.       #equip.description = equip.description + " " + $data_system.elements[j] + FEA[i]  + "+" + value.to_s + "% " if i == 11
  291.     when 13,14,32 # 状态相关
  292.       value = [[value, level * 5].max, 99].min
  293.       j = rand(9)
  294.       j = [[j,2].max,8].min
  295.       equip.features << RPG::BaseItem::Feature.new(i, j, value)
  296.       equip.name = FEAWORDS[i] + $data_states[j].name + equip.name if i != 32 unless equip.sname?
  297.       equip.name = $data_states[j].name + FEAWORDS[i] + equip.name if i == 32 unless equip.sname?
  298.       #equip.description = equip.description + " " + FEA[i] + value.to_s + "%" + "附加" + $data_states[j].name + " "if i == 32
  299.       value = 100 - value
  300.       #equip.description = equip.description + " " + $data_states[j].name + FEA[i]  + "+" + value.to_s + "% " if i == 13
  301.       #equip.description = equip.description + " " + FEA[i] + $data_states[j].name + " " if i == 14
  302.     when 22 # 强化能力
  303.       j = rand(10)
  304.       value = [[value, level * 5].max, level * 10].min
  305.       equip.features << RPG::BaseItem::Feature.new(i, j, value)
  306.       equip.name = FEAWORDS[i][j] + equip.name unless equip.sname?
  307.       #equip.description = equip.description + " " + FEA[i][j]  + "+" + value.to_s + "% "
  308.     when 23 # 特殊能力
  309.       j = rand(10)
  310.       value = value + 100
  311.       value = rand(100) if j == 4
  312.       value = [[value, level * 5].max, level * 100].min
  313.       equip.features << RPG::BaseItem::Feature.new(i, j, value)
  314.       equip.name = FEAWORDS[i][j] + equip.name unless equip.sname?
  315.       #equip.description = equip.description + " " + FEA[i][j]  + "*" + value.to_s + "% "
  316.     when 43 # 技能赋予
  317.       j = FEA[i][1].random([1 / FEA[i][1].size.to_f] * FEA[i][1].size)
  318.       index = FEA[i][1].index(j)
  319.       equip.features << RPG::BaseItem::Feature.new(i, j, 0)
  320.       equip.name = $data_skills[FEA[i][1][index]].name + equip.name unless equip.sname?
  321.       #equip.description = equip.description + " " + FEA[i][0] + ":" + $data_skills[FEA[i][1][index]].name + " "
  322.     when 64 # 队伍能力
  323.       j = rand(6)
  324.       equip.features << RPG::BaseItem::Feature.new(i, j, 0)
  325.       equip.name = FEAWORDS[i][j] + equip.name unless equip.sname?
  326.       #equip.description = equip.description + " " + FEA[i][j] + " "
  327.     end
  328.  
  329.     if @new_weapon
  330.       @new_weapon = equip
  331.       @new_weapon.features = equip.features
  332.     elsif @new_armor
  333.       @new_armor = equip
  334.       @new_armor.features = equip.features
  335.     end
  336.   end
  337.  
  338.  
  339.   def randst
  340.     s = rand(@point) + 1
  341.     s
  342.   end
  343. end
  344.  
  345. class Window_Base < Window
  346.   #--------------------------------------------------------------------------
  347.   # ● 绘制物品名称
  348.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  349.   #--------------------------------------------------------------------------
  350.   def draw_item_name(item, x, y, enabled = true, width = 172)
  351.     return unless item
  352.     draw_icon(item.icon_index, x, y, enabled)
  353.     change_color(normal_color, enabled)
  354.     case item.level
  355.     when 1
  356.       change_color(Color.new(100, 100, 255), enabled)
  357.     when 2
  358.       change_color(Color.new(255, 255, 50), enabled)
  359.     when 3
  360.       change_color(Color.new(255, 155, 50), enabled)
  361.     when 4
  362.       change_color(Color.new(250, 0, 250), enabled)
  363.     when 5
  364.       change_color(Color.new(255, 100, 100), enabled)
  365.     end
  366.     draw_text(x + 24, y, width, line_height, item.name)
  367.     change_color(normal_color, enabled)
  368.   end
  369. end

Lv1.梦旅人

梦石
0
星屑
60
在线时间
12 小时
注册时间
2008-5-12
帖子
6
3
 楼主| 发表于 2013-3-22 11:08:42 | 只看该作者
zhang58604616 发表于 2013-3-22 01:09
品质高的装备掉率依次降低就是了

呃,可是即使是最低品质的装备也比较损害平衡啊,有没有办法调整一下每种前缀增加的量呢?话说如果最低级装备是HP上限增加20点那还没什么,但如果物理攻击或敏捷也增加20点(顺便还用了CP战斗模式),那就太不平衡了。
此外,第二个问题找到症结所在了,只要新增加装备或物品或敌人,再读取旧档就会出现该问题,不知道是不是一个BUG

还是感谢zhang58604616朋友的帮助的,恩
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
42 小时
注册时间
2013-2-3
帖子
22
2
发表于 2013-3-22 01:09:50 | 只看该作者
品质高的装备掉率依次降低就是了

评分

参与人数 1星屑 +100 收起 理由
Mic_洛洛 + 100 回复奖励……

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 09:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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