じ☆ve冰风 发表于 2024-4-19 15:59:54

我們所處的是個一體兩面的世界!

那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲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]
查看完整版本: 我們所處的是個一體兩面的世界!