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

Project1

 找回密码
 注册会员
搜索
查看: 3043|回复: 2
打印 上一主题 下一主题

[RMVA发布] 多路线系统

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2014-9-27 08:41:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2014-10-1 07:36 编辑


主要是用事件指令来调用的。有空再写注释吧。
可以实现游戏在多条路线中切换的效果

RUBY 代码复制
  1. #----------------------------------------------------------------------------
  2. # ● 使用方法:事件脚本,见 Game_Interpreter 部分。
  3. #----------------------------------------------------------------------------
  4.  
  5. module Taroxd end
  6.  
  7. module Taroxd::Route
  8.   #--------------------------------------------------------------------------
  9.   # ● 设置路线
  10.   #--------------------------------------------------------------------------
  11.   def set_route
  12.     current_route[route_type] = make_route
  13.     restore_route(current_route[route_type])
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 清除路线
  17.   #--------------------------------------------------------------------------
  18.   def clear_route(id = nil)
  19.     current_route.clear(id)
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取当前的路线
  23.   #--------------------------------------------------------------------------
  24.   def current_route
  25.     $game_party.current_route
  26.   end
  27.  
  28.   class Routes
  29.     #------------------------------------------------------------------------
  30.     # ● 初始化
  31.     #------------------------------------------------------------------------
  32.     def initialize
  33.       @id = @last_id = 0
  34.       @routes = []
  35.     end
  36.     #------------------------------------------------------------------------
  37.     # ● 切换路线
  38.     #------------------------------------------------------------------------
  39.     def id=(id)
  40.       @last_id = @id
  41.       @id = id
  42.     end
  43.     #------------------------------------------------------------------------
  44.     # ● 清除路线
  45.     #------------------------------------------------------------------------
  46.     def clear(id = nil)
  47.       if id
  48.         @routes[id] = nil
  49.       else
  50.         @routes.clear
  51.       end
  52.     end
  53.     #------------------------------------------------------------------------
  54.     # ● 获取路线
  55.     #------------------------------------------------------------------------
  56.     def route(id)
  57.       @routes[id] ||= {}
  58.     end
  59.     #------------------------------------------------------------------------
  60.     # ● 保存上次路线数据
  61.     #------------------------------------------------------------------------
  62.     def []=(type, data)
  63.       route(@last_id)[type] = data
  64.     end
  65.     #------------------------------------------------------------------------
  66.     # ● 获取当前路线数据
  67.     #------------------------------------------------------------------------
  68.     def [](type)
  69.       route(@id)[type]
  70.     end
  71.   end
  72. end
  73.  
  74. class Game_Interpreter
  75.   include Taroxd::Route
  76.   #--------------------------------------------------------------------------
  77.   # ● 设置路线
  78.   #    suspend:自动淡入淡出,并保存当前事件状态
  79.   #--------------------------------------------------------------------------
  80.   def set_route(id, suspend = true)
  81.     return if $game_party.in_battle
  82.     command_221 if suspend            # 淡出画面
  83.     current_route.id = id
  84.     $game_party.set_route
  85.     $game_player.set_route
  86.     $game_player.refresh
  87.     $game_map.need_refresh = true
  88.     Fiber.yield while $game_player.transfer?
  89.     return unless suspend
  90.     command_222                       # 淡入画面
  91.     $game_map.set_route
  92.     Fiber.yield
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 合并路线
  96.   #--------------------------------------------------------------------------
  97.   def merge_route(id)
  98.     $game_party.merge_route(id)
  99.     $game_player.refresh
  100.     $game_map.need_refresh = true
  101.     clear_route(id)
  102.   end
  103. end
  104.  
  105. class Game_Map
  106.   include Taroxd::Route
  107.   #--------------------------------------------------------------------------
  108.   # ● 路线类型
  109.   #--------------------------------------------------------------------------
  110.   def route_type
  111.     :interpreter
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 路线数据
  115.   #--------------------------------------------------------------------------
  116.   def make_route
  117.     interpreter = @interpreter
  118.     @interpreter = Game_Interpreter.new
  119.     interpreter
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 恢复路线数据
  123.   #--------------------------------------------------------------------------
  124.   def restore_route(data)
  125.     @interpreter = data if data
  126.   end
  127. end
  128.  
  129. class Game_Player
  130.   include Taroxd::Route
  131.   #--------------------------------------------------------------------------
  132.   # ● 路线类型
  133.   #--------------------------------------------------------------------------
  134.   def route_type
  135.     :position
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 路线数据
  139.   #--------------------------------------------------------------------------
  140.   def make_route
  141.     [$game_map.map_id, x, y, direction]
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 恢复路线数据
  145.   #--------------------------------------------------------------------------
  146.   def restore_route(data)
  147.     return unless data
  148.     reserve_transfer(*data)
  149.     refresh
  150.   end
  151. end
  152.  
  153. class Game_Party < Game_Unit
  154.   include Taroxd::Route
  155.   #--------------------------------------------------------------------------
  156.   # ● 存储当前路线(存档用)
  157.   #--------------------------------------------------------------------------
  158.   attr_reader :current_route
  159.   alias init_20141001 initialize
  160.   def initialize
  161.     init_20141001
  162.     @current_route = Routes.new
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 路线类型
  166.   #--------------------------------------------------------------------------
  167.   def route_type
  168.     :party
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 路线数据
  172.   #--------------------------------------------------------------------------
  173.   def make_route
  174.     [@gold, @actors, @items, @weapons, @armors]
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 恢复路线数据
  178.   #--------------------------------------------------------------------------
  179.   def restore_route(data)
  180.     if data
  181.       @gold, @actors, @items, @weapons, @armors = data
  182.     else
  183.       @gold = 0
  184.       @actors = []
  185.       init_all_items
  186.     end
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 合并路线
  190.   #--------------------------------------------------------------------------
  191.   def merge_route(id)
  192.     data = current_route.route(id)[route_type]
  193.     return unless data
  194.     gold, actors, items, weapons, armors = data
  195.     gain_gold(gold)
  196.     @actors |= actors
  197.     merge_item @items,   items,   $data_items
  198.     merge_item @weapons, weapons, $data_weapons
  199.     merge_item @armors,  armors,  $data_armors
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 合并物品
  203.   #--------------------------------------------------------------------------
  204.   def merge_item(to, from, database)
  205.     to.merge!(from) do |id, v1, v2|
  206.       [v1 + v2, max_item_number(database[id])].min
  207.     end
  208.   end
  209. end

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

3
发表于 2014-9-27 19:39:26 | 只看该作者
公共事件: 说得好有道理,我竟无言以对

点评

其实整个脚本唯一有用的地方就是叫停事件,并且随时恢复  发表于 2014-9-27 19:44
只靠公共事件很难把事件“暂停”,并在之后“复原”的吧。而且我说了这玩意儿事件也能做  发表于 2014-9-27 19:41

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
 楼主| 发表于 2014-9-27 12:09:31 | 只看该作者
本帖最后由 taroxd 于 2014-10-1 07:37 编辑


整合了两个脚本的功能。反正之前的也没什么用,就占这个地方发了吧。

点评

没有范例···  发表于 2014-10-2 18:04
范例在哪里内。  发表于 2014-10-2 07:17
↓↓↓↓那真是太好了!  发表于 2014-10-1 10:33
↓↓↓那真是太好了!  发表于 2014-9-27 21:31
↓↓那真是太好了!   发表于 2014-9-27 20:54
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 19:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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