- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 昨天 18:01 |
---|
签到天数: 114 天 连续签到: 4 天 [LV.6]常住居民II

管理员
  
- VIP
- 6
- 卡币
- 10622
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 13391


|
那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲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 endend复制代码
复制代码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
本帖来自P1论坛作者禾西,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=80909 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
|