赞 | 0 |
VIP | 10 |
好人卡 | 49 |
积分 | 10 |
经验 | 22958 |
最后登录 | 2020-8-1 |
在线时间 | 2161 小时 |
Lv3.寻梦者 酱油的
- 梦石
- 0
- 星屑
- 1030
- 在线时间
- 2161 小时
- 注册时间
- 2007-12-22
- 帖子
- 3271
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 后知后觉 于 2009-12-29 16:23 编辑
那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲n部分,最後也可以合幷起來。
- class Game_Party
- attr_reader :world_id
- VID = 0
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- alias ori_ini initialize
- def initialize
- @worlds = Array.new(2){[0,0,{},{},{}]}
- @world_id = 1
- ori_ini
- end
- #--------------------------------------------------------------------------
- # ● 世界之轉換 (n)
- # n : 世界ID
- #--------------------------------------------------------------------------
- def world_transfer(n, sources = nil)
- #------------------------------------------------------------------------
- # ● 記錄現在所處的世界ID於變量當中
- #------------------------------------------------------------------------
- $game_varibles[VID] = n unless VID.zero?
- #------------------------------------------------------------------------
- # ● 記錄現在所處的世界的數據
- #------------------------------------------------------------------------
- @worlds[@world_id] = [@gold, @steps, @items, @weapons, @armors]
- #------------------------------------------------------------------------
- # ● 如果新世界沒有數據就創造新世界
- #------------------------------------------------------------------------
- world_create(n, sources) if (@worlds[n].nil? or sources != nil)
- #------------------------------------------------------------------------
- # ● 如果進入0世界就改寫0世界
- #------------------------------------------------------------------------
- world_create(n) if n.zero?
- #------------------------------------------------------------------------
- # ● 轉換世界ID
- #------------------------------------------------------------------------
- @world_id = n
- #------------------------------------------------------------------------
- # ● 讀取上次離開時的數據記錄
- #------------------------------------------------------------------------
- record = @worlds[@world_id]
- #------------------------------------------------------------------------
- # ● 轉換數據
- #------------------------------------------------------------------------
- @gold = record[0]
- @steps = record[1]
- @items = record[2]
- @weapons = record[3]
- @armors = record[4]
- end
- #--------------------------------------------------------------------------
- # ● 世界之創造與合幷 (n, sources)
- # n : 新世界ID
- # sources : 新世界的來源
- #--------------------------------------------------------------------------
- def world_create(n, sources = nil)
- return if @worlds[n] != nil and (n != 0)
- #------------------------------------------------------------------------
- # ● 如果世界數量不足需求
- # 則創造足够數量的新世界
- #------------------------------------------------------------------------
- @worlds[n] ||=[0,0,{},{},{}]
- return if (sources.nil? and n > 0)
- #------------------------------------------------------------------------
- # ● 取得來源世界
- #------------------------------------------------------------------------
- data = []
- sources.each {|x| data.push( @worlds[x] )} unless sources.nil?
- data = @worlds if n.zero?
- #------------------------------------------------------------------------
- # ● 合幷來源數據
- #------------------------------------------------------------------------
- data.each do |each_world|
- #------------------------------------------------------------------------
- # ● 合幷金錢與步數
- #------------------------------------------------------------------------
- @worlds[n][0] =[[@worlds[n][0] + each_world[0], 0].max, 9999999].min
- @worlds[n][1] =[[@worlds[n][1] + each_world[1], 0].max, 9999999].min
- #------------------------------------------------------------------------
- # ● 合幷物品與裝備
- #------------------------------------------------------------------------
- [2,3,4].each do |kind|
- each_world[kind].each do |item_id, plus|
- if @worlds[n][kind][item_id].nil?
- basic = 0
- else
- basic= @worlds[n][kind][item_id]
- end
- next if (basic == 99)
- @worlds[n][kind][item_id] = [[basic + plus, 0].max, 99].min
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 世界之複製 (n, m)
- # n : 複製世界
- # m : 原本世界
- #--------------------------------------------------------------------------
- def world_duplicate(n, m)
- world_create(n, [m])
- end
- #--------------------------------------------------------------------------
- # ● 世界之分割 (n, fragment)
- # n : 被分割的世界ID
- # fragment : 分割後産生的碎片世界
- # fragment[0]: 偏愛世界
- #--------------------------------------------------------------------------
- def world_partition(n, fragment)
- #------------------------------------------------------------------------
- # ● 如果分割世界沒有數據就創造新世界
- #------------------------------------------------------------------------
- world_create(n) if @worlds[n].nil?
- #------------------------------------------------------------------------
- # ● 記錄偏愛世界
- #------------------------------------------------------------------------
- bias = fragment[0]
- #------------------------------------------------------------------------
- # ● 重新排列
- #------------------------------------------------------------------------
- fragment.sort!
- biggest = fragment[(fragment.size - 1)]
- size = fragment.size
- #------------------------------------------------------------------------
- # ● 如果碎片世界不足則創造
- #------------------------------------------------------------------------
- world_create(biggest) if @worlds[biggest].nil?
- #------------------------------------------------------------------------
- # ● 讀取現今世界數據
- #------------------------------------------------------------------------
- present = [@gold, @steps, @items, @weapons, @armors]
- #------------------------------------------------------------------------
- # ● 平均分割現今世界
- #------------------------------------------------------------------------
- fragment.each do |each_world|
- #------------------------------------------------------------------------
- # ● 平均分割金錢與步數
- #------------------------------------------------------------------------
- @worlds[each_world][0] = [[@worlds[each_world][0] + (present[0] / size).to_i ].max, 9999999].min
- @worlds[each_world][1] = [[@worlds[each_world][1] + (present[1] / size).to_i ].max, 9999999].min
- #------------------------------------------------------------------------
- # ● 偏愛世界取得特殊補貼
- #------------------------------------------------------------------------
- if each_world == bias
- @worlds[each_world][0] = [[@worlds[each_world][0] + (present[0] % size) ].max, 9999999].min
- @worlds[each_world][1] = [[@worlds[each_world][1] + (present[1] % size) ].max, 9999999].min
- end
- #------------------------------------------------------------------------
- # ● 平均物品與裝備
- #------------------------------------------------------------------------
- [2,3,4].each do |kind|
- present[kind].each do |item_id, plus|
- next if plus.nil?
- basic = @worlds[each_world][kind][item_id]
- next if (basic == 99)
- @worlds[each_world][kind][item_id] = [[basic + (plus / size).to_i, 0].max, 99].min
- #------------------------------------------------------------------------
- # ● 偏愛世界取得特殊補貼
- #------------------------------------------------------------------------
- if each_world == bias
- basic = @worlds[each_world][kind][item_id]
- @worlds[each_world][kind][item_id] = [[basic + (plus % size), 0].max, 99].min
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 世界之轉嫁 (n, victims,destroy)
- # n : 轉換的世界ID
- # victims : 轉嫁的世界數組
- # destroy : 是否毀滅當前世界?
- #--------------------------------------------------------------------------
- def world_shift(n, victims, destroy = false)
- return if n == @world_id
- #------------------------------------------------------------------------
- # ● 記載當前數據及之前數據
- #------------------------------------------------------------------------
- now = @world_id
- bias = victims[0]
- size = victims.size
- present = [@gold, @steps, @items, @weapons, @armors]
- past = @worlds[@world_id]
- #--------------------------------------------------------------------------
- # ● 取得消耗值 discrepancy
- #--------------------------------------------------------------------------
- discrepancy = [0,0,{},{},{}]
- discrepancy[0] = (present[0] - @worlds[@world_id][0])
- discrepancy[1] = (present[1] - @worlds[@world_id][1])
- [2,3,4].each do |kind|
- present[kind].each do |item_id, value|
- basic = @worlds[@world_id][kind][value]
- discrepancy[kind] = value - (basic.nil? ? 0 : basic)
- end
- end
- #--------------------------------------------------------------------------
- # ● 轉嫁消耗 shift discrepancy
- #--------------------------------------------------------------------------
- victims.each do |each_world|
- @worlds[each_world][0] = [[@worlds[each_world][0] + (discrepancy[0]/size).to_i, 0].max, 9999999].min
- @worlds[each_world][1] = [[@worlds[each_world][1] + (discrepancy[1]/size).to_i, 0].max, 9999999].min
- if each_world == bias
- @worlds[each_world][0] = [[@worlds[each_world][0] + (discrepancy[0]%size), 0].max, 9999999].min
- @worlds[each_world][1] = [[@worlds[each_world][1] + (discrepancy[1]%size), 0].max, 9999999].min
- end
- [2,3,4].each do |kind|
- discrepancy.each do |itme_id, value|
- next if value.nil?
- basic = @worlds[each_world][kind][itme_id]
- correction = (value / size).to_i
- @worlds[each_world][kind][itme_id] = basic.nil? ? correction : [[basic + correction, 0].max, 99].min
- @worlds[each_world][kind][itme_id] = [[basic + (correction%size), 0].max, 99].min if each_world == bias
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 世界轉換
- #--------------------------------------------------------------------------
- world_transfer(n)
- #--------------------------------------------------------------------------
- # ● 現世界摧毀
- #--------------------------------------------------------------------------
- @worlds[now] = nil if destroy == true
- end
- end
复制代码 Q1:世界的轉換調用方法是?
A.在事件的腳本選項中加入:- $game_party.world_transfer(n)
复制代码 n是世界的ID,1就是第一個世界,2就是第二個世界……
Q2:如何合幷不同的世界
A1.合幷兩個世界- $game_party.world_create(n,[n1,n2])
复制代码 n是合幷後創造出的新世界,n1,n2是需要合幷的世界
A2.合幷所有世界- $game_party.world_transfer(0)
复制代码 召喚0之世界,所有東西闔一
A3.合幷加自動轉跳- $game_party.world_transfer(n,[n1,n2])
复制代码 Q3:如何重新分割世界?
A.在事件的腳本選項中加入:- $game_party.world_partition(n, ArrayFragment)
复制代码 n 是將要轉換到的世界。
fragment是分割出來的世界數組,數量將會是:
當不能被整除的時候,排列第一的碎片世界會取得多出來餘數
Q4.返回來源世界的語句呢?
A.- $game_party.world_shift(n, victims)
复制代码 n 是轉換到的世界,victims是需要承擔當前世界所産生的改變的世界數組。
此語句當中含有第三個隱藏參數destroy
當爲true時,當前世界在轉嫁變化完成以後被摧毀。
Q5:範例在哪里?
A;沒有,這麽簡單的修改就不要範例了。
Q6:有沒有衝突?
A:衝突?衝突?我只是重命名了個initialize都衝突?|||
Q7:可以取得現在處於的世界ID嗎?
A:可以幷有兩種辦法。
1.調用
2.修改:
然後在第?號變量當中直接讀取。
Q8:如果出錯怎麼辦?
回帖告訴作者。
PS。感謝神思,沉影不器,水晶凌,wy29等等~
修正記錄:
1.修改「合幷不能」錯誤於 April, 30 2008 |
|