查看: 2150|回复: 1

[已经过期] 关于这个脚本。。。。。。

[复制链接]

【欧皇】

梦石
3
星屑
2055
在线时间
1004 小时
注册时间
2013-8-19
回帖
3040

开拓者

发表于 2015-7-22 17:34:50 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 欧买歌 于 2015-7-22 17:39 编辑

[pre lang="ruby"]class Game_Party
Item = Struct.new(:id, :n, :type)
  attr_reader   :items
  alias add_initialize_xdrs  initialize
  def initialize
    add_initialize_xdrs
    @items = [nil]
  end
  #--------------------------------------------------------------------------
  # ● 获取物品的所持数
  #     item_id : 物品 ID
  #--------------------------------------------------------------------------
  def item_number(item_id)
    n = 0
    for item in @items
      next if item.nil?
      n += item.n if item.id == item_id and item.type == 0
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 增加物品 (减少)
  #     item_id : 物品 ID
  #     n       : 个数
  #--------------------------------------------------------------------------
  def gain_item(item_id, n)
    return if n == 0
    if item_id > 0
      if n > 0
        1.upto(@items.size-1){|i|
        item = @items
        next if item.type != 0
        if item.id == item_id
          add = [99 - item.n, n].min;item.n += add;n -= add;break if n == 0
        end}
        @items.push(Item.new(item_id, n, 0)) if n > 0
      else
        (@items.size-1).downto(1){|i|
        item = @items
        next if item.type != 0
        if item.id == item_id
          add = [n.abs, item.n].min;item.n -= add;n += add; break if n == 0
          @items.delete(item) if item.n == 0
        end}
      end
    end
  end
  end
#=============================================================================
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def item
    case @data[self.index].type
    when 0 :$data_items[@data[self.index].id]
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 添加物品
    for item in $game_party.items
      next if item.nil?
      next if $game_temp.in_battle and item.type != 0
      @data.push(item)
    end
    # 如果项目数不是 0 就生成位图、重新描绘全部项目
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def draw_item(index)
    number = @data[index].n
    item = case @data[index].type
           when 0 :$data_items[@data[index].id]
           end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end[/pre]
这个脚本原作者是@芯☆淡茹水 我本想私信他,但是他却说他工作忙没时间改,但我也只是个新手,所以来提问区伸手了。
这个脚本是类似网游的背包,99个物品为一组,满了99个,就会多出一格放相同的物品,以此类推。
但是我测试了下却发现了BUG
1.X物品为0时打开背包看却发现物品还在而且数量显示0
2.物品数大于99时不能买东西
3.一次性获得大于99的物品(或者购买),获得的东西将不会分组。
我这个新手不知道怎么改啊,求触~!  

点评

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????  发表于 2015-7-22 17:44
15377917649 支持支付宝捐款  发表于 2015-7-22 17:43
QQ:2223942063
Q群:365819625
贪吃方1.4
梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2015-7-22 20:49:05 | 显示全部楼层
粗略的看了下。第一个问题:把 42 ,4,3行换成下面
  1. add = [n.abs, item.n].min;item.n -= add;n += add
  2. @items.delete(item) if item.n == 0;break if n == 0
复制代码

评分

参与人数 1星屑 +100 收起 理由
hys111111 + 100 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部