扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 132|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

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

    灌水之王

    发表于 2024-4-19 15:59:54 | 显示全部楼层 |阅读模式
    那個,在提問區回答問題的時候順手做出來了。作用是把身上的所有物品,金錢,步數都分開爲n部分,最後也可以合幷起來。
    1. 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.在事件的腳本選項中加入:
    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
                本帖来自P1论坛作者禾西,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=80909  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:10 , Processed in 0.130281 second(s), 58 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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