查看: 2209|回复: 4

[已经解决] 【结贴】装备属性错乱

[复制链接]
梦石
0
星屑
1461
在线时间
815 小时
注册时间
2013-8-3
回帖
355
发表于 2017-5-24 10:35:07 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 小小西 于 2017-5-27 23:37 编辑

衣服装备初始设置躲避力+1%,由于玩家大量刷随机属性装备,导致初始躲避力属性慢慢增加变成了+35%,连商店卖的数据库装备也变成躲避力+35%,是脚本哪里导致的。
随机属性装备[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# ■ 随机属性装备 By wyongcan
#==============================================================================
#说明性注释
#==============================================================================
#  FEATURE_ELEMENT_RATE  = 11              # 属性抗性
#  FEATURE_DEBUFF_RATE   = 12              # 弱化抗性
#  FEATURE_STATE_RATE    = 13              # 状态抗性
#  FEATURE_STATE_RESIST  = 14              # 状态免疫
#  FEATURE_PARAM         = 21              # 普通能力
#  FEATURE_XPARAM        = 22              # 添加能力
#  FEATURE_SPARAM        = 23              # 特殊能力
#  FEATURE_ATK_ELEMENT   = 31              # 攻击附带属性
#  FEATURE_ATK_STATE     = 32              # 攻击附带状态
#  FEATURE_ATK_SPEED     = 33              # 修正攻击速度
#  FEATURE_ATK_TIMES     = 34              # 添加攻击次数
#  FEATURE_STYPE_ADD     = 41              # 添加技能类型
#  FEATURE_STYPE_SEAL    = 42              # 禁用技能类型
#  FEATURE_SKILL_ADD     = 43              # 添加技能
#  FEATURE_SKILL_SEAL    = 44              # 禁用技能
#  FEATURE_EQUIP_WTYPE   = 51              # 可装备武器类型
#  FEATURE_EQUIP_ATYPE   = 52              # 可装备护甲类型
#  FEATURE_EQUIP_FIX     = 53              # 固定装备
#  FEATURE_EQUIP_SEAL    = 54              # 禁用装备
#  FEATURE_SLOT_TYPE     = 55              # 装备风格
#  FEATURE_ACTION_PLUS   = 61              # 添加行动次数
#  FEATURE_SPECIAL_FLAG  = 62              # 特殊标志
#  FEATURE_COLLAPSE_TYPE = 63              # 消失效果
#  FEATURE_PARTY_ABILITY = 64              # 队伍能力
#--------------------------------------------------------------------------
# ● 特殊标志
#--------------------------------------------------------------------------
# 自动战斗 0   # 擅长防御 1   # 保护弱者 2   # 特技专注 3
#--------------------------------------------------------------------------
# ● 各种能力值的简易访问方法
#--------------------------------------------------------------------------
#  ——普通能力——
# 物理攻击 2  # 物理防御 3  # 魔法攻击  4 #  魔法防御 5  # 敏捷值 6  # 幸运值 7
#  ——添加能力——
# 成功几率 1  # 必杀几率 2  # 闪避必杀几率 3  # 闪避魔法几率 4
# 反射魔法几率 5  # 反击几率 6  # HP再生速度 7  # MP再生速度 8  # TP再生速度 9
#  ——特殊能力——
#(0)  受到攻击的几率        
#(1)  防御效果比率
#(2)  恢复效果比率
#(3)  药理知识
#(4)  MP消费率
#(5)  TP消耗率
#(6)  物理伤害加成
#(7)  魔法伤害加成  
#(8)  地形伤害加成   
#(9)  经验获得加成  
#————————————————————————————————————————
module Equipplus
#得到随机属性装备方法:gainequip(装备ID,属性数)
#Equipplus.gainequip(79)Equipplus.gainarmors(1)
#~ 前缀结构:
#~ ①权重(1-100) 越大越重要
#~ ②名称(多个名称用","分开,会随机取其中一个添加到武器名前)
#~ ③属性数组  提供两种方式:
#~ 1.[属性ID,增加值]    属性ID参考说明增强脚本 增加了9号属性“极品出现率” ID为8,影响前缀的好坏 1 - 100
#~ 2.与装备特性相同[code,data_id,value]  code,data_id参考说明增强脚本
  @maxparamplus = 4 #最大前缀数
  @moneyrate = 5 #物品价格计算公式为:原价格 + 前缀权重 * @moneyrate
  @transpose = [*1..100].reverse #用于把1变成100,100变成1
  @paramsplus = [           #暂时写了三个前缀,可以自己添加,参照前缀结构

[6,"",[[22,0,0.02]]],# 命中
[6,"",[[22,1,0.02]]],# 物理躲避
[6,"",[[22,2,0.02]]],# 必杀
[6,"",[[22,3,0.02]]],# 必杀躲避
[6,"",[[22,4,0.02]]],# 魔法躲避
[6,"",[[22,5,0.02]]],# 魔法反射
[6,"",[[22,6,0.02]]],# 物理反击
[12,"",[[22,0,0.04]]],# 命中
[12,"",[[22,1,0.04]]],# 物理躲避
[12,"",[[22,2,0.04]]],# 必杀
[12,"",[[22,3,0.04]]],# 必杀躲避
[12,"",[[22,4,0.04]]],# 魔法躲避
[12,"",[[22,5,0.04]]],# 魔法反射
[12,"",[[22,6,0.04]]],# 物理反击
[6,"",[[22,0,0.02]]],# 命中
[6,"",[[22,1,0.02]]],# 物理躲避
[6,"",[[22,2,0.02]]],# 必杀
[6,"",[[22,3,0.02]]],# 必杀躲避
[6,"",[[22,4,0.02]]],# 魔法躲避
[6,"",[[22,5,0.02]]],# 魔法反射
[6,"",[[22,6,0.02]]],# 物理反击
[12,"",[[22,0,0.04]]],# 命中
[12,"",[[22,1,0.04]]],# 物理躲避
[12,"",[[22,2,0.04]]],# 必杀
[12,"",[[22,3,0.04]]],# 必杀躲避
[12,"",[[22,4,0.04]]],# 魔法躲避
[12,"",[[22,5,0.04]]],# 魔法反射
[12,"",[[22,6,0.04]]],# 物理反击
[6,"",[[22,0,0.02]]],# 命中
[6,"",[[22,1,0.02]]],# 物理躲避
[6,"",[[22,2,0.02]]],# 必杀
[6,"",[[22,3,0.02]]],# 必杀躲避
[6,"",[[22,4,0.02]]],# 魔法躲避
[6,"",[[22,5,0.02]]],# 魔法反射
[6,"",[[22,6,0.02]]],# 物理反击
[12,"",[[22,0,0.04]]],# 命中
[12,"",[[22,1,0.04]]],# 物理躲避
[12,"",[[22,2,0.04]]],# 必杀
[12,"",[[22,3,0.04]]],# 必杀躲避
[12,"",[[22,4,0.04]]],# 魔法躲避
[12,"",[[22,5,0.04]]],# 魔法反射
[12,"",[[22,6,0.04]]],# 物理反击
  [18,"",[[22,0,0.06]]],# 命中
[18,"",[[22,1,0.06]]],# 物理躲避
[18,"",[[22,2,0.06]]],# 必杀
[18,"",[[22,3,0.06]]],# 必杀躲避
[18,"",[[22,4,0.06]]],# 魔法躲避
[18,"",[[22,5,0.06]]],# 魔法反射
[18,"",[[22,6,0.06]]],# 物理反击
  [25,"",[[22,0,0.08]]],# 命中
[25,"",[[22,1,0.08]]],# 物理躲避
[25,"",[[22,2,0.08]]],# 必杀
[25,"",[[22,3,0.08]]],# 必杀躲避
[25,"",[[22,4,0.08]]],# 魔法躲避
[25,"",[[22,5,0.08]]],# 魔法反射
[25,"",[[22,6,0.08]]],# 物理反击
[31,"",[[22,0,0.1]]],# 命中
[31,"",[[22,1,0.1]]],# 物理躲避
[31,"",[[22,2,0.1]]],# 必杀
[31,"",[[22,3,0.1]]],# 必杀躲避
[31,"",[[22,4,0.1]]],# 魔法躲避
[31,"",[[22,5,0.1]]],# 魔法反射
[31,"",[[22,6,0.1]]],# 物理反击




  ]
  $商店随机 = false #商店买装备时出随机属性false
  $战斗随机 = true #战斗后获得随机属性装备
  def self.getname(paramsplus)
    name = ""
    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(","){}}
    name += @temp[rand(@temp.size)] if paramsplus.is_a?(Array) != true
    name += ""
  end
  def self.getluck #获得极品出现率
    luck = 0
    $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}}
    luck
  end
  def self.getnewequip(xequip,params = nil) #提供两个参数  装备(RPG::Equip类下的)和附加前缀数,不填则为随机
    return unless xequip.is_a?(RPG::EquipItem)
    #xparamplus为前缀数
    xequip.paramsplus = [] if xequip.paramsplus == nil
    return if xequip.paramsplus.size >= @maxparamplus
    params != nil ? xparamplus = params :  xparamplus = rand(@maxparamplus * 110) / 100
    xparamplus = xparamplus.to_int
    return xequip if xparamplus == 0
    equip = xequip.dup
    paramsplus = equip.paramsplus.dup  #无奈的方法,不这样改一个装备所有同父装备的装备都会变
    newparams = equip.params.dup
    newfeatures = equip.features.dup
    aparamsplus = @paramsplus.collect{|a| [a[0] = @transpose[a[0]-1],a[1],a[2]]}.sort_by{|a| a[0]}
    while paramsplus.size < xparamplus
      temp = rand(aparamsplus[-1][0])
      temp = [temp - getluck,0].max
      x = []
      for i in aparamsplus
        x.push i if i[0] >= temp && paramsplus.include?(i) != true
      end
      if x != []
        a = [(x.size-1)*100 - getluck,0].max
        a = (rand(a)/100).to_int
        paramsplus.push x[a]
      end
    end
    equip.name = getname(paramsplus) + equip.name #更新名称
    paramsplus.each{|a| equip.price += @transpose[a[0] - 1] * @moneyrate} #更新价格
    paramsplus.select{|a| a[2].select{|a| a.size == 2}.each{|a| newparams[a[0]] += a[1]}} #更新属性
    #以下为更新特性
    features = []
    paramsplus.each{|a| a[2].each{|a| features.push a if a.size == 3}}
    while features.size > 0
      i = features.pop
      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.value += i[2] if a.code == i[0] && a.data_id == i[1]}
    end
    if equip.is_a?(RPG::Weapon)
      equip.id = $data_weapons.size
      $data_weapons.insert $data_weapons.size,equip
      $data_weapons[equip.id].paramsplus = paramsplus
      $data_weapons[equip.id].params = newparams
      $data_weapons[equip.id].features = newfeatures
    else
      equip.id = $data_armors.size
      $data_armors.insert $data_armors.size,equip
      $data_armors[equip.id].paramsplus = paramsplus
      $data_armors[equip.id].params = newparams
      $data_armors[equip.id].features = newfeatures
    end
    equip
  end
  def self.gainequip(id,params = nil)
    $game_party.gain_item(Equipplus.getnewequip($data_weapons[id],params),1,true)
  end
  def self.gainarmors(id,params = nil)
    $game_party.gain_item(Equipplus.getnewequip($data_armors[id],params),1,true)
  end

end
if $商店随机 == true
  class Scene_Shop < Scene_MenuBase
    def do_buy(number)
      $game_party.lose_gold(number * buying_price)
      if @item.is_a?(RPG::EquipItem)
        x = number
        loop do
          break if x <= 0
          x -= 1
          $game_party.gain_item(Equipplus.getnewequip(@item), 1)
        end
      else
        $game_party.gain_item(@item, number)
      end
    end
  end
end
if $战斗随机 == true
  module BattleManager
    def self.gain_drop_items
      $game_troop.make_drop_items.each do |item|
        item.is_a?(RPG::EquipItem) ? xitem = Equipplus.getnewequip(item) : xitem = item
        $game_party.gain_item(xitem, 1)
        $game_message.add(sprintf(Vocab::ObtainItem, xitem.name))
      end
      wait_for_message
    end
  end
end
class RPG::EquipItem < RPG::BaseItem
  alias old initialize
  def initialize
    old
    @paramsplus #前缀
  end
  attr_accessor :paramsplus
end
# ■ 强化系统DataManager
#------------------------------------------------------------------------------
#  将武器和防具数据保存入存档
#==============================================================================
module DataManager
  #--------------------------------------------------------------------------
  # ● 生成存档内容
  #--------------------------------------------------------------------------
  def self.make_save_contents
    contents = {}
    contents[:system]        = $game_system
    contents[:timer]         = $game_timer
    contents[:message]       = $game_message
    contents[:switches]      = $game_switches
    contents[:variables]     = $game_variables
    contents[:self_switches] = $game_self_switches
    contents[:actors]        = $game_actors
    contents[:party]         = $game_party
    contents[:troop]         = $game_troop
    contents[:map]           = $game_map
    contents[:player]        = $game_player
    contents[:weapons]       = $data_weapons
    contents[:armors]        = $data_armors
    contents
  end
  #--------------------------------------------------------------------------
  # ● 展开存档内容
  #--------------------------------------------------------------------------
  def self.extract_save_contents(contents)
    $game_system        = contents[:system]
    $game_timer         = contents[:timer]
    $game_message       = contents[:message]
    $game_switches      = contents[:switches]
    $game_variables     = contents[:variables]
    $game_self_switches = contents[:self_switches]
    $game_actors        = contents[:actors]
    $game_party         = contents[:party]
    $game_troop         = contents[:troop]
    $game_map           = contents[:map]
    $game_player        = contents[:player]
    $data_weapons       = contents[:weapons]
    $data_armors        = contents[:armors]
  end
end[/pre]

附件
有测试存档可以看到所有装备初始1%变成11%
附加召唤术:@魔法丶小肉包

点评

感谢,范例已经上传,测试存档也附上。  发表于 2017-5-24 12:47
关于这个问题,最好附上一个范例工程来展示你说的问题,等有时间帮你看一下吧...  发表于 2017-5-24 12:24

【同人游戏】勇者斗恶龙TG
欢迎加入游戏测试群333599798
如有需私聊请加QQ:516425000
梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2017-5-24 16:47:27 | 显示全部楼层
本帖最后由 魔法丶小肉包 于 2017-5-24 16:48 编辑

由于时间关系,所以只能随便看了一下,未测试
作为插件脚本放在原脚本下方使用
[pre lang="ruby"]module Equipplus
  def self.getnewequip(xequip,params = nil) #提供两个参数  装备(RPG::Equip类下的)和附加前缀数,不填则为随机
    return unless xequip.is_a?(RPG::EquipItem)
    #xparamplus为前缀数
    xequip.paramsplus = [] if xequip.paramsplus == nil
    return if xequip.paramsplus.size >= @maxparamplus
    params != nil ? xparamplus = params :  xparamplus = rand(@maxparamplus * 110) / 100
    xparamplus = xparamplus.to_int
    return xequip if xparamplus == 0
    equip = xequip.dup
    paramsplus = equip.paramsplus.dup  #无奈的方法,不这样改一个装备所有同父装备的装备都会变
    newparams = equip.params.dup
    newfeatures = equip.features.dup
    aparamsplus = @paramsplus.collect{|a| [a[0] = @transpose[a[0]-1],a[1],a[2]]}.sort_by{|a| a[0]}
    while paramsplus.size < xparamplus
      temp = rand(aparamsplus[-1][0])
      temp = [temp - getluck,0].max
      x = []
      for i in aparamsplus
        x.push i if i[0] >= temp && paramsplus.include?(i) != true
      end
      if x != []
        a = [(x.size-1)*100 - getluck,0].max
        a = (rand(a)/100).to_int
        paramsplus.push x[a]
      end
    end
    equip.name = getname(paramsplus) + equip.name #更新名称
    paramsplus.each{|a| equip.price += @transpose[a[0] - 1] * @moneyrate} #更新价格
    paramsplus.select{|a| a[2].select{|a| a.size == 2}.each{|a| newparams[a[0]] += a[1]}} #更新属性
    #以下为更新特性
    features = []
    paramsplus.each{|a| a[2].each{|a| features.push a if a.size == 3}}
    while features.size > 0
      i = features.pop
      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.value += 0 if a.code == i[0] && a.data_id == i[1]}
    end
    if equip.is_a?(RPG::Weapon)
      equip.id = $data_weapons.size
      $data_weapons.insert $data_weapons.size,equip
      $data_weapons[equip.id].paramsplus = paramsplus
      $data_weapons[equip.id].params = newparams
      $data_weapons[equip.id].features = newfeatures
    else
      equip.id = $data_armors.size
      $data_armors.insert $data_armors.size,equip
      $data_armors[equip.id].paramsplus = paramsplus
      $data_armors[equip.id].params = newparams
      $data_armors[equip.id].features = newfeatures
    end
    equip
  end
end[/pre]

点评

进过几番测试,除了保存的存档没恢复,但不会出现无故增加属性问题了,总体问题解决了。  发表于 2017-5-24 18:16

评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部