我們所處的是個一體兩面的世界!
那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲n部分,最後也可以合幷起來。class Game_Partyattr_reader :world_idVID = 0#--------------------------------------------------------------------------# ● 初始化对像#--------------------------------------------------------------------------alias ori_ini initializedef initialize @worlds = Array.new(2){} @world_id = 1 ori_iniend#--------------------------------------------------------------------------# ● 世界之轉換 (n)# n : 世界ID#--------------------------------------------------------------------------def world_transfer(n, sources = nil) #------------------------------------------------------------------------ # ● 記錄現在所處的世界ID於變量當中 #------------------------------------------------------------------------ $game_varibles = n unless VID.zero? #------------------------------------------------------------------------ # ● 記錄現在所處的世界的數據 #------------------------------------------------------------------------ @worlds[@world_id] = [@gold, @steps, @items, @weapons, @armors] #------------------------------------------------------------------------ # ● 如果新世界沒有數據就創造新世界 #------------------------------------------------------------------------ world_create(n, sources) if (@worlds.nil? or sources != nil) #------------------------------------------------------------------------ # ● 如果進入0世界就改寫0世界 #------------------------------------------------------------------------ world_create(n) if n.zero? #------------------------------------------------------------------------ # ● 轉換世界ID #------------------------------------------------------------------------ @world_id = n #------------------------------------------------------------------------ # ● 讀取上次離開時的數據記錄 #------------------------------------------------------------------------ record = @worlds[@world_id] #------------------------------------------------------------------------ # ● 轉換數據 #------------------------------------------------------------------------ @gold = record @steps = record @items = record @weapons = record @armors= recordend#--------------------------------------------------------------------------# ● 世界之創造與合幷 (n, sources)# n : 新世界ID# sources: 新世界的來源#--------------------------------------------------------------------------def world_create(n, sources = nil) return if @worlds != nil and (n != 0) #------------------------------------------------------------------------ # ● 如果世界數量不足需求 # 則創造足够數量的新世界 #------------------------------------------------------------------------ @worlds ||= return if (sources.nil? and n > 0) #------------------------------------------------------------------------ # ● 取得來源世界 #------------------------------------------------------------------------ data = [] sources.each {|x| data.push( @worlds )} unless sources.nil? data = @worlds if n.zero? #------------------------------------------------------------------------ # ● 合幷來源數據 #------------------------------------------------------------------------ data.each do |each_world| #------------------------------------------------------------------------ # ● 合幷金錢與步數 #------------------------------------------------------------------------ @worlds =[[@worlds + each_world, 0].max, 9999999].min @worlds =[[@worlds + each_world, 0].max, 9999999].min #------------------------------------------------------------------------ # ● 合幷物品與裝備 #------------------------------------------------------------------------ .each do |kind| each_world.each do |item_id, plus| if @worlds.nil? basic = 0 else basic= @worlds end next if (basic == 99) @worlds = [.max, 99].min end end endend#--------------------------------------------------------------------------# ● 世界之複製 (n, m)# n : 複製世界# m : 原本世界#--------------------------------------------------------------------------def world_duplicate(n, m) world_create(n, )end#--------------------------------------------------------------------------# ● 世界之分割 (n, fragment)# n : 被分割的世界ID# fragment : 分割後産生的碎片世界# fragment: 偏愛世界#--------------------------------------------------------------------------def world_partition(n, fragment) #------------------------------------------------------------------------ # ● 如果分割世界沒有數據就創造新世界 #------------------------------------------------------------------------ world_create(n) if @worlds.nil? #------------------------------------------------------------------------ # ● 記錄偏愛世界 #------------------------------------------------------------------------ bias = fragment #------------------------------------------------------------------------ # ● 重新排列 #------------------------------------------------------------------------ fragment.sort! biggest = fragment[(fragment.size - 1)] size = fragment.size #------------------------------------------------------------------------ # ● 如果碎片世界不足則創造 #------------------------------------------------------------------------ world_create(biggest) if @worlds.nil? #------------------------------------------------------------------------ # ● 讀取現今世界數據 #------------------------------------------------------------------------ present = [@gold, @steps, @items, @weapons, @armors] #------------------------------------------------------------------------ # ● 平均分割現今世界 #------------------------------------------------------------------------ fragment.each do |each_world| #------------------------------------------------------------------------ # ● 平均分割金錢與步數 #------------------------------------------------------------------------ @worlds = [[@worlds + (present / size).to_i ].max, 9999999].min @worlds = [[@worlds + (present / size).to_i ].max, 9999999].min #------------------------------------------------------------------------ # ● 偏愛世界取得特殊補貼 #------------------------------------------------------------------------ if each_world == bias @worlds = [[@worlds + (present % size) ].max, 9999999].min @worlds = [[@worlds + (present % size) ].max, 9999999].min end #------------------------------------------------------------------------ # ● 平均物品與裝備 #------------------------------------------------------------------------ .each do |kind| present.each do |item_id, plus| next if plus.nil? basic = @worlds next if (basic == 99) @worlds = [.max, 99].min #------------------------------------------------------------------------ # ● 偏愛世界取得特殊補貼 #------------------------------------------------------------------------ if each_world == bias basic = @worlds @worlds = [.max, 99].min end end end endend#--------------------------------------------------------------------------# ● 世界之轉嫁 (n, victims,destroy)# n : 轉換的世界ID# victims: 轉嫁的世界數組# destroy: 是否毀滅當前世界?#--------------------------------------------------------------------------def world_shift(n, victims, destroy = false) return if n == @world_id #------------------------------------------------------------------------ # ● 記載當前數據及之前數據 #------------------------------------------------------------------------ now = @world_id bias = victims size = victims.size present = [@gold, @steps, @items, @weapons, @armors] past = @worlds[@world_id] #-------------------------------------------------------------------------- # ● 取得消耗值 discrepancy #-------------------------------------------------------------------------- discrepancy = discrepancy = (present - @worlds[@world_id]) discrepancy = (present - @worlds[@world_id]) .each do |kind| present.each do |item_id, value| basic = @worlds[@world_id] discrepancy = value - (basic.nil? ? 0 : basic) end end #-------------------------------------------------------------------------- # ● 轉嫁消耗 shift discrepancy #-------------------------------------------------------------------------- victims.each do |each_world| @worlds = [[@worlds + (discrepancy/size).to_i, 0].max, 9999999].min @worlds = [[@worlds + (discrepancy/size).to_i, 0].max, 9999999].min if each_world == bias @worlds = [[@worlds + (discrepancy%size), 0].max, 9999999].min @worlds = [[@worlds + (discrepancy%size), 0].max, 9999999].min end .each do |kind| discrepancy.each do |itme_id, value| next if value.nil? basic = @worlds correction = (value / size).to_i @worlds = basic.nil? ? correction : [.max, 99].min @worlds = [.max, 99].min if each_world == bias end end end #-------------------------------------------------------------------------- # ● 世界轉換 #-------------------------------------------------------------------------- world_transfer(n) #-------------------------------------------------------------------------- # ● 現世界摧毀 #-------------------------------------------------------------------------- @worlds = nil if destroy == trueendend复制代码Q1:世界的轉換調用方法是?A.在事件的腳本選項中加入:$game_party.world_transfer(n)复制代码n是世界的ID,1就是第一個世界,2就是第二個世界……
Q2:如何合幷不同的世界
A1.合幷兩個世界$game_party.world_create(n,)复制代码n是合幷後創造出的新世界,n1,n2是需要合幷的世界
A2.合幷所有世界$game_party.world_transfer(0)复制代码召喚0之世界,所有東西闔一
A3.合幷加自動轉跳$game_party.world_transfer(n,)复制代码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.調用$game_party.world_id
2.修改:VID = 0
然後在第?號變量當中直接讀取。
Q8:如果出錯怎麼辦?
回帖告訴作者。
PS。感謝神思,沉影不器,水晶凌,wy29等等~
修正記錄:
1.修改「合幷不能」錯誤於 April, 30 2008
本帖来自P1论坛作者禾西,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=80909若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]