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

Project1

 找回密码
 注册会员
搜索
查看: 2202|回复: 6

[已经解决] 背包上限无法继续拾取

[复制链接]

Lv2.观梦者

梦石
0
星屑
382
在线时间
36 小时
注册时间
2018-4-14
帖子
51
发表于 2018-8-14 11:30:34 | 显示全部楼层 |阅读模式
20星屑
# =============================================================================
# TheoAllen - 背包限制
# Version : 1.4c
# Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
# (English Documentation)
# =============================================================================
($imported ||= {})[:Theo_LimInventory] = true
# =============================================================================
# Change logs:
# -----------------------------------------------------------------------------
# 2017.03.08 - Fixed minor issue on updating help window
# 2017.03.05 - Help window updated when item removed by discarding
# 2015.02.02 - Added slowdown penalty when the inventory is full
#            - Added disable dash when the inventory is full
#            - Added force gain item to supports those newly added features
# 2014.09.22 - Bugfix. Negative number appear when use item and inventory
#              reached its limit.
#            - Compatibility patch with YEA Menu Cursor
#            - Compatibility patch with MOG Menu Cursor as well
# 2014.02.25 - Add limited inventory eval formula to provide flexibility
#            - Change notetag constant to provide flexibility
# 2014.02.16 - Base Inventory slot of an actor can be changed using script call
# 2014.02.11 - Bugfix. Unequip item causes lose the item if inventory is full
# 2013.10.07 - Bugfix. Item doesn't removed when discarded
#            - Bugfix. Inventory amount not refreshed when item is discarded
# 2013.10.04 - Compatibility fix with chest system
# 2013.08.30 - Now unable to discard key item
# 2013.08.22 - Bugfix. Item size notetag isn't working
# 2013.08.19 - Bugfix when gained item
#            - Bugfix when disable display item size in shop menu
# 2013.08.18 - Finished script
# =============================================================================
=begin

  ---------------------------------------------------------------------------
  介绍:
  该脚本可以设置你的背包负重,根据背包空间来限制物品的持有个数
  
  ---------------------------------------------------------------------------
  使用方法:
  插入到插件脚本之下,Main之上
  如果你用了YEA - Shop Option(商店选项)脚本,请将本脚本放在其之下
  编辑以下的设定部分
  
  ---------------------------------------------------------------------------
  在你的道具数据库里备注以下:
  
  <inv size: n>
  n为数字,设置这个物品的占用空间大小
  设为0时则代表该物品不占用任何背包空间,可无限堆叠
  只对道具和装备(武器、护甲)有用
  
  <inv plus: n>
  n为数字,该备注可对背包提供的额外的空间
  该备注可备注在角色/职业/装备/状态的备注栏里
  如果备注在角色备注栏,额外的空间会在该角色加入到队伍后应用到背包中
  如果备注在装备备注栏,额外的空间会在该装备被装备后应用到背包中
  如果备注在状态备注栏,额外的空间会在该状态被附加后应用到背包中

  该备注的n值可以在游戏中通过脚本来改变,详情请看下方的脚本
  
  <inv minus: n>
  “<inv plus>”功能的翻转版,会减少物品的额外持有量
  
  <inv formula>
  脚本
  </inv formula>
  该备注是根据公式来设置额外空间
  比方说,库存限制根据角色的敏捷或等级
  该备注可备注在角色/职业的备注栏里
  
  根据公式加的额外空间会加在基础设置的额外空间上
  比方说,你备注了<inv plus: 100>再加上你设置的公式,那么最终的额外空间是:
  ==> 100 + 你的公式

  例子:
  <inv formula>
  level * 100
  </inv formula>
  该公式的意思是:任何一个角色升级之后,你的额外背包空间就会增加100
  你也可以使用参数来置顶你的公式:
  
  - mhp
  - mmp
  - atk
  - def
  - mat
  - mdf
  - agi
  - luk
  - $game_variables[id]
  
  注意:
  - 错误的公式可能会导致报错,所以请确认你写的公式是正确的
  - 对脚本编辑者:这些公式的参数(eval)是在Game_Actor中

  ---------------------------------------------------------------------------
  使用事件功能页中的脚本功能:
  如果想在库存满的时候强行获得道具,可使用以下脚本
  
  force_gain_item($data_items[id],数量)
  id为想获得的道具的ID
  
  如果想改变某个角色提供的额外持有量,使用以下脚本
  $game_actors[id].base_inv = 数量     << 赋值
  $game_actors[id].base_inv += 数量    << 增加
  $game_actors[id].base_inv -= 数量    << 减少
  
  如果你设置DynamicSlot为false的话,你也可以使用以下的脚本来改变库存限制
  $game_party.base_inv = 数量
  
  ---------------------------------------------------------------------------
  使用条款:
  署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.      

=end
# =============================================================================
# 设定部分
# =============================================================================
module Theo
  module LimInv
  
  # --------------------------------------------------------------------------
  # 基础设置
  # --------------------------------------------------------------------------
  
    DynamicSlot       = true
  # 物品数量是否受人物/职业/装扮/状态影响
  
    Display_ItemSize  = true
  # 是否在菜单中显示物品最大持有量
  
    Include_Equip     = false
  # 已装备的装备是否包括在已经占用的物品限制中
  
    DrawTotal_Size    = true
  # 如果设为true,那么物品帮助窗口会显示总的占用库存空间
  # 比方说,你有10瓶药水,每瓶药水占3个空间,那么窗口会显示30而不是3
  
    ForceGain         = true
  # 度时继续获得该物品,请设置一些破限惩罚
  # 该脚本重定义了原来的物品获得方式,可能会和其他类似的脚本发生冲突
   
    Full_DisableDash  = true
  # 当背包满时,禁用冲刺(Shift跑步)功能,推荐在ForceGain设为true时使用
  # 如果还用了 YEA System Option脚本,请把本脚本放在其之下
  # 除非你彻底去掉了它的自动跑步设定
  
    Full_SlowDown     = true
  # 当背包满时,降低角色速度1个单位
  
  # --------------------------------------------------------------------------
  # 变量设置
  # --------------------------------------------------------------------------
  
    Default_FreeSlot  = 30
  # 默认的背包库存大小
  # 额外的背包库存来自于你备注好的角色/装备等等
  # 如果DynamicSlot设为false的话,该数值会设定为总的库存大小
  
    NearMaxed_Percent = 25
  # 可用的库存占总库存大小的(百分比)多少时,提醒玩家库存将满
  
    NearMaxed_Color   = 21
  # 如果库存将满时,道具窗口将会换为另一种颜色
  # 颜色的代码和显示信息时的“\c[n]”(即Graphics/System/Window右下的颜色)
  
    UseCommand_Size   = 200   
  # 使用道具指令的宽度
  
  # --------------------------------------------------------------------------
  # 用语设置
  # --------------------------------------------------------------------------
  
    InvSlotVocab    = "库存: "   # 库存
    InvSizeVocab    = "占用空间: "   # 每个道具的占用空间
    SlotVocabShort  = "库:"          # 库存的缩写
    UseVocab        = "使用道具"      # 使用道具
    DiscardVocab    = "丢弃道具"  # 丢弃道具
    CancelVocab     = "取消"        # 取消
   
  end
end
# ============================================================================
# 以下勿动 :v
# ============================================================================
=begin
  -----------------------------------------------------------------------------
  Compatibility info :
  -----------------------------------------------------------------------------
  This script overwrite these methods :
  Game_Actor  >> trade_item_with_party
  Game_Party  >> max_item_number
  Game_Party  >> item_max?
  Game_Party  >> lose_item
  
  -----------------------------------------------------------------------------
  This script aliased these methods :
  DataManager >> load_database
  Game_Actor  >> setup
  Game_Party  >> initialize
  Scene_Menu  >> start
  Scene_Item  >> start
  Scene_Item  >> use_item
  Scene_Shop  >> on_buy_ok
  Scene_Shop  >> on_sell_ok

=end
# =============================================================================
# Altered built in modules and classes
# =============================================================================
# =============================================================================
# ▼ DataManager
# =============================================================================
class << DataManager
  
  alias theo_limited_item_load_db load_database
  def load_database
    theo_limited_item_load_db
    load_limited_slot
  end
  
  def load_limited_slot
    database = $data_actors + $data_classes + $data_weapons + $data_armors +
      $data_states + $data_items
    database.compact.each do |db|
      db.load_limited_inv
    end
  end
end
# =============================================================================
# ▼ RPG::BaseItem
# =============================================================================
class RPG::BaseItem
  attr_accessor :inv_size # Item inventory size
  attr_accessor :inv_mod  # Inventory slot modifier
  attr_accessor :inv_eval # Inventory eval modifier
  
  InvSizeREGX     = /<inv[\s_]+size\s*:\s*(\d+)>/i
  InvPlusREGX     = /<inv[\s_]+plus\s*:\s*(\d+)>/i
  InvMinusREGX    = /<inv[\s_]+minus\s*:\s*(\d+)/i
  InvFormSTART    = /<inv[\s_]+formula>/i
  InvFormEND      = /<\/inv[\s_]+formula>/i
  
  def load_limited_inv
    load_eval = false
    @inv_size = 1
    @inv_eval = '0'
    @inv_mod = self.is_a?(RPG::Actor) ? Theo::LimInv::Default_FreeSlot : 0
    self.note.split(/[\r\n]+/).each do |line|
      case line
      when InvSizeREGX
        @inv_size = $1.to_i
      when InvPlusREGX
        @inv_mod = $1.to_i
      when InvMinusREGX
        @inv_mod = -$1.to_i
      when InvFormSTART
        load_eval = true
        @inv_eval = ''
      when InvFormEND
        load_eval = false
      else
        @inv_eval += line if load_eval
      end
    end
  end
  
end
# =============================================================================
# Data structures and workflows goes here
# =============================================================================
# =============================================================================
# ▼ Game_Actor
# =============================================================================
class Game_Actor < Game_Battler
  attr_accessor :base_inv
  
  alias theo_liminv_setup setup
  def setup(actor_id)
    theo_liminv_setup(actor_id)
    @base_inv = $data_actors[id].inv_mod
  end
  
  def equip_size
    return 0 unless Theo::LimInv::Include_Equip
    equips.compact.inject(0) {|total,equip| total + equip.inv_size}
  end
  
  def inv_max
    result = base_inv
    result += $data_classes[class_id].inv_mod
    result += states.inject(0) {|total,db| total + db.inv_mod}
    result += equips.compact.inject(0) {|total,db| total + db.inv_mod}
    result += eval(actor.inv_eval)
    result += eval(self.class.inv_eval)
    result
  end
  # --------------------------------------------------------------------------
  # Overwrite : Trade item with party
  # --------------------------------------------------------------------------
  def trade_item_with_party(new_item, old_item)
    return false if new_item && !$game_party.has_item?(new_item)
    $game_party.force_gain_item(old_item, 1)
    $game_party.force_gain_item(new_item, -1)
    return true
  end
  
end
# =============================================================================
# ▼ Game_Party
# =============================================================================
class Game_Party < Game_Unit
  attr_accessor :base_inv
  
  alias theo_liminv_init initialize
  def initialize
    @base_inv = (Theo::LimInv::DynamicSlot ? 0 : Theo::LimInv::Default_FreeSlot)
    theo_liminv_init
  end
  
  def inv_max
    return @base_inv unless Theo::LimInv::DynamicSlot
    return members.inject(0) {|total,member| total + member.inv_max} + @base_inv
  end
  
  def inv_maxed?
    inv_max <= total_inv_size
  end
  
  def total_inv_size
    result = all_items.inject(0) {|total,item| total +
      (item_number(item) * item.inv_size)}
    result += members.inject(0) {|total,member| total + member.equip_size}
    result
  end
  
  alias theo_liminv_max_item max_item_number
  def max_item_number(item)
    $BTEST ? theo_liminv_max_item(item) : inv_max_item(item) + item_number(item)
  end
  
  def inv_max_item(item)
    return 9999999 if item.nil? || item.inv_size == 0
    free_slot / item.inv_size
  end
  
  def free_slot
    inv_max - total_inv_size
  end
  
  alias theo_liminv_item_max? item_max?
  def item_max?(item)
    $BTEST ? theo_liminv_item_max?(item) : inv_maxed?
  end
  
  def near_maxed?
    free_slot.to_f / inv_max <= Theo::LimInv::NearMaxed_Percent/100.0
  end
  
  def item_size(item)
    return 0 unless item
    item.inv_size * item_number(item)
  end
  
  def force_gain_item(item, amount, include_equip = false)
    container = item_container(item.class)
    return unless container
    last_number = item_number(item)
    new_number = last_number + amount
    container[item.id] = [new_number, 0].max
    container.delete(item.id) if container[item.id] == 0
    if include_equip && new_number < 0
      discard_members_equip(item, -new_number)
    end
    $game_map.need_refresh = true
  end
  
  def lose_item(item, amount, include_equip = false)
    force_gain_item(item, -amount, include_equip)
  end
  
  alias theo_liminv_gain_item gain_item
  def gain_item(item, amount, include_equip = false)
    if Theo::LimInv::ForceGain
      force_gain_item(item, amount, include_equip)
    else
      theo_liminv_gain_item(item, amount, include_equip)
    end
  end
  
end
# =============================================================================
# ▼ Game_Player
# =============================================================================
class Game_Player
  
  alias theo_liminv_dash? dash?
  def dash?
    return false if Theo::LimInv::Full_DisableDash && $game_party.inv_maxed?
    return theo_liminv_dash?
  end
  
  alias theo_liminv_real_move_speed real_move_speed
  def real_move_speed
    theo_liminv_real_move_speed - move_penalty
  end
  
  def move_penalty
    Theo::LimInv::Full_SlowDown && $game_party.inv_maxed? ? 1 : 0
  end
  
end
# =============================================================================
# ▼ Game_Interpreter
# =============================================================================
class Game_Interpreter
  def force_gain_item(item, amount)
    $game_party.force_gain_item(item, amount)
  end
end
# =============================================================================
# Window related class goes here
# =============================================================================
# =============================================================================
# ▼ Window_Base
# =============================================================================
class Window_Base < Window
  def draw_inv_slot(x,y,width = contents.width,align = 2)
    txt = sprintf("%d/%d",$game_party.total_inv_size, $game_party.inv_max)
    color = Theo::LimInv::NearMaxed_Color
    if $game_party.near_maxed?
      change_color(text_color(color))
    else
      change_color(normal_color)
    end
    draw_text(x,y,width,line_height,txt,align)
    change_color(normal_color)
  end
  
  def draw_inv_info(x,y,width = contents.width)
    change_color(system_color)
    draw_text(x,y,width,line_height,Theo::LimInv::InvSlotVocab)
    change_color(normal_color)
    draw_inv_slot(x,y,width)
  end
  
  def draw_item_size(item,x,y,total = true,width = contents.width)
    rect = Rect.new(x,y,width,line_height)
    change_color(system_color)
    draw_text(rect,Theo::LimInv::InvSizeVocab)
    change_color(normal_color)
    number = (Theo::LimInv::DrawTotal_Size && total) ?
      $game_party.item_size(item) : item.nil? ? 0 : item.inv_size
    draw_text(rect,number,2)
  end
end
# =============================================================================
# ▼ New Class : Window_MenuLimInv
# =============================================================================
class Window_MenuLimInv < Window_Base
  
  def initialize(width)
    super(0,0,width,fitting_height(1))
    refresh
  end
  
  def refresh
    contents.clear
    change_color(system_color)
    txt = Theo::LimInv::SlotVocabShort
    draw_text(0,0,contents.width,line_height,txt)
    draw_inv_slot(0,0)
  end
  
end
# =============================================================================
# ▼ New Class : Window_ItemSize
# =============================================================================
class Window_ItemSize < Window_Base
  
  def initialize(x,y,width)
    super(x,y,width,fitting_height(1))
  end
  
  def set_item(item)
    @item = item
    refresh
  end
  
  def refresh
    contents.clear
    draw_item_size(@item,0,0)
  end
  
end
# =============================================================================
# ▼ New Class : Window_FreeSlot
# =============================================================================
class Window_FreeSlot < Window_Base
  def initialize(x,y,width)
    super(x,y,width,fitting_height(1))
    refresh
  end
  
  def refresh
    contents.clear
    draw_inv_info(0,0)
  end
end
# =============================================================================
# ▼ New Class : Window_ItemUseCommand
# =============================================================================
class Window_ItemUseCommand < Window_Command
  include Theo::LimInv
  
  def initialize
    super(0,0)
    self.openness = 0
  end
  
  def set_item(item)
    @item = item
    refresh
  end
  
  def window_width
    UseCommand_Size
  end
  
  def make_command_list
    add_command(UseVocab, :use, $game_party.usable?(@item))
    add_command(DiscardVocab, :discard, discardable?(@item))
    add_command(CancelVocab, :cancel)
  end
  
  def to_center
    self.x = Graphics.width/2 - width/2
    self.y = Graphics.height/2 - height/2
  end
  
  def discardable?(item)
    return false if item.nil?
    !(item.is_a?(RPG::Item) && item.itype_id == 2)
  end
  
end
# =============================================================================
# ▼ New Class : Window_DiscardAmount
# =============================================================================
class Window_DiscardAmount < Window_Base
  attr_accessor :cmn_window
  attr_accessor :itemlist
  attr_accessor :freeslot
  
  def initialize(x,y,width)
    super(x,y,width,fitting_height(1))
    self.openness = 0
    @amount = 0
  end
  
  def set_item(item)
    @item = item
    @amount = 0
    refresh
  end
  
  def refresh
    contents.clear
    return unless @item
    draw_item_name(@item,0,0,true,contents.width)
    txt = sprintf("%d/%d",@amount, $game_party.item_number(@item))
    draw_text(0,0,contents.width,line_height,txt,2)
  end
  
  def draw_item_name(item, x, y, enabled = true, width = 172)
    return unless item
    draw_icon(item.icon_index, x, y, enabled)
    change_color(normal_color, enabled)
    draw_text(x + 24, y, width, line_height, item.name + ":")
  end
  
  def update
    super
    return unless open?
    change_amount(1) if Input.repeat?(:RIGHT)
    change_amount(-1) if Input.repeat?(:LEFT)
    change_amount(10) if Input.repeat?(:UP)
    change_amount(-10) if Input.repeat?(:DOWN)
    lose_item if Input.trigger?(:C)
    close_window if Input.trigger?(:B)
  end
  
  def change_amount(num)
    @amount = [[@amount+num,0].max,$game_party.item_number(@item)].min
    Sound.play_cursor
    refresh
  end
  
  def lose_item
    $game_party.lose_item(@item,@amount)
    @itemlist.redraw_current_item
    @freeslot.refresh
    if $game_party.item_number(@item) == 0
      Sound.play_ok
      @itemlist.activate.refresh
      @itemlist.update_help
      @cmn_window.close.deactivate
      close
    else
      close_window
    end
  end
  
  def close_window
    close
    @cmn_window.activate
    Sound.play_ok
  end
  
end
# =============================================================================
# ▼ Window_ItemList
# =============================================================================
class Window_ItemList < Window_Selectable
  attr_reader :item_size_window
  
  def item_size_window=(window)
    @item_size_window = window
    @item_size_window.set_item(item)
  end
  
  alias theo_liminv_update_help update_help
  def update_help
    theo_liminv_update_help
    @item_size_window.set_item(item) if @item_size_window
  end
  
  alias theo_liminv_height= height=
  def height=(height)
    self.theo_liminv_height = height
    refresh
  end
  
  def enable?(item)
    return !item.nil?
  end
  
end
# =============================================================================
# ▼ Window_ShopNumber
# =============================================================================
class Window_ShopNumber < Window_Selectable
  attr_accessor :mode
  
  alias theo_liminv_init initialize
  def initialize(x, y, height)
    theo_liminv_init(x, y, height)
    @mode = :buy
  end
  
  alias theo_liminv_refresh refresh
  def refresh
    theo_liminv_refresh
    draw_itemsize
  end
  
  def draw_itemsize
    item_size = @number * @item.inv_size
    total_size = $game_party.total_inv_size +
      (@mode == :buy ? item_size : -item_size)
    txt = sprintf("%d/%d",total_size,$game_party.inv_max)
    ypos = item_y + line_height * ($imported["YEA-ShopOptions"] ? 5 : 4)
    rect = Rect.new(4,ypos,contents.width-8,line_height)
    change_color(system_color)
    draw_text(rect,Theo::LimInv::InvSlotVocab)
    change_color(normal_color)
    draw_text(rect,txt,2)
  end
  
end
# =============================================================================
# ▼ Window_ShopStatus
# =============================================================================
class Window_ShopStatus < Window_Base
  
  if Theo::LimInv::Display_ItemSize
  alias theo_liminv_draw_posses draw_possession
  def draw_possession(x, y)
    theo_liminv_draw_posses(x,y)
    y += line_height
    draw_item_size(@item,x,y,false, contents.width-(x*2))
  end
  
  if $imported["YEA-ShopOptions"]
  def draw_actor_equip_info(dx, dy, actor)
    dy += line_height
    enabled = actor.equippable?(@item)
    change_color(normal_color, enabled)
    draw_text(dx, dy, contents.width, line_height, actor.name)
    item1 = current_equipped_item(actor, @item.etype_id)
    draw_actor_param_change(dx, dy, actor, item1) if enabled
  end
  end # $imported["YEA-ShopOption"]
  end # Display item size

end
# =============================================================================
# Scene classes goes here
# =============================================================================
# =============================================================================
# ▼ Scene_Menu
# =============================================================================
class Scene_Menu < Scene_MenuBase
  
  alias theo_liminv_start start
  def start
    theo_liminv_start
    create_liminv_window
  end
  
  def create_liminv_window
    @lim_inv = Window_MenuLimInv.new(@gold_window.width)
    @lim_inv.x = @command_window.x
    @lim_inv.y = @command_window.height
  end
  
end
# =============================================================================
# ▼ Scene_Item
# =============================================================================
class Scene_Item < Scene_ItemBase
  
  alias theo_liminv_start start
  def start
    theo_liminv_start
    resize_item_window
    create_freeslot_window
    create_itemsize_window
    create_usecommand_window
    create_discard_amount
  end
  
  def resize_item_window
    @item_window.height -= @item_window.line_height * 2
  end
  
  def create_freeslot_window
    wy = @item_window.y + @item_window.height
    wh = Theo::LimInv::Display_ItemSize ? Graphics.width/2 : Graphics.width
    @freeslot = Window_FreeSlot.new(0,wy,wh)
    @freeslot.viewport = @viewport
  end
  
  def create_itemsize_window
    return unless Theo::LimInv::Display_ItemSize
    wx = @freeslot.width
    wy = @freeslot.y
    ww = wx
    @itemsize = Window_ItemSize.new(wx,wy,ww)
    @itemsize.viewport = @viewport
    @item_window.item_size_window = @itemsize
  end
  
  def create_usecommand_window
    @use_command = Window_ItemUseCommand.new
    @use_command.to_center
    @use_command.set_handler(:use, method(:use_command_ok))
    @use_command.set_handler(:discard, method(:on_discard_ok))
    @use_command.set_handler(:cancel, method(:on_usecmd_cancel))
    @use_command.viewport = @viewport
  end
  
  def create_discard_amount
    wx = @use_command.x
    wy = @use_command.y + @use_command.height
    ww = @use_command.width
    @discard_window = Window_DiscardAmount.new(wx,wy,ww)
    @discard_window.cmn_window = @use_command
    @discard_window.itemlist = @item_window
    @discard_window.freeslot = @freeslot
    @discard_window.viewport = @viewport
  end
  
  alias theo_liminv_item_ok on_item_ok
  def on_item_ok
    @use_command.set_item(item)
    @use_command.open
    @use_command.activate
    @use_command.select(0)
  end
  
  alias theo_liminv_use_item use_item
  def use_item
    @use_command.close
    theo_liminv_use_item
    @freeslot.refresh
  end
  
  def use_command_ok
    theo_liminv_item_ok
    @use_command.close
  end
  
  def on_discard_ok
    @discard_window.set_item(item)
    @discard_window.open
  end
  
  def on_usecmd_cancel
    @item_window.activate
    @use_command.close
    @use_command.deactivate
  end
  
end
# =============================================================================
# ▼ Scene_Shop
# =============================================================================
class Scene_Shop < Scene_MenuBase
  alias theo_liminv_buy_ok on_buy_ok
  def on_buy_ok
    @number_window.mode = :buy
    theo_liminv_buy_ok
  end
  
  alias theo_liminv_sell_ok on_sell_ok
  def on_sell_ok
    @number_window.mode = :sell
    theo_liminv_sell_ok
  end
end

# =============================================================================
# ▼ Compatibility patch thingy
# =============================================================================

if $imported["YEA-MenuCursor"]
class Sprite_MenuCursor
  def opacity_rate
    rate = 16
    return -rate if [email protected] || @window.close?
    return rate
  end
end
end

if $imported[:mog_menu_cursor]
module CURSOR_MENU_SPRITE
  def can_update_cursor_position?
    return false if !self.active     
    return false if self.index < 0
    return false if !self.visible
    return false if self.close?
    return true
  end
end
end

这个脚本可以达到背包上限速度降低,但是我想做到达到上限无法再拾取物品。
求大佬帮忙。

最佳答案

查看完整内容

抱歉,我應該要順便附上來 去分支條件的腳本那 輸入 $game_player.real_move_speed == 你要的速度 (兩個等號要記得哦

Lv3.寻梦者

梦石
0
星屑
2106
在线时间
950 小时
注册时间
2015-7-16
帖子
767

开拓者

发表于 2018-8-14 11:30:35 | 显示全部楼层
抱歉,我應該要順便附上來

去分支條件的腳本那
輸入 $game_player.real_move_speed == 你要的速度  (兩個等號要記得哦
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2106
在线时间
950 小时
注册时间
2015-7-16
帖子
767

开拓者

发表于 2018-8-14 11:55:15 | 显示全部楼层
如果背包滿了禁用奔跑,我有一個簡單不會產生腳本衝突的解決方案
那就是直接在事件中用條件判斷玩家的走路速度,只要減少
道具就不能拾取

就不知道樓主還需不需要儲藏箱腳本跟丟棄物品腳本就是了
上述都是有的,如果樓主打算這麼玩的話
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
382
在线时间
36 小时
注册时间
2018-4-14
帖子
51
 楼主| 发表于 2018-8-14 12:08:43 | 显示全部楼层
duzine 发表于 2018-8-14 11:55
如果背包滿了禁用奔跑,我有一個簡單不會產生腳本衝突的解決方案
那就是直接在事件中用條件判斷玩家的走路 ...

可以采用,但是我做的是及时战斗,举巨型武器的时候会降低速度,所以速度设置有点烦。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
382
在线时间
36 小时
注册时间
2018-4-14
帖子
51
 楼主| 发表于 2018-8-14 12:15:16 | 显示全部楼层
duzine 发表于 2018-8-14 11:55
如果背包滿了禁用奔跑,我有一個簡單不會產生腳本衝突的解決方案
那就是直接在事件中用條件判斷玩家的走路 ...

去分支条件里看了一下,没有办法判断玩家移动速度啊。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2106
在线时间
950 小时
注册时间
2015-7-16
帖子
767

开拓者

发表于 2018-8-14 17:25:04 | 显示全部楼层
我也做過類似的負重、背包系統
應該說我現在也是做即時戰鬥的ARPG

不過這類腳本不太好兼容,蠻容易跟其他腳本衝突的
然後最主要是發現到並不好玩,最好的建議是給玩家更寬容的背包空間
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
382
在线时间
36 小时
注册时间
2018-4-14
帖子
51
 楼主| 发表于 2018-8-14 22:43:53 | 显示全部楼层
duzine 发表于 2018-8-14 17:25
我也做過類似的負重、背包系統
應該說我現在也是做即時戰鬥的ARPG

十分感谢,问题已经解决,就是有一点麻烦。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 16:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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