| 
 
| 赞 | 13 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 21 |  
| 经验 | 70950 |  
| 最后登录 | 2025-3-14 |  
| 在线时间 | 740 小时 |  
 Lv3.寻梦者 
	梦石0 星屑2147 在线时间740 小时注册时间2010-9-6帖子338 | 
| 
本帖最后由 804173948 于 2015-8-6 00:57 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 第二代传送门
 
 有没有觉得那个“物品得失提示” 在一次获得很多道具时 要一个一个显示 有点繁琐 又会浪费很长时间……
 
 但这个可以一次性显示获得(或失去)的道具
 
 白字
 我以为这个脚本很容易写,But 现实很残酷,整整用了三天写(其实每天也就是两个小时……)。
 
 图
 只有获得物品的时候……“失去物品”会自动消失
 
   只有失去物品的时候……“获得物品”会自动消失
 
   如果既有获得物品 又有失去物品 如下图
 
   
 
 脚本(使用方法):
 复制代码=begin
================================================
道具提示系统 版本 1.03 By 804173948 QQ:同上 
================================================
修正BUG:
用户提出的BUG
使用方法:
在事件-脚本里输入
1、获得/失去物品
 获得: 
 
 get_item($data_items[物品id],数量)
 
 失去: 
 
 lost_item($data_items[物品id],数量)
 
 例如:
 
 get_item($data_items[10],4) 获得10号物品 4个
 
 lost_item($data_items[1],3) 丢失1号物品 3个
 
2、获得/失去武器
 获得: 
 
 get_item($data_weapons[武器id],数量)
 
 失去: 
 
 lost_item($data_weapons[武器id],数量,是否包括装备)
 
 是否包括装备:是则 True 否则 false 或不写 下同
 
3、获得/失去防具
 获得: 
 
 get_item($data_armors[防具id],数量)
 
 失去: 
 
 lost_item($data_armors[防具id],数量,是否包括装备)
4、小技巧
 
 1. GetItem.clear => 清除模块内未被窗口显示的道具(简单来说就是清除缓存……)(被窗口显示的会自动清除)
 
 2. for (变量名称) in (范围) => 在某范围内获得或失去某道具
      道具操作
    end
    如:
    for i in 0..10
      get_item($data_weapons[i],1)
    end
    ╚═> 获得0~10号武器各一个(貌似没有0号武器。。。)
 
注意:最后要加一句 show_window 否则不显示提示窗口( "show_window" 可在事件、公共事件或脚本内任何位置加)
有疑问或BUG之类的 欢迎提出
=end
module GetItem
  @get_item_var =[]
  @get_amount =[]
  def self.add_item(item,amount)
    @get_item_var.push(item)
    @get_amount.push(amount)
  end
  def self.get_item_id
    return [@get_item_var,@get_amount]
  end
  def self.clear
    @get_item_var =[]
    @get_amount =[]
  end
end
class Game_Interpreter
  def show_window
    Audio.se_play("Audio/SE/Shop",80,100)
    get_item_var = GetItem.get_item_id[0]
    get_amount = GetItem.get_item_id[1]
    SceneManager.call(Scene_Get_Item)
    SceneManager.scene.show_window(get_item_var,get_amount)
    GetItem.clear
  end
  def get_item(item,amount)
    amount = 99 if amount > 99
    GetItem.add_item(item,amount)
    $game_party.gain_item(item,amount)
  end
  def lost_item(item,amount,include_equip = false)
    amount = 99 if amount > 99 
    GetItem.add_item(item,-amount)
    $game_party.gain_item(item,-amount,include_equip)
  end
end
class Scene_Get_Item < Scene_MenuBase
  def start
    super
    @get_item_var = []
    @get_amount = []
  end
  def show_window(get_item_var,get_amount)
    @get_item_var = get_item_var
    @get_amount = get_amount
    create_show_get_window
    create_category_window
  end
  def create_show_get_window
    @show_get_window = Window_Show_GetItem.new(120,88,300,200,@get_item_var,@get_amount) #窗口位置
    @show_get_window.set_handler(:ok,     method(:return_scene))
    @show_get_window.set_handler(:cancel, method(:on_item_cancel))
  end
  def create_category_window
    @show_getItem_category = Window_GetItem_Category.new(120,40,300,48)
    @show_getItem_category.item_window = @show_get_window
    @show_getItem_category.refresh
    @show_getItem_category.set_handler(:ok,     method(:on_category_ok))
    @show_getItem_category.set_handler(:cancel, method(:return_scene))
  end
  def on_category_ok
    @show_get_window.activate
  end
  def on_item_cancel
    @show_getItem_category.activate
  end
end
class Window_GetItem_Category < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :item_window
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x,y,width,height)
    super(x, y)
    self.width = width
    self.height = height
  end
  #--------------------------------------------------------------------------
  # ● 窗口宽度
  #--------------------------------------------------------------------------
  def window_width
    return 300
  end
  #--------------------------------------------------------------------------
  # ● 获取列数
  #--------------------------------------------------------------------------
  def col_max
    return 2
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    @item_window.category = current_symbol if @item_window
  end
  #--------------------------------------------------------------------------
  # ● 生成指令列表
  #--------------------------------------------------------------------------
  def make_command_list
    if @item_window
      s1 = @item_window.amount_save
      add_command("获得物品",   :get)  if s1.min >= 0
      add_command("失去物品",   :lost) if s1.max < 0
      if s1.max >= 0 && s1.min < 0
        add_command("获得物品",   :get)  
        add_command("失去物品",   :lost) 
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置物品窗口
  #--------------------------------------------------------------------------
  def item_window=(item_window)
    @item_window = item_window
    update
  end
end
class Window_Show_GetItem < Window_ItemList
  attr_reader :amount_save
  def initialize(x, y, width, height,data,amount)
    super(x, y, width, height)
    @category = :get
    @data_save = data
    @amount_save = amount
    refresh
  end
  def col_max
    return 1
  end
  def spacing
    return 32
  end
  def include?(index)
    if index 
      case @category
      when :get
        if index >= 0
          true 
        else
          false
        end
      when :lost
        if index < 0 
          true 
        else
          false
        end
      else
        false
      end
    end 
  end
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y)
      draw_item_number(rect, index)
    end
  end
  def draw_item_number(rect, item)
    if @amount[item] < 0 
      s1 = -@amount[item]
    else
      s1 = @amount[item]
    end
    draw_text(rect, sprintf(":%2d", s1), 2)
  end
  #--------------------------------------------------------------------------
  # ● 查询此物品是否可用
  #--------------------------------------------------------------------------
  def enable?(item)
    return true 
  end
  #--------------------------------------------------------------------------
  # ● 生成物品列表
  #--------------------------------------------------------------------------
  def make_item_list
    @data = Array.new(@data_save) 
    @amount = Array.new(@amount_save)
    for i in 0 ... @data.size
    @data[i] = nil if include?(@amount_save[i]) == false
    @amount[i] = nil if include?(@amount_save[i]) == false
    end
    @data.delete(nil)
    @amount.delete(nil)
  end
end
 | 
 |