赞 | 3 |
VIP | 41 |
好人卡 | 31 |
积分 | 1 |
经验 | 41211 |
最后登录 | 2018-1-3 |
在线时间 | 312 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 70
- 在线时间
- 312 小时
- 注册时间
- 2011-6-27
- 帖子
- 1316
|
最近在使用ZTBS战棋脚本制作游戏的时候遇到了个问题。
之前都很正常,到152号地图后就出现了进入战斗出错的问题,但是之前却没有出现这个问题。
后来重新开始新游戏,通过传送直接进入那张战斗地图却能正常运行;本以为是开关或是变量出错,关掉所有开关和所有变量归零后再读档进入按流程进入或直接进入却还是出错。出错提示如下:
附录出错脚本:- #==============================================================================
- # [ZTBS] -Zenith Tactical Battle System- タクティカルバトルシステム
- # ~1:ZTBS用 基本設定強化~ by 水夜
- # ver1.00 Zenith Creation (http://zenith.ifdef.jp/)
- #------------------------------------------------------------------------------
- # マップ上での戦略的なバトルを実現。
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数 Game_Systemに記録することでセーブに対応
- #--------------------------------------------------------------------------
- attr_accessor :in_tactics # タクティクス中フラグ
- attr_accessor :tactics_turn # ターン
- attr_accessor :tactics_phase # フェーズ
- attr_accessor :tactics_step # ステップ
- attr_accessor :tactics_setup # セットアップフラグ
- attr_accessor :tactics_actors # アクター
- attr_accessor :tactics_dead_actors # 戦闘不能アクター
- attr_accessor :tactics_enemies # エネミー
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ztbs_initialize initialize
- def initialize
- # 呼び戻す
- ztbs_initialize
- @in_tactics = false
- @tactics_turn = 0
- @tactics_phase = 0
- @tactics_step = 0
- @tactics_setup = false
- @tactics_actors = {}
- @tactics_dead_actors = {}
- @tactics_enemies = {}
- end
- end
- class Game_Party
- #--------------------------------------------------------------------------
- # ● アイテムの使用可能判定
- #--------------------------------------------------------------------------
- alias ztbs_item_can_use? item_can_use?
- def item_can_use?(item_id)
- if $game_system.in_tactics
- # アイテムの個数が 0 個の場合
- if item_number(item_id) == 0
- # 使用不能
- return false
- end
- # 戦闘不能者がいない場合は戦闘不能回復を使用不可に
- if [5, 6].include?($data_items[item_id].scope) and
- $game_system.tactics_dead_actors.size == 0
- return false
- end
- return true
- else
- # 呼び戻す
- ztbs_item_can_use?(item_id)
- end
- end
- end
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 移動可能距離の取得
- #--------------------------------------------------------------------------
- def movable
- n = agi / ZTBS::C_MOVABLE
- n = [[Integer(n), 1].max, ZTBS::MOVABLE_MAX].min
- return n
- end
- #--------------------------------------------------------------------------
- # ● スキルの使用可能判定
- #--------------------------------------------------------------------------
- alias ztbs_skill_can_use? skill_can_use?
- def skill_can_use?(skill_id)
- if $game_system.in_tactics
- # タクティカルスキルではない場合は使用不可
- if !$data_skills[skill_id].tactical?
- return false
- end
- # SP が足りない場合は使用不可
- if $data_skills[skill_id].sp_cost > self.sp
- return false
- end
- # 戦闘不能者がいない場合は戦闘不能回復を使用不可に
- if [5, 6].include?($data_skills[skill_id].scope)
- if self.is_a?(Game_Actor)
- return false if $game_system.tactics_dead_actors.size == 0
- else
- return false
- end
- end
- # 戦闘不能の場合は使用不可
- if dead?
- return false
- end
- # 沈黙状態の場合、物理スキル以外は使用不可
- if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
- return false
- end
- return true
- else
- # 呼び戻す
- ztbs_skill_can_use?(skill_id)
- end
- end
- #--------------------------------------------------------------------------
- # ● スキルの効果適用
- #--------------------------------------------------------------------------
- alias ztbs_skill_effect skill_effect
- def skill_effect(user, skill)
- if $game_system.in_tactics
- # 戦闘中フラグ
- $game_temp.in_battle = true
- # 呼び戻す
- effective = ztbs_skill_effect(user, skill)
- # 戦闘中フラグ解除
- $game_temp.in_battle = false
- else
- # 呼び戻す
- effective = ztbs_skill_effect(user, skill)
- end
- # メソッド終了
- return effective
- end
- #--------------------------------------------------------------------------
- # ● アイテムの効果適用
- #--------------------------------------------------------------------------
- alias ztbs_item_effect item_effect
- def item_effect(item)
- if $game_system.in_tactics
- # 戦闘中フラグ
- $game_temp.in_battle = true
- # 呼び戻す
- effective = ztbs_item_effect(item)
- # 戦闘中フラグ解除
- $game_temp.in_battle = false
- else
- # 呼び戻す
- effective = ztbs_item_effect(item)
- end
- # メソッド終了
- return effective
- end
- end
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ztbs_initialize initialize
- def initialize(troop_id, member_index)
- if troop_id == 0
- super()
- @enemy_id = member_index
- enemy = $data_enemies[@enemy_id]
- @hp = maxhp
- @sp = maxsp
- else
- ztbs_initialize(troop_id, member_index)
- end
- end
- #--------------------------------------------------------------------------
- # ● タクティカルアクション作成
- #--------------------------------------------------------------------------
- def make_tactical_action
- # カレントアクションをクリア
- self.current_action.clear
- # 現在有効なアクションを抽出
- available_actions = []
- rating_max = 0
- for action in self.actions
- # ターン 条件確認
- n = $game_system.tactics_turn
- a = action.condition_turn_a
- b = action.condition_turn_b
- if (b == 0 and n != a) or
- (b > 0 and (n < 1 or n < a or n % b != a % b))
- next
- end
- # HP 条件確認
- if self.hp * 100.0 / self.maxhp > action.condition_hp
- next
- end
- # レベル 条件確認
- if $game_party.max_level < action.condition_level
- next
- end
- # スイッチ 条件確認
- switch_id = action.condition_switch_id
- if switch_id > 0 and $game_switches[switch_id] == false
- next
- end
- # スキル使用可能判定
- if action.kind == 1
- skill = $data_skills[action.skill_id]
- if !self.skill_can_use?(skill.id)
- next
- end
- end
- # 条件に該当 : このアクションを追加
- available_actions.push(action)
- if action.rating > rating_max
- rating_max = action.rating
- end
- end
- # 最大のレーティング値を 3 として合計を計算 (0 以下は除外)
- ratings_total = 0
- for action in available_actions
- if action.rating > rating_max - 3
- ratings_total += action.rating - (rating_max - 3)
- end
- end
- # レーティングの合計が 0 ではない場合
- if ratings_total > 0
- # 乱数を作成
- value = rand(ratings_total)
- # 作成した乱数に対応するものをカレントアクションに設定
- for action in available_actions
- if action.rating > rating_max - 3
- if value < action.rating - (rating_max - 3)
- self.current_action.kind = action.kind
- self.current_action.basic = action.basic
- self.current_action.skill_id = action.skill_id
- return
- else
- value -= action.rating - (rating_max - 3)
- end
- end
- end
- end
- end
- end
- class Game_Map
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :tactics_end_map # タクティクス終了時の移動先
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- alias ztbs_setup setup
- def setup(map_id)
- # 呼び戻す
- ztbs_setup(map_id)
- # マップ名を取得
- $data_mapinfos = load_data("Data/MapInfos.rxdata") if $data_mapinfos.nil?
- map_name = $data_mapinfos[@map_id].name
- # タクティクス終了時の移動先を取得
- @tactics_end_map = get_tactics_end_map(@map_id)
- # マップ名からタクティクスマップ判定
- $game_system.in_tactics = map_name.include?("[T]")
- end
- end
- class Game_Character
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :appear # 出現
- attr_accessor :damage_pop # ダメージ表示フラグ
- attr_accessor :damage # ダメージ値
- attr_accessor :critical # クリティカルフラグ
- attr_accessor :animation_id # アニメーション ID
- attr_accessor :animation_hit # アニメーション ヒットフラグ
- attr_accessor :white_flash # 白フラッシュフラグ
- attr_accessor :blink # 明滅フラグ
- attr_accessor :collapse # コラプス
- attr_accessor :acted # 行動済み
- attr_accessor :effect # エフェクト中
- attr_accessor :invisible # 不可視状態
- attr_accessor :not_update # 更新禁止
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ztbs_initialize initialize
- def initialize
- # 呼び戻す
- ztbs_initialize
- @damage_pop = false #
- @damage = nil #
- @critical = false #
- @animation_id = 0 # 角色出场动画 动画ID
- @animation_hit = false #
- @white_flash = false # 行走土是否在第零回合闪烁false为否true为是
- @blink = false # 行走土是否闪烁false为否true为是
- @collapse = 0 # 0显示行走图 1~255以贞数来隐藏行走图
- @acted = false # 第零回合是否显示为待机状态false为不true为是
- @effect = false #
- @invisible = false # 是否显示事件行走图false为显示 true为隐藏
- @not_update = false # 是否进行地图刷新 true为不刷新false为刷新
- end
- #--------------------------------------------------------------------------
- # ● ステートのアニメーション ID 取得
- #--------------------------------------------------------------------------
- def state_animation_id
- if self.is_a?(Game_Player) or !$game_system.in_tactics or
- (!$game_system.tactics_actors.keys.include?(self.id) and
- !$game_system.tactics_enemies.keys.include?(self.id))
- return 0
- end
- # バトラー取得
- if $game_system.tactics_actors.keys.include?(self.id)
- battler = $game_system.tactics_actors[self.id]
- else
- battler = $game_system.tactics_enemies[self.id]
- end
- # ステートがひとつも付加されていない場合
- if battler.states.size == 0
- return 0
- end
- # レーティング最大のステートのアニメーション ID を返す
- return $data_states[battler.states[0]].animation_id
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias ztbs_update update
- def update
- return if @not_update
- ztbs_update
- # 「簡易版マップ処理軽量化」でのエラー防止
- if defined? $onscreen and $game_system.in_tactics
- # スプライト更新ありにする
- $onscreen[@id] = true
- end
- end
- end
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :name # 名前
- attr_reader :move_frequency # 移動頻度
- attr_reader :erased # 消去済み
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ztbs_e_initialize initialize
- def initialize(map_id, event)
- ztbs_e_initialize(map_id, event)
- @name = event.name
- end
- #--------------------------------------------------------------------------
- # ● 消去取り消し
- #--------------------------------------------------------------------------
- def cancel_erase
- @erased = false
- @appear = true
- @effect = true
- end
- end
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :through # すり抜け
- attr_accessor :move_speed # 移動速度
- attr_accessor :through_original # すり抜け記憶
- attr_accessor :speed_original # 移動速度記憶
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize()
- super()
- @through_original = @through
- @speed_original = @move_speed
- end
- #--------------------------------------------------------------------------
- # ● 歩数増加
- #--------------------------------------------------------------------------
- alias ztbs_increase_steps increase_steps
- def increase_steps
- super
- return if $game_system.in_tactics
- # 呼び戻す
- ztbs_increase_steps
- end
- end
- class Sprite_Character < RPG::Sprite
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias ztbs_update update
- def update
- if $game_system.in_tactics
- super
- # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合
- if @tile_id != @character.tile_id or
- @character_name != @character.character_name or
- @character_hue != @character.character_hue
- # タイル ID とファイル名、色相を記憶
- @tile_id = @character.tile_id
- @character_name = @character.character_name
- @character_hue = @character.character_hue
- # タイル ID が有効な値の場合
- if @tile_id >= 384
- self.bitmap = RPG::Cache.tile($game_map.tileset_name,
- @tile_id, @character.character_hue)
- self.src_rect.set(0, 0, 32, 32)
- self.ox = 16
- self.oy = 32
- # タイル ID が無効な値の場合
- else
- self.bitmap = RPG::Cache.character(@character.character_name,
- @character.character_hue)
- @cw = bitmap.width / 4
- @ch = bitmap.height / 4
- self.ox = @cw / 2
- self.oy = @ch
- end
- end
- # 可視状態を設定
- self.visible = (not @character.transparent)
- # グラフィックがキャラクターの場合
- if @tile_id == 0
- # 転送元の矩形を設定
- sx = @character.pattern * @cw
- sy = (@character.direction - 2) / 2 * @ch
- self.src_rect.set(sx, sy, @cw, @ch)
- end
- # スプライトの座標を設定
- self.x = @character.screen_x
- self.y = @character.screen_y
- self.z = @character.screen_z(@ch)
- # 不透明度、合成方法、茂み深さを設定
- if self.opacity == 0
- @character.invisible = true
- end
- unless @character.effect
- if @character.acted
- self.opacity = @character.opacity - 100
- elsif @character.invisible
- self.opacity = 0
- else
- self.opacity = @character.opacity
- end
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- end
- @character.effect = effect?
- if @character.is_a?(Game_Player)
- return
- end
- # アニメーション ID が現在のものと異なる場合
- if @character.damage == nil and
- @character.state_animation_id != @state_animation_id and
- ($game_system.tactics_step < 6 or $game_system.tactics_step > 9) and
- ZTBS::STATE_ANIMATION
- @state_animation_id = @character.state_animation_id
- loop_animation($data_animations[@state_animation_id])
- end
- # アニメーション
- if @character.animation_id != 0
- animation = $data_animations[@character.animation_id]
- animation(animation, @character.animation_hit)
- @character.animation_id = 0
- end
- # 出現
- if @character.appear and
- ($game_system.tactics_step < 6 or $game_system.tactics_step > 8)
- @character.refresh
- @character.invisible = false
- self.opacity = @character.opacity
- appear
- @character.appear = false
- end
- # 明滅
- if @character.blink
- blink_on
- else
- blink_off
- end
- # 白フラッシュ
- if @character.white_flash
- whiten
- @character.white_flash = false
- end
- # ダメージ
- if @character.damage_pop
- damage(@character.damage, @character.critical)
- @character.damage = nil
- @character.critical = false
- @character.damage_pop = false
- end
- # コラプス
- if @character.damage == nil and @character.collapse > 0
- case @character.collapse
- when 1
- $game_system.se_play($data_system.actor_collapse_se)
- when 2
- $game_system.se_play($data_system.enemy_collapse_se)
- end
- collapse
- @character.collapse = 0
- @character.effect = true
- end
- else
- # 呼び戻す
- ztbs_update
- end
- end
- end
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :viewport1 # ビューポート1
- attr_accessor :area_sprites # エリアスプライト
- attr_accessor :range_sprites # レンジスプライト
- attr_reader :character_sprites # キャラクタースプライト
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ztbs_initialize initialize
- def initialize
- if $game_system.in_tactics
- # ビューポートを作成
- @viewport1 = Viewport.new(0, 0, 640, 480)
- @viewport2 = Viewport.new(0, 0, 640, 480)
- @viewport3 = Viewport.new(0, 0, 640, 480)
- @viewport2.z = 200
- @viewport3.z = 5000
- # タイルマップを作成
- @tilemap = Tilemap.new(@viewport1)
- @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
- for i in 0..6
- autotile_name = $game_map.autotile_names[i]
- @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
- end
- @tilemap.map_data = $game_map.data
- @tilemap.priorities = $game_map.priorities
- # パノラマプレーンを作成
- @panorama = Plane.new(@viewport1)
- @panorama.z = -1000
- # フォグプレーンを作成
- @fog = Plane.new(@viewport1)
- @fog.z = 3000
- # エリアスプライトを作成
- @area_sprites = []
- # レンジスプライトを作成
- @range_sprites = []
- # 「簡易版マップ処理軽量化」でのエラー防止
- if defined? $onscreen
- # キャラクタースプライトを作成
- @character_sprites = []
- @party_sprites = []
- for i in $game_map.events.keys.sort
- sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
- @character_sprites[i] = sprite
- $onscreen[i] = true
- end
- @party_sprites.push(Sprite_Cursor.new(@viewport1, $game_player.x, $game_player.y))
- else
- # キャラクタースプライトを作成
- @character_sprites = []
- for i in $game_map.events.keys.sort
- sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
- @character_sprites.push(sprite)
- end
- @character_sprites.push(Sprite_Cursor.new(@viewport1, $game_player.x, $game_player.y))
- end
- # 天候を作成
- @weather = RPG::Weather.new(@viewport1)
- # ピクチャを作成
- @picture_sprites = []
- for i in 1..50
- @picture_sprites.push(Sprite_Picture.new(@viewport2,
- $game_screen.pictures[i]))
- end
- # タイマースプライトを作成
- @timer_sprite = Sprite_Timer.new
- # フレーム更新
- update
- else
- ztbs_initialize
- end
- end
- #--------------------------------------------------------------------------
- # ● エフェクト表示中判定
- #--------------------------------------------------------------------------
- def effect?
- # エフェクトが一つでも表示中なら true を返す
- for sprite in @character_sprites
- if sprite != nil and sprite.effect?
- return true
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- alias ztbs_dispose dispose
- def dispose
- ztbs_dispose
- return if !defined? @area_sprites
- # エリアスプライトを解放
- for sprite in @area_sprites + @range_sprites
- sprite.dispose
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias ztbs_update update
- def update
- ztbs_update
- return if !defined? @area_sprites
- # エリアスプライトを更新
- for sprite in @area_sprites + @range_sprites
- sprite.update
- end
- end
- end
- class Window_Help < Window_Base
- #--------------------------------------------------------------------------
- # ● アクター情報リフレッシュ
- #--------------------------------------------------------------------------
- def refresh_actor(actor)
- @actor = nil
- set_actor(actor)
- end
- #--------------------------------------------------------------------------
- # ● エネミー情報リフレッシュ
- #--------------------------------------------------------------------------
- def refresh_enemy(enemy)
- @actor = nil
- set_enemy(enemy)
- end
- #--------------------------------------------------------------------------
- # ● エネミー設定
- #--------------------------------------------------------------------------
- alias ztbs_set_enemy set_enemy
- def set_enemy(enemy)
- if $game_system.in_tactics and ZTBS::ENEMY_HPSP
- set_actor(enemy)
- else
- # 呼び戻す
- ztbs_set_enemy(enemy)
- end
- end
- end
- #==============================================================================
- # ■ Scene_Load
- #------------------------------------------------------------------------------
- # ※システム初期化を不要にします。
- # 新規プロジェクトで開始する場合やゲーム完成時には
- # 以下のスクリプトを消しても構いません。
- #==============================================================================
- class Scene_Load < Scene_File
- #--------------------------------------------------------------------------
- # ● セーブデータの読み込み
- #--------------------------------------------------------------------------
- alias ztbs_read_save_data read_save_data
- def read_save_data(file)
- # 呼び戻す
- ztbs_read_save_data(file)
- # システム初期化を不要に
- if $game_system.tactics_turn == nil
- $game_system.in_tactics = false
- $game_system.tactics_turn = 0
- $game_system.tactics_phase = 0
- $game_system.tactics_step = 0
- $game_system.tactics_setup = false
- $game_system.tactics_actors = {}
- $game_system.tactics_dead_actors = {}
- $game_system.tactics_enemies = {}
- end
- end
- end
复制代码 493行脚本截取如下:- if @character.damage == nil and @character.collapse > 0
复制代码 这段应该是定义角色在地图上显示的,但我实在想不到问题出在哪里了。 |
评分
-
查看全部评分
|