EB RPGVX 1.02原英文版預設腳本錯誤一舉及修復方法

EB RPGVX 1.02原英文版預設腳本錯誤一舉及修復方法(包含了部分VX1.01也具有的預設腳本錯誤)。

1 事件點指令執行條件設定為變數指定的時候當機

解決辦法:
打開預設腳本的Game_Intepreter腳本節,搜索actor = $game_actors[@parameters[1]]
替換為when 4 # 主角。總之必須有when 4 # 主角,同時必須刪除actor = $game_actors[@parameters[1]]

2 地圖動畫顯示錯誤(VX1.01也有)

將動畫的顯示指定給某個事件點的時候,動畫播放時會跟隨主角移動。

解決辦法:
使用這個外掛程式腳本(或者融合到預設腳本裡面也可以)

#==============================================================================
# @@ 針對 RPGVX 1.01/1.02 官方版本的單事件點動畫顯示時跟隨主角錯誤的修正腳本
#——————————————————————————
#  作者:詭異之貓
#  建議各位使用者將這個腳本和現有的範例專案進行融合。
#==============================================================================
#==============================================================================
# ** Sprite_Base
#——————————————————————————
#  一個具有處理動畫顯示功能的活動塊物設(精靈物設)。
#==============================================================================
class Sprite_Base < Sprite
    #————————————————————————–
    # * 設置動畫精靈物設
    #     frame : 幀數據(RPG::Animation::Frame)
    #————————————————————————–
    def animation_set_sprites(frame)
        cell_data = frame.cell_data
        for i in 0..15
            sprite = @animation_sprites
        next if sprite == nil
            pattern = cell_data[i, 0]
            if pattern == nil or pattern == -1
                sprite.visible = false
                next
            end
            if pattern < 100
                sprite.bitmap = @animation_bitmap1
            else
                sprite.bitmap = @animation_bitmap2
            end
            sprite.visible = true
            sprite.src_rect.set(pattern % 5 * 192, pattern % 100 / 5 * 192, 192, 192)
            position = @animation.position
            if position == 3
                if self.viewport != nil
                    sprite.x = self.viewport.rect.width / 2
                    sprite.y = self.viewport.rect.height / 2
                else
                    sprite.x = 272
                    sprite.y = 208
                end
            else
                sprite.x = self.x – self.ox + self.src_rect.width / 2
                sprite.y = self.y – self.oy + self.src_rect.height / 2
                sprite.y -= self.src_rect.height / 2 if position == 0
                sprite.y += self.src_rect.height / 2 if position == 2
            end
            if @animation_mirror
                sprite.x -= cell_data[i, 1]
                sprite.y += cell_data[i, 2]
                sprite.angle = (360 – cell_data[i, 4])
                sprite.mirror = (cell_data[i, 5] == 0)
            else
                sprite.x += cell_data[i, 1]
                sprite.y += cell_data[i, 2]
                sprite.angle = cell_data[i, 4]
                sprite.mirror = (cell_data[i, 5] == 1)
            end
            sprite.z = self.z + 300 + i
            sprite.ox = 96
            sprite.oy = 96
            sprite.zoom_x = cell_data[i, 3] / 100.0
            sprite.zoom_y = cell_data[i, 3] / 100.0
            sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
            sprite.blend_type = cell_data[i, 7]
        end
    end
    #————————————————————————–
    # * 動畫精靈物設所需橫座標數值的設定
    #————————————————————————–
    def x=(x)
        sx = x – self.x
        if sx != 0
            if @animation_sprites != nil
                for i in 0..15
                    @animation_sprites.x += sx
                end
            end
        end
        super
    end
    #————————————————————————–
    # * 動畫精靈物設所需縱座標數值的設定
    #————————————————————————–
    def y=(y)
        sy = y – self.y
        if sy != 0
            if @animation_sprites != nil
                for i in 0..15
                    @animation_sprites.y += sy
                end
            end
        end
        super
    end
end

3 迴圈地圖事件點方向判定錯誤(VX1.01也有)

在迴圈地圖迴圈超過一次以後訪問地圖上的事件點的時候就會發現事件點方向判定錯誤的臭蟲(不一定發生,而是有特殊限制條件,目前條件不明,只有詭異之貓知悉,但是他目前失蹤了)。

解決辦法:
使用這個外掛程式腳本(或者融合到預設腳本裡面也可以)

#==============================================================================
# @@ 針對 RPGVX 1.01/1.02 官方版本的迴圈地圖事件點方向判定錯誤的修正腳本
#——————————————————————————
#  作者:趙雲/詭異之貓
#  建議各位使用者將這個腳本和現有的範例專案進行融合。
#==============================================================================
#==============================================================================
# ** Game_Character
#——————————————————————————
#  這個類專門用來操控事件及主角玩家。
#  這個類作為 Game_Player 類和 Game_Event 類的父類使用。
#==============================================================================
class Game_Character
    #————————————————————————–
    # * 計算與主角的橫向距離
    #————————————————————————–
    def distance_x_from_player
        sx = @x – $game_player.x
        if $game_map.loop_horizontal?            # 橫向滾動地圖?
            if sx == 1 – $game_map.width
                sx += $game_map.width
            elsif sx.abs > $game_map.width / 2     # 大於地圖寬度的1/2?
                sx -= $game_map.width                # 減去地圖寬度
            end
        end
        return sx
    end
    #————————————————————————–
    # * 計算與主角的縱向距離
    #————————————————————————–
    def distance_y_from_player
        sy = @y – $game_player.y
        if $game_map.loop_vertical?              # 縱向滾動地圖?
            if sy == 1 – $game_map.height
                sy += $game_map.height
            elsif sy.abs > $game_map.height / 2    # 大於地圖高度的1/2?
                sy -= $game_map.height               # 減去地圖高度
            end
        end
        return sy
    end
end
#==============================================================================
# ** Game_Player
#——————————————————————————
#  這個類用來操控地圖,它所定義的內容包括決定事件執行的條件和地圖視域滾動功能。
#  這個類的實例被全域變數 $game_map 所引用。
#==============================================================================
class Game_Player < Game_Character
    #————————————————————————–
    # * 判定一觸即發的事件是否被觸發
    #     x : 地圖X座標
    #     y : 地圖Y座標
    #————————————————————————–
    def check_event_trigger_touch(x, y)
        x -=  $game_map.width if $game_map.loop_horizontal? and x == $game_map.width
        y -=  $game_map.height if $game_map.loop_vertical? and y == $game_map.height
        return false if $game_map.interpreter.running?
        result = false
        for event in $game_map.events_xy(x, y)
            if [1,2].include?(event.trigger) and event.priority_type == 1
                event.start
                result = true
            end
        end
        return result
    end
end

4 切換交通工具後背景音樂同步錯誤(VX1.01也有)

如果你乘坐交通工具後切換了地圖,再登下交通工具,背景音樂仍然是上一張地圖的背景音樂而非當前地圖的背景音樂。

解決辦法:
使用這個外掛程式腳本(或者融合到預設腳本裡面也可以)

#==============================================================================
# @@ 針對 RPGVX 1.01/1.02 官方版本的切換交通工具後背景音樂同步錯誤的修正腳本
#——————————————————————————
#  作者:趙雲/ZH99998
#  各位使用者最好將這個腳本和現有的範例專案進行融合。
#==============================================================================
#==============================================================================
# ** Game_Map
#——————————————————————————
#  這個類用來操控地圖,包含了地圖滾動設置和通行度判定等資訊。
#  這個類的實例被全域變數 $game_map 所引用。
#==============================================================================
class Game_Map
    #————————————————————————–
    # * 宣告執行個體變數
    #————————————————————————–
    attr_accessor :map                      # 用於辨識地圖的標幟
    #————————————————————————–
    # * 自動切換BGM/BGS
    #————————————————————————–
    def autoplay
        @map.bgm.play if @map.autoplay_bgm unless $game_player.in_vehicle?
        @map.bgs.play if @map.autoplay_bgs
    end
end
#==============================================================================
# ** Game_Player
#——————————————————————————
#  這個類用來操控地圖,它所定義的內容包括決定事件執行的條件和地圖視域滾動功能。
#  這個類的實例被全域變數 $game_map 所引用。
#==============================================================================

class Game_Player < Game_Character
    #————————————————————————–
    # * 執行場所移動指令
    #————————————————————————–
    def perform_transfer
        return unless @transferring
        @transferring = false
        set_direction(@new_direction)
        if $game_map.map_id != @new_map_id
            $game_map.setup(@new_map_id)     # 移動到其他地圖
        end
        moveto(@new_x, @new_y)
        @walking_bgm = $game_map.map.bgm
    end
end

5 變數運算的賦值錯誤

用事件使變數乘以數值後會變成把數值賦值給變數的嚴重錯誤
解決辦法:
檢查預設腳本的Game_Intepreter節,搜索832-853行:

for i in @params[0] .. @params[1]   # 批量控制
    case @params[2]  # 操作
        when 0  # 代入
            $game_variables[i] = value
        when 1  # 加
            $game_variables[i] += value
        when 2  # 減
            $game_variables[i] -= value
        when 3  # 乘
            $game_variables[i] *= value
        when 4  # 除
            $game_variables[i] /= value if value != 0
        when 5  # 取模運算
            $game_variables[i] %= value if value != 0
    end
    if $game_variables[i] > 99999999    # 檢查上限
        $game_variables[i] = 99999999
    end
    if $game_variables[i] < -99999999   # 檢查下限
        $game_variables[i] = -99999999
    end
end

注意這一句(在when 3的下一行,而不是之前的行):
$game_variables *= value
英文原版漏掉了「*」號,補上即可。

補充說明:RPGVX1.00不在討論範圍內,也就是說關於地圖動畫的那個補丁用於VX日文零售版系列必須掛上VX_SP1腳本(而且請置於臭蟲修復腳本之前,如果要融合的話請先融合這個腳本再融合臭蟲修復腳本)。
http://tkool.jp/support/download/rpgvx/rpgvx_update.html

$ EOF.