Project1

标题: 能不能设计一个再商店买卖画面中能看到的负重脚本 [打印本页]

作者: niuyi119    时间: 2021-4-21 06:53
标题: 能不能设计一个再商店买卖画面中能看到的负重脚本
角色有多少空间每种商品个占多少空间
作者: 真·可乐    时间: 2021-4-21 08:28
首先得有个负重脚本,再谈结合负重的商店设计。
作者: niuyi119    时间: 2021-4-21 10:15
真·可乐 发表于 2021-4-21 08:28
首先得有个负重脚本,再谈结合负重的商店设计。

#===================================
# ○ 使用方法
#-----------------------------------
# 事件中使用【脚本】功能输入以下功能执行相关操作:
#·set_burden_max(max)
#  设置新的最大负重值(初始默认10),括弧里填新的最大值数字
#·refresh_burden
#  刷新总负重值,本方法在获得/失去物品时会自动执行,大概不会在事件中用到。
#
# 宝箱事件中使用条件分歧的【脚本】功能输入:
#·burden_max?
#  判定目前是否已经满负重
#·burden_max?(type, id)
#  判定加上指定类型和ID的项目的负重后是否满负重
#  type:类型(可填的类型有  :item/:weapon/:armor)
#  id  :项目的ID
#
# ※注意:事件中增加物品如果不加满负重判定的话会直接加进去。
#===================================


# 一些事件脚本用的便捷方法
class Interpreter
  def set_burden_max(max)
    $game_party.set_burden_max(max)
  end
  
  def refresh_burden
    $game_party.refresh_burden
  end
  
  def burden_max?(type = nil, id = nil)
    return $game_party.burden_max? unless (type and id)
    return $game_party.test_burden_max?(type, id)
  end
  
end



class Window_Burden < Window_Base
  #-----------------------------------
  # ○ 初始化
  #-----------------------------------
  def initialize
    super(640 - 160, 480 - 64, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 99
    refresh
  end
  #-----------------------------------
  # ○ 刷新
  #-----------------------------------
  def refresh
    return if (@burden == $game_party.burden and @burden_max == $game_party.burden_max)
    @burden = $game_party.burden
    @burden_max = $game_party.burden_max
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, contents.width, 32, "负重:")
   
    color = @burden >= @burden_max ? Color.new(255, 0, 0) : normal_color
    self.contents.font.color = color
    text = sprintf("%s/%s", @burden, @burden_max)
    self.contents.draw_text(0, 0, contents.width, 32, text, 2)
  end
end


class Scene_Item
  alias sny46_161016_main main
  def main
    @burden_window = Window_Burden.new
    sny46_161016_main
    @burden_window.dispose
  end
  
  alias sny46_161016_update update
  def update
    @burden_window.refresh
    sny46_161016_update
  end
end








# 一些数据扩展
module RPG
  
  # 在物品/武器/防具的说明栏最后面加上“♂重量数值”设置单个项目的重量
  # 不设定的话会使用下面的默认值作为项目的重量
  
  # 默认物品的重量值
  DefaultBurden = 5
  
  class Weapon
    def burden
      num = (@description.split(/♂/)[1] || DefaultBurden)
      return num.to_i
    end
    def description
      return (@description.split(/♂/)[0] || @description)
    end
  end
  class Armor
    def burden
      num = (@description.split(/♂/)[1] || DefaultBurden)
      return num.to_i
    end
    def description
      return (@description.split(/♂/)[0] || @description)
    end
  end
  class Item
    def burden
      num = (@description.split(/♂/)[1] || DefaultBurden)
      return num.to_i
    end
    def description
      return (@description.split(/♂/)[0] || @description)
    end
  end
  
end



class Game_Party
  
  #-----------------------------------
  # ○ 定义俩变量
  #-----------------------------------
  attr_reader :burden
  attr_reader :burden_max
  
  #-----------------------------------
  # ○ 初始化
  #-----------------------------------
  alias sny46_161016_init initialize
  def initialize
    sny46_161016_init
    @burden = 0      # 初始负重值
    @burden_max = 10 # 初始最大负重值
    refresh_burden
  end
  
  #-----------------------------------
  # ○ 增加物品 (减少)
  #-----------------------------------
  alias sny46_161016_gain_item gain_item
  def gain_item(item_id, n)
    sny46_161016_gain_item(item_id, n)
    refresh_burden
  end
  #-----------------------------------
  # ○ 增加武器 (减少)
  #-----------------------------------
  alias sny46_161016_gain_weapon gain_weapon
  def gain_weapon(weapon_id, n)
    sny46_161016_gain_weapon(weapon_id, n)
    refresh_burden
  end
  #-----------------------------------
  # ○ 增加防具 (减少)
  #-----------------------------------
  alias sny46_161016_gain_armor gain_armor
  def gain_armor(armor_id, n)
    sny46_161016_gain_armor(armor_id, n)
    refresh_burden
  end
  
  
  #-----------------------------------
  # ○ 整体刷新当前总负重
  #-----------------------------------
  def refresh_burden
    @burden = 0
    @items.each{|id, num| num.times{@burden += $data_items[id].burden}}
    @weapons.each{|id, num| num.times{@burden += $data_weapons[id].burden}}
    @armors.each{|id, num| num.times{@burden += $data_armors[id].burden}}
  end
  
  #-----------------------------------
  # ○ 设置新的最大负重值
  #-----------------------------------
  def set_burden_max(n)
    @burden_max = n
  end
  
  #-----------------------------------
  # ○ 判定当前是否满负重
  #-----------------------------------
  def burden_max?
    return @burden >= @burden_max
  end
  
  #-----------------------------------
  # ○ 判定加上某个值是否满负重
  #-----------------------------------
  def test_burden_max?(type, id)
    return true if burden_max?
    case type
    when :item
      n = $data_items[id].burden
    when :armor
      n = $data_armors[id].burden
    when :weapon
      n = $data_weapons[id].burden
    else
      n = 0
    end
    return (@burden + n >= @burden_max)
  end
  
end
复制代码
作者: niuyi119    时间: 2021-4-21 10:17
niuyi119 发表于 2021-4-21 10:15
#===================================
# ○ 使用方法
#-----------------------------------

希望能用这个脚本,实现商店买卖时也能有负重系统
作者: niuyi119    时间: 2021-4-21 10:20
真·可乐 发表于 2021-4-21 08:28
首先得有个负重脚本,再谈结合负重的商店设计。

希望用这个脚本实现商店买卖中有负重系统




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1