赞 | 68 |
VIP | 397 |
好人卡 | 580 |
积分 | 22 |
经验 | 311270 |
最后登录 | 2022-3-9 |
在线时间 | 4033 小时 |
…あたしは天使なんかじゃないわ
- 梦石
- 0
- 星屑
- 2208
- 在线时间
- 4033 小时
- 注册时间
- 2010-10-4
- 帖子
- 10779
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 taroxd 于 2015-1-17 16:31 编辑
@d
#------------------------------------------------------ # ● require Taroxd基础设置,全局变量存档 #------------------------------------------------------ # # 一条路线,包括玩家位置,队伍成员,持有物品等。 # 游戏中的变量和开关是所有路线共有的。 # 该脚本可以进行路线的切换。 # 游戏开始时,路线 id 为 0。 # # 进入空路线时,队伍无成员,不持有任何物品。玩家的位置不变。 # 建议用以下方式来初始化一条路线: # 淡出画面 - Route.current.id = id - 初始化路线 - 淡入画面 # # -- 用法 -- 在事件脚本中输入 -- # Route.current.id:获取当前路线的 id。 # Route.current.id = id: # 切换到第 id 号路线,无淡入淡出效果。 # set_route(id): # 切换到第 id 号路线,有淡入淡出效果。 # merge_route(id):将第 id 号路线合并入当前路线,并清除第 id 号路线。 # Route.current.clear(id):清除第 id 号路线。 #------------------------------------------------------ # 路线类,保存了路线 id 和数据。该类的实例会存入存档。 class Taroxd::Route # 数据 class Contents attr_reader :party, :map_id, :x, :y, :d def initialize @party = $game_party @map_id = $game_map.map_id @x = $game_player.x @y = $game_player.y @d = $game_player.direction end def restore $game_party = @party $game_player.reserve_transfer(@map_id, @x, @y, @d) end end class << self def new Taroxd::Global[:route] ||= super end alias_method :current, :new end attr_reader :id def initialize @id = 0 @data = [] # Contents 实例的数组 end def id=(id) return if @id == id @data[@id] = Contents.new @id = id contents = @data[id] contents ? contents.restore : init_route end # 合并路线 def <<(id) if @id != id && @data[id] $game_party.merge_party(@data[id].party) clear(id) end self end def clear(id = nil) id ? @data[id] = nil : @data.clear end private # 进入一条新路线时执行的内容 def init_route $game_party = Game_Party.new end end class Game_Interpreter Route = Taroxd::Route # 设置路线 def set_route(id) return if $game_party.in_battle command_221 # 淡出画面 Route.current.id = id Fiber.yield while $game_player.transfer? command_222 # 淡入画面 end # 合并路线 def merge_route(id) Route.current << id $game_player.refresh $game_map.need_refresh = true end end class Game_Party < Game_Unit # 合并金钱、角色、物品 def merge_party(other) gold, actors, items, weapons, armors = other.merge_contents gain_gold(gold) @actors |= actors merge_item @items, items, $data_items merge_item @weapons, weapons, $data_weapons merge_item @armors, armors, $data_armors end protected def merge_contents [@gold, @actors, @items, @weapons, @armors] end private def merge_item(to, from, database) to.merge!(from) do |id, v1, v2| [v1 + v2, max_item_number(database[id])].min end end end
#------------------------------------------------------
# ● require Taroxd基础设置,全局变量存档
#------------------------------------------------------
#
# 一条路线,包括玩家位置,队伍成员,持有物品等。
# 游戏中的变量和开关是所有路线共有的。
# 该脚本可以进行路线的切换。
# 游戏开始时,路线 id 为 0。
#
# 进入空路线时,队伍无成员,不持有任何物品。玩家的位置不变。
# 建议用以下方式来初始化一条路线:
# 淡出画面 - Route.current.id = id - 初始化路线 - 淡入画面
#
# -- 用法 -- 在事件脚本中输入 --
# Route.current.id:获取当前路线的 id。
# Route.current.id = id:
# 切换到第 id 号路线,无淡入淡出效果。
# set_route(id):
# 切换到第 id 号路线,有淡入淡出效果。
# merge_route(id):将第 id 号路线合并入当前路线,并清除第 id 号路线。
# Route.current.clear(id):清除第 id 号路线。
#------------------------------------------------------
# 路线类,保存了路线 id 和数据。该类的实例会存入存档。
class Taroxd::Route
# 数据
class Contents
attr_reader :party, :map_id, :x, :y, :d
def initialize
@party = $game_party
@map_id = $game_map.map_id
@x = $game_player.x
@y = $game_player.y
@d = $game_player.direction
end
def restore
$game_party = @party
$game_player.reserve_transfer(@map_id, @x, @y, @d)
end
end
class << self
def new
Taroxd::Global[:route] ||= super
end
alias_method :current, :new
end
attr_reader :id
def initialize
@id = 0
@data = [] # Contents 实例的数组
end
def id=(id)
return if @id == id
@data[@id] = Contents.new
@id = id
contents = @data[id]
contents ? contents.restore : init_route
end
# 合并路线
def <<(id)
if @id != id && @data[id]
$game_party.merge_party(@data[id].party)
clear(id)
end
self
end
def clear(id = nil)
id ? @data[id] = nil : @data.clear
end
private
# 进入一条新路线时执行的内容
def init_route
$game_party = Game_Party.new
end
end
class Game_Interpreter
Route = Taroxd::Route
# 设置路线
def set_route(id)
return if $game_party.in_battle
command_221 # 淡出画面
Route.current.id = id
Fiber.yield while $game_player.transfer?
command_222 # 淡入画面
end
# 合并路线
def merge_route(id)
Route.current << id
$game_player.refresh
$game_map.need_refresh = true
end
end
class Game_Party < Game_Unit
# 合并金钱、角色、物品
def merge_party(other)
gold, actors, items, weapons, armors = other.merge_contents
gain_gold(gold)
@actors |= actors
merge_item @items, items, $data_items
merge_item @weapons, weapons, $data_weapons
merge_item @armors, armors, $data_armors
end
protected
def merge_contents
[@gold, @actors, @items, @weapons, @armors]
end
private
def merge_item(to, from, database)
to.merge!(from) do |id, v1, v2|
[v1 + v2, max_item_number(database[id])].min
end
end
end
|
|