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

Project1

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

[已经过期] 装备多类型(装备位、类型)的BUG

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

跳转到指定楼层
1
发表于 2015-3-29 10:32:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 chd114 于 2015-3-28 23:48 编辑

首先放上脚本
设置部分
RUBY 代码复制
  1. =begin
  2. 给一个装备多种类型、位置分类,只有角色能使用一个装备下设定的所有类型的装备才能使用
  3. =end
  4. module Chd114 end
  5. module Chd114::Equip#(武器ID为-1~999,防具ID为1~999)
  6.   #装备位置(0为武器,1开始都是防具)
  7.   Etype = {
  8.   61=>[2],
  9.   -1=>[],
  10.   }
  11.   #装备类型(武器类型为-1~-999,防具类型为1~999)
  12.   Type = {
  13.   }
  14. end
  15. (-999..999).each{|i|Chd114::Equip::Etype[i] ||=[];Chd114::Equip::Type[i] ||=[]}

处理部分
RUBY 代码复制
  1. class Game_BattlerBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 判定武器类型是否屏蔽
  4.   #--------------------------------------------------------------------------
  5.   def weapon_type_cover?(stype_id)
  6.     cover_weapon.include?(stype_id)
  7.   end
  8.   #--------------------------------------------------------------------------
  9.   # ● 判定防具类型是否屏蔽
  10.   #--------------------------------------------------------------------------
  11.   def armor_type_cover?(stype_id)
  12.     cover_armor.include?(stype_id)
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取可用武器类型时除去屏蔽(删除)武器类型
  16.   #--------------------------------------------------------------------------
  17.   def add_weapon_types
  18.     features_set(FEATURE_EQUIP_WTYPE).delete_if &method(:weapon_type_cover?)
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 获取可用防具类型时除去屏蔽(删除)防具类型
  22.   #--------------------------------------------------------------------------
  23.   def add_armor_types
  24.     features_set(FEATURE_EQUIP_ATYPE).delete_if &method(:armor_type_cover?)
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 判定物品是否可以装备
  28.   #--------------------------------------------------------------------------
  29.   def equippable?(item)
  30.     return false if item.is_a?(RPG::Item)
  31.     return false unless item.is_a?(RPG::EquipItem)
  32.     return false if equip_type_sealed?(item.etype_id)
  33.     etid = item.is_a?(RPG::Weapon)? -item.wtype_id : item.atype_id
  34.     cetid = item.is_a?(RPG::Weapon)?  -item.id : item.id
  35.     cet=Chd114::Equip::Type[cetid].push(etid)
  36.     equipcan=0
  37.     for i in cet
  38.       if i<0
  39.       equipcan+=1 if equip_wtype_ok?(-i) && !weapon_type_cover?(-i)
  40.       else
  41.       equipcan+=1 if equip_atype_ok?(i) && !armor_type_cover?(i)
  42.       end
  43.     end
  44.     return true if equipcan==cet.size
  45.     return false
  46.   end
  47. end
  48.  
  49. class Game_Actor
  50.   #--------------------------------------------------------------------------
  51.   # ● 实例变量
  52.   #--------------------------------------------------------------------------
  53.   attr_writer   :cover_weapon               # 屏蔽武器类型
  54.   attr_writer   :cover_armor                # 屏蔽防具类型
  55.   #--------------------------------------------------------------------------
  56.   # ○ 屏蔽装备类型取得
  57.   #--------------------------------------------------------------------------
  58.   def cover_weapon
  59.     @cover_weapon = [] if @cover_weapon == nil
  60.     return @cover_weapon
  61.   end
  62.   def cover_armor
  63.     @cover_armor = [] if @cover_armor == nil
  64.     return @cover_armor
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 更换装备
  68.   #     slot_id : 装备栏 ID
  69.   #     item    : 武器/护甲(为 nil 时装备解除)
  70.   #--------------------------------------------------------------------------
  71.   def change_equip(slot_id, item)
  72.     return unless trade_item_with_party(item, equips[slot_id])
  73.     if item!=nil
  74.       cetid = item.is_a?(RPG::Weapon)? -item.id : item.id
  75.       cet=Chd114::Equip::Etype[cetid].push(item.etype_id)
  76.       return if item && !cet.include?(slot_id)
  77.     end
  78.     @equips[slot_id].object = item
  79.     refresh
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 卸下无法装备的物品
  83.   #     item_gain : 卸下的装备是否保留
  84.   #--------------------------------------------------------------------------
  85.   def release_unequippable_items(item_gain = true)
  86.     @equips.each_with_index do |item, i|
  87.       if item.object!=nil
  88.         cetid = item.is_a?(RPG::Weapon)? -item.object.id : item.object.id
  89.         cet=Chd114::Equip::Etype[cetid].push(item.object.etype_id)
  90.         if !equippable?(item.object) || !cet.include?(equip_slots[i])
  91.           trade_item_with_party(nil, item.object) if item_gain
  92.           item.object = nil
  93.         end
  94.       end
  95.     end
  96.   end
  97. end
  98.  
  99. class Window_EquipItem < Window_ItemList
  100.   #--------------------------------------------------------------------------
  101.   # ● 查询使用列表中是否含有此物品
  102.   #--------------------------------------------------------------------------
  103.   def include?(item)
  104.     return true if item == nil
  105.     return false unless item.is_a?(RPG::EquipItem)
  106.     return false if @slot_id < 0
  107.     cetid = item.is_a?(RPG::Weapon)? -item.id : item.id
  108.     cet=Chd114::Equip::Etype[cetid].push(item.etype_id)
  109.     return false if !cet.include?(@actor.equip_slots[@slot_id])
  110.     return @actor.equippable?(item)
  111.   end
  112.  
  113. end

设置部分如上,其他未动,BUG如此图

布衣是1号防具,小斧是1号武器,如果一个角色同时装备过这两种装备,那么作为防具的布衣就可以装备到武器上···
@三途亚梦 遇到过这种问题吗?





旧版备份

评分

参与人数 1星屑 +2 收起 理由
我是大仙 + 2 无理取闹

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-3-29 10:48:09 | 只看该作者
自己找判断「装备类型能否装上的部分」,一个一个改掉

@三途亚梦  大概知道有哪些
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
 楼主| 发表于 2015-3-29 11:39:45 | 只看该作者
taroxd 发表于 2015-3-28 17:48
自己找判断「装备类型能否装上的部分」,一个一个改掉

@三途亚梦  大概知道有哪些  ...

修改了Game_Actor里面的以后这个BUG消失了···然后脱掉装备的地方会有问题(装备数据库设置里不属于该装备位的装备时脱下这个装备位上的装备)

  1.   #--------------------------------------------------------------------------
  2.   # ● 卸下无法装备的物品
  3.   #     item_gain : 卸下的装备是否保留
  4.   #--------------------------------------------------------------------------
  5.   def release_unequippable_items(item_gain = true)
  6.     @equips.each_with_index do |item, i|
  7.     cetid = item.is_a?(RPG::Weapon)? -item.object_id : item.object_id
  8.     p item#.object_id
  9.     p Chd114::Equip::Etype[cetid]
  10.     cet=Chd114::Equip::Etype[cetid].push(item.object.etype_id)
  11.    
  12.       if !equippable?(item.object) || !cet.include?(equip_slots[i])
  13.         trade_item_with_party(nil, item.object) if item_gain
  14.         item.object = nil
  15.       end
  16.     end
  17.   end
复制代码
object_id和id不一样但是直接取id会出错···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
4
发表于 2015-3-29 14:05:21 | 只看该作者
我做的是让装备任意位置可装备,然后在物品栏筛选的时候做了改变而已,所以并不会对这些方法产生什么影响呢。

评分

参与人数 1星屑 +110 收起 理由
丿梁丶小柒 + 110 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
 楼主| 发表于 2015-3-29 16:34:20 | 只看该作者
三途亚梦 发表于 2015-3-28 21:05
我做的是让装备任意位置可装备,然后在物品栏筛选的时候做了改变而已,所以并不会对这些方法产生 ...

我的和你的有点区别呢···你的和dota的6格装差不多(dota1的法球效果是放最前面的法球有效果,后面的无效,所以也是位置不同法球不同了···)

点评

就是说你那实际上是三个看起来一样实际效果不同的装备?  发表于 2015-3-29 17:27
我的主副手是根据备注判断,如果装备是单手持用的,根据装备位置的id,将装备上去的物品的id+1,卸下来的时候再-1变回去。本质上是3个不同的装备  发表于 2015-3-29 17:04
你那个主手副手才有效的特性和dota的法球其实可以算一个东西···主楼我编辑了下现在的情况···你遇到过这种没有···  发表于 2015-3-29 16:58
我才没有那么高级的法球的区别,就是单纯的任意位置可装备,但是玩家在更换装备的时候物品栏会做额外的筛选,所以玩家不能把斧头装在头上。  发表于 2015-3-29 16:55
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 23:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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