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

Project1

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

[原创发布] 我們所處的是個一體兩面的世界!

 关闭 [复制链接]

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

跳转到指定楼层
1
发表于 2008-3-15 22:15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 后知后觉 于 2009-12-29 16:23 编辑

那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲n部分,最後也可以合幷起來。

  1. class Game_Party
  2.   attr_reader :world_id
  3.   VID = 0
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化对像
  6.   #--------------------------------------------------------------------------
  7.   alias ori_ini initialize
  8.   def initialize
  9.     @worlds = Array.new(2){[0,0,{},{},{}]}
  10.     @world_id = 1
  11.     ori_ini
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 世界之轉換 (n)
  15.   #     n        : 世界ID
  16.   #--------------------------------------------------------------------------
  17.   def world_transfer(n, sources = nil)
  18.     #------------------------------------------------------------------------
  19.     # ● 記錄現在所處的世界ID於變量當中
  20.     #------------------------------------------------------------------------
  21.     $game_varibles[VID] = n unless VID.zero?
  22.     #------------------------------------------------------------------------
  23.     # ● 記錄現在所處的世界的數據
  24.     #------------------------------------------------------------------------
  25.     @worlds[@world_id] = [@gold, @steps, @items, @weapons, @armors]
  26.     #------------------------------------------------------------------------
  27.     # ● 如果新世界沒有數據就創造新世界
  28.     #------------------------------------------------------------------------
  29.     world_create(n, sources) if (@worlds[n].nil? or sources != nil)
  30.     #------------------------------------------------------------------------
  31.     # ● 如果進入0世界就改寫0世界
  32.     #------------------------------------------------------------------------
  33.     world_create(n) if n.zero?
  34.     #------------------------------------------------------------------------
  35.     # ● 轉換世界ID
  36.     #------------------------------------------------------------------------
  37.     @world_id = n
  38.     #------------------------------------------------------------------------
  39.     # ● 讀取上次離開時的數據記錄
  40.     #------------------------------------------------------------------------
  41.     record = @worlds[@world_id]
  42.     #------------------------------------------------------------------------
  43.     # ● 轉換數據
  44.     #------------------------------------------------------------------------
  45.     @gold    = record[0]
  46.     @steps   = record[1]
  47.     @items   = record[2]
  48.     @weapons = record[3]
  49.     @armors  = record[4]
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 世界之創造與合幷 (n, sources)
  53.   #     n        : 新世界ID
  54.   #     sources  : 新世界的來源
  55.   #--------------------------------------------------------------------------
  56.   def world_create(n, sources = nil)
  57.     return if @worlds[n] != nil and (n != 0)
  58.     #------------------------------------------------------------------------
  59.     # ● 如果世界數量不足需求
  60.     #        則創造足够數量的新世界
  61.     #------------------------------------------------------------------------
  62.     @worlds[n] ||=[0,0,{},{},{}]
  63.     return if (sources.nil? and n > 0)
  64.     #------------------------------------------------------------------------
  65.     # ● 取得來源世界
  66.     #------------------------------------------------------------------------
  67.     data = []
  68.     sources.each {|x| data.push( @worlds[x] )} unless sources.nil?
  69.     data = @worlds if n.zero?
  70.     #------------------------------------------------------------------------
  71.     # ● 合幷來源數據
  72.     #------------------------------------------------------------------------
  73.     data.each do |each_world|
  74.       #------------------------------------------------------------------------
  75.       # ● 合幷金錢與步數
  76.       #------------------------------------------------------------------------
  77.       @worlds[n][0] =[[@worlds[n][0] + each_world[0], 0].max, 9999999].min
  78.       @worlds[n][1] =[[@worlds[n][1] + each_world[1], 0].max, 9999999].min
  79.       #------------------------------------------------------------------------
  80.       # ● 合幷物品與裝備
  81.       #------------------------------------------------------------------------
  82.       [2,3,4].each do |kind|
  83.         each_world[kind].each do |item_id, plus|
  84.           if @worlds[n][kind][item_id].nil?
  85.             basic = 0
  86.           else
  87.             basic= @worlds[n][kind][item_id]
  88.           end
  89.           next if (basic == 99)
  90.           @worlds[n][kind][item_id] = [[basic + plus, 0].max, 99].min
  91.         end
  92.       end
  93.     end
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 世界之複製 (n, m)
  97.   #     n          : 複製世界
  98.   #     m          : 原本世界
  99.   #--------------------------------------------------------------------------
  100.   def world_duplicate(n, m)
  101.     world_create(n, [m])
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 世界之分割 (n, fragment)
  105.   #     n          : 被分割的世界ID
  106.   #     fragment   : 分割後産生的碎片世界
  107.   #     fragment[0]: 偏愛世界
  108.   #--------------------------------------------------------------------------
  109.   def world_partition(n, fragment)
  110.     #------------------------------------------------------------------------
  111.     # ● 如果分割世界沒有數據就創造新世界
  112.     #------------------------------------------------------------------------
  113.     world_create(n) if @worlds[n].nil?
  114.     #------------------------------------------------------------------------
  115.     # ● 記錄偏愛世界
  116.     #------------------------------------------------------------------------
  117.     bias = fragment[0]
  118.     #------------------------------------------------------------------------
  119.     # ● 重新排列
  120.     #------------------------------------------------------------------------
  121.     fragment.sort!
  122.     biggest = fragment[(fragment.size - 1)]
  123.     size = fragment.size
  124.     #------------------------------------------------------------------------
  125.     # ● 如果碎片世界不足則創造
  126.     #------------------------------------------------------------------------
  127.     world_create(biggest) if @worlds[biggest].nil?
  128.     #------------------------------------------------------------------------
  129.     # ● 讀取現今世界數據
  130.     #------------------------------------------------------------------------
  131.     present = [@gold, @steps, @items, @weapons, @armors]
  132.     #------------------------------------------------------------------------
  133.     # ● 平均分割現今世界
  134.     #------------------------------------------------------------------------
  135.     fragment.each do |each_world|
  136.       #------------------------------------------------------------------------
  137.       # ● 平均分割金錢與步數
  138.       #------------------------------------------------------------------------
  139.       @worlds[each_world][0] = [[@worlds[each_world][0] + (present[0] / size).to_i ].max, 9999999].min
  140.       @worlds[each_world][1] = [[@worlds[each_world][1] + (present[1] / size).to_i ].max, 9999999].min
  141.       #------------------------------------------------------------------------
  142.       # ● 偏愛世界取得特殊補貼
  143.       #------------------------------------------------------------------------
  144.       if each_world == bias
  145.         @worlds[each_world][0] = [[@worlds[each_world][0] + (present[0] % size) ].max, 9999999].min
  146.         @worlds[each_world][1] = [[@worlds[each_world][1] + (present[1] % size) ].max, 9999999].min
  147.       end
  148.       #------------------------------------------------------------------------
  149.       # ● 平均物品與裝備
  150.       #------------------------------------------------------------------------
  151.       [2,3,4].each do |kind|
  152.         present[kind].each do |item_id, plus|
  153.           next if plus.nil?
  154.           basic = @worlds[each_world][kind][item_id]
  155.           next if (basic == 99)
  156.           @worlds[each_world][kind][item_id] = [[basic + (plus / size).to_i, 0].max, 99].min
  157.           #------------------------------------------------------------------------
  158.           # ● 偏愛世界取得特殊補貼
  159.           #------------------------------------------------------------------------
  160.           if each_world == bias
  161.             basic = @worlds[each_world][kind][item_id]
  162.             @worlds[each_world][kind][item_id] = [[basic + (plus % size), 0].max, 99].min
  163.           end
  164.         end
  165.       end
  166.     end
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 世界之轉嫁 (n, victims,destroy)
  170.   #     n        : 轉換的世界ID
  171.   #     victims  : 轉嫁的世界數組
  172.   #     destroy  : 是否毀滅當前世界?
  173.   #--------------------------------------------------------------------------
  174.   def world_shift(n, victims, destroy = false)
  175.     return if n == @world_id
  176.     #------------------------------------------------------------------------
  177.     # ● 記載當前數據及之前數據
  178.     #------------------------------------------------------------------------
  179.     now = @world_id
  180.     bias = victims[0]
  181.     size = victims.size
  182.     present = [@gold, @steps, @items, @weapons, @armors]
  183.     past = @worlds[@world_id]
  184.     #--------------------------------------------------------------------------
  185.     # ● 取得消耗值 discrepancy
  186.     #--------------------------------------------------------------------------
  187.     discrepancy = [0,0,{},{},{}]
  188.     discrepancy[0] = (present[0] - @worlds[@world_id][0])
  189.     discrepancy[1] = (present[1] - @worlds[@world_id][1])
  190.     [2,3,4].each do |kind|
  191.       present[kind].each do |item_id, value|
  192.         basic = @worlds[@world_id][kind][value]
  193.         discrepancy[kind] = value - (basic.nil? ? 0 : basic)
  194.       end
  195.     end
  196.     #--------------------------------------------------------------------------
  197.     # ● 轉嫁消耗 shift discrepancy
  198.     #--------------------------------------------------------------------------
  199.     victims.each do |each_world|
  200.       @worlds[each_world][0] = [[@worlds[each_world][0] + (discrepancy[0]/size).to_i, 0].max, 9999999].min
  201.       @worlds[each_world][1] = [[@worlds[each_world][1] + (discrepancy[1]/size).to_i, 0].max, 9999999].min
  202.       if each_world == bias
  203.         @worlds[each_world][0] = [[@worlds[each_world][0] + (discrepancy[0]%size), 0].max, 9999999].min
  204.         @worlds[each_world][1] = [[@worlds[each_world][1] + (discrepancy[1]%size), 0].max, 9999999].min
  205.       end
  206.       [2,3,4].each do |kind|
  207.         discrepancy.each do |itme_id, value|
  208.           next if value.nil?
  209.           basic = @worlds[each_world][kind][itme_id]
  210.           correction = (value / size).to_i
  211.           @worlds[each_world][kind][itme_id] = basic.nil? ? correction : [[basic + correction, 0].max, 99].min
  212.           @worlds[each_world][kind][itme_id] = [[basic + (correction%size), 0].max, 99].min if each_world == bias

  213.         end
  214.       end
  215.     end
  216.     #--------------------------------------------------------------------------
  217.     # ● 世界轉換
  218.     #--------------------------------------------------------------------------
  219.     world_transfer(n)
  220.     #--------------------------------------------------------------------------
  221.     # ● 現世界摧毀
  222.     #--------------------------------------------------------------------------
  223.     @worlds[now] = nil if destroy == true
  224.   end
  225. end
复制代码
Q1:世界的轉換調用方法是?
A.在事件的腳本選項中加入:
  1. $game_party.world_transfer(n)
复制代码
n是世界的ID,1就是第一個世界,2就是第二個世界……


Q2:如何合幷不同的世界
A1.合幷兩個世界
  1. $game_party.world_create(n,[n1,n2])
复制代码
n是合幷後創造出的新世界,n1,n2是需要合幷的世界

A2.合幷所有世界
  1. $game_party.world_transfer(0)
复制代码
召喚0之世界,所有東西闔一

A3.合幷加自動轉跳
  1. $game_party.world_transfer(n,[n1,n2])
复制代码
Q3:如何重新分割世界?
A.在事件的腳本選項中加入:
  1. $game_party.world_partition(n, ArrayFragment)
复制代码
n 是將要轉換到的世界。
fragment是分割出來的世界數組,數量將會是:
((分割世界的數值)/碎片數目)

當不能被整除的時候,排列第一的碎片世界會取得多出來餘數

Q4.返回來源世界的語句呢?
A.
  1. $game_party.world_shift(n, victims)
复制代码
n 是轉換到的世界,victims是需要承擔當前世界所産生的改變的世界數組。
此語句當中含有第三個隱藏參數destroy
當爲true時,當前世界在轉嫁變化完成以後被摧毀。

Q5:範例在哪里?
A;沒有,這麽簡單的修改就不要範例了。

Q6:有沒有衝突?
A:衝突?衝突?我只是重命名了個initialize都衝突?|||

Q7:可以取得現在處於的世界ID嗎?
A:可以幷有兩種辦法。
1.調用
$game_party.world_id

2.修改:
VID = 0

   然後在第?號變量當中直接讀取。

Q8:如果出錯怎麼辦?
回帖告訴作者。

PS。感謝神思,沉影不器,水晶凌,wy29等等~

修正記錄:
1.修改「合幷不能」錯誤於 April, 30 2008
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )

Lv1.梦旅人

梦石
0
星屑
64
在线时间
4352 小时
注册时间
2007-8-31
帖子
1982
2
发表于 2008-3-15 22:31:36 | 只看该作者
不错! 正需要这个,支持一下楼主!
我真是王小二过年,一年不如一年。目前正在寻找状态中,努力找回当初的动力!
“底蕴制作者”—asperta最新博客开通!以后将在这里更新制作进度报告!
我的作品官网:http://www.asperta.org/
ASPERTA世界论坛:http://bbs.asperta.org/


回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
3
发表于 2008-3-15 23:47:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2008-3-16 00:20:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-2-19
帖子
340
5
发表于 2008-3-16 00:34:30 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3263
在线时间
3616 小时
注册时间
2006-9-6
帖子
37399

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

6
发表于 2008-3-16 01:52:47 | 只看该作者
真是特殊的脚本……

也就是说进入另一个世界后所有的数据全部改变成新的?
如果已经去过那个世界,就提取上次的数据?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

7
 楼主| 发表于 2008-3-16 06:07:59 | 只看该作者
To:水晶凌
謝水晶……一時沒有留意 囧rz(複製粘貼用太多)
To:沉影不器
就是這麽廢柴的腳本……
To:越前リョーマ
被你看穿了{/hx}
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

8
 楼主| 发表于 2008-3-16 06:46:24 | 只看该作者
根據沉影所說的「好複雜」修改了代碼……
158行急跌到88行,再少好像就不行了?
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7946
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
9
发表于 2008-3-16 07:28:35 | 只看该作者
直接修改Window Item就行了,例如附带某属性的物品如果不在第二个世界,那就不显示,向反也一样。步数,金钱更简单,花两个变量就行了。这样加起来,改动的脚本应该不到20句吧,而且省事些。{/cy}
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

10
 楼主| 发表于 2008-3-16 07:32:26 | 只看该作者
LS……
那個,按照你說的同一樣東西怎麼分開兩半
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 06:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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