赞 | 0 |
VIP | 0 |
好人卡 | 4 |
积分 | 4 |
经验 | 27857 |
最后登录 | 2024-10-13 |
在线时间 | 377 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 352
- 在线时间
- 377 小时
- 注册时间
- 2013-1-30
- 帖子
- 219
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 qknight 于 2015-4-6 18:22 编辑
目前在下使用的论坛里tan12345大神的一套宠物脚本以及外站的一个重叠行走图的脚本产生了冲突。
具体来说,就是宠物脚本里有这样一个功能,副本入队(将ID为actor_id的人物以副本的形式加入队伍,强制初始化),这样子就可以让同样的人物,比如4个阿奈思特一起组队打BOSS。
不过外站的那个脚本的功能就是可以将几个行走图叠加在一个人物身上,比如说一个基础人物的行走图,我们可以用这个脚本在原行走图上再叠加上一套炫酷的盔甲,而且可以做到换不同的盔甲实时叠加上不同的盔甲行走图。但也因此,一旦用副本入队的脚本加入克隆出来的人物后,外站脚本就无法识别该ID的人物,然后就开始报错弹出了。
所以在下在此求一个修改的方法,如何在该换装脚本中插入一段设定使得该脚本运行时忽略那几个宠物角色,不再对他们起作用。
- =begin =======================================================================
- ☆ 歩行グラ着せ替えスクリプト
- -------------------------------------------------------------------------------
- アクターの歩行グラをレイヤー化し、装備による着せ替えを可能にします。
- -------------------------------------------------------------------------------
- [使い方]
- 1. Graphics/Charactersに装備レイヤーの歩行グラをインポートします。
- 2. グラフィックを設定したい装備に以下のようにタグを記述します。
-
- <歩行グラ fn, index => f_priority, l_priority, r_priority, b_priority>
-
- * fn
- ファイル名(拡張子は省略可)
-
- index
- キャラクターインデックス、
- 歩行グラを設定する際に使用するものと同じ(0, 1, 2, ..., 7)
-
- (f, l, r, b)_priority
- 前, 左, 右, 後ろ向きに対する指定画像のプライオリティ
- 0を除く任意の整数で指定します。
- キャラクターの画像のプライオリティを0とし、
- プライオリティの高い順から上のレイヤーとして描画されます。
- なお、複数の装備の間でプライオリティがかぶっている場合、
- 下で設定する装備タイプでのレイヤー優先度に準拠します。
-
- [注意事項]
- セーブファイルの歩行グラ他、
- 他素材で使用される歩行グラには反映されないことがあります。
- そのため、セーブファイルに関しては顔グラを表示する素材などを使用してください。
-
- =end
- #==============================================================================
- # ■ 設定項目
- #==============================================================================
- module WS
- module CG
- EquipType_Priority = [0, 1, 2, 3, 4]
- # 装備タイプでのレイヤー優先度を設定します。
- # 配列の各要素は装備タイプIDに対応します(0 = 武器, 1 = 盾, ...)。
- # 他素材で装備タイプを拡張している場合、それに対応した値を
- # 追加してください。
- # レイヤーの優先度はインデックス0 > 1 > 2 ...という感じになります。
- end
- end
- #==============================================================================
- # ■ PlayerGraphics
- #------------------------------------------------------------------------------
- # プレイヤーの歩行グラフィックのデータクラスです。
- #==============================================================================
- class PlayerGraphics
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :data
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(actor)
- @actor = actor
- set_data
- end
- #--------------------------------------------------------------------------
- # ● データのクリア
- #--------------------------------------------------------------------------
- def clear_data
- @data = []
- base_data = [@actor.character_name, @actor.character_index]
- 4.times {|i| @data[i] = {0 => base_data} }
- end
- #--------------------------------------------------------------------------
- # ● データキャッシュの設定
- #--------------------------------------------------------------------------
- def set_cache
- @data_cache = @data.dup
- end
- #--------------------------------------------------------------------------
- # ● データの設定
- #--------------------------------------------------------------------------
- def set_data
- clear_data
- @actor.equips.compact.each do |equip|
- note = equip.note.scan(/<(?:歩行グラ|character_graphic)\s*(.+?)\s*\,\s*(\d+)\s*=>\s(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*>/).flatten
- next if note.empty?
- e_p = (WS::CG::EquipType_Priority.index(equip.etype_id) || WS::CG::EquipType_Priority.size) * 0.01
- for i in 0..3
- @data[i][note[i + 2].to_i - e_p] = [$1, $2.to_i]
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● ビットマップの更新確認
- #--------------------------------------------------------------------------
- def need_for_update
- return @data_cache != @data
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # アクターを扱うクラスです。
- #==============================================================================
- class Game_Actor
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :character_graphic
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias ws_player_graphic_initialize initialize
- def initialize(actor_id)
- ws_player_graphic_initialize(actor_id)
- @character_graphic = PlayerGraphics.new(self)
- end
- #--------------------------------------------------------------------------
- # ● グラフィックの変更
- #--------------------------------------------------------------------------
- alias ws_player_graphic_set_graphic set_graphic
- def set_graphic(c_name, c_index, f_name, f_index)
- ws_player_graphic_set_graphic(c_name, c_index, f_name, f_index)
- @character_graphic.set_data
- Cache.update_player_bitmap(self)
- SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
- end
- end
- #==============================================================================
- # ■ Cache
- #==============================================================================
- module Cache
- #--------------------------------------------------------------------------
- # ● プレイヤーの歩行グラフィックの取得
- #--------------------------------------------------------------------------
- def self.player(actor_id)
- init_player_bitmap unless @players
- return @players[actor_id]
- end
- #--------------------------------------------------------------------------
- # ● プレイヤーの歩行グラフィックの配列作成
- #--------------------------------------------------------------------------
- def self.init_player_bitmap
- @players = []
- for i in 1...$data_actors.size
- actor = $game_actors[i]
- set_player_bitmap(actor)
- end
- end
- #--------------------------------------------------------------------------
- # ● プレイヤーの歩行グラフィックのビットマップ作成
- #--------------------------------------------------------------------------
- def self.set_player_bitmap(actor)
- base = character(actor.character_name)
- cw = base.width / 12
- ch = base.height / 8
- bitmap = Bitmap.new(cw * 3, ch * 4)
- base_rect = Rect.new(0, 0, cw * 3, ch)
- actor.character_graphic.data.each_with_index do |data, index|
- data.keys.sort.each do |priority|
- src_bitmap = Cache.character(data[priority][0])
- src_rect = base_rect.dup
- src_rect.x, src_rect.y = cw * (data[priority][1] % 4) * 3, ch * ((data[priority][1] / 4) * 4 + index)
- bitmap.blt(0, ch * index, src_bitmap, src_rect)
- end
- end
- @players[actor.id] = bitmap
- end
- #--------------------------------------------------------------------------
- # ● プレイヤーの歩行グラフィックの更新
- #--------------------------------------------------------------------------
- def self.update_player_bitmap(actor)
- @players[actor.id].dispose
- set_player_bitmap(actor)
- end
- end
- #==============================================================================
- # ■ Sprite_Character
- #------------------------------------------------------------------------------
- # キャラクター表示用のスプライトです。
- #==============================================================================
- class Sprite_Character
- #--------------------------------------------------------------------------
- # ● キャラクターのビットマップを設定
- #--------------------------------------------------------------------------
- alias ws_player_graphic_set_character_bitmap set_character_bitmap
- def set_character_bitmap
- if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
- self.bitmap = @character.actor ? Cache.player(@character.actor.id) : Cache.empty_bitmap
- @cw = bitmap.width / 3
- @ch = bitmap.height / 4
- self.ox = @cw / 2
- self.oy = @ch
- else
- ws_player_graphic_set_character_bitmap
- end
- end
- #--------------------------------------------------------------------------
- # ● 転送元矩形の更新
- #--------------------------------------------------------------------------
- alias ws_player_graphic_update_src_rect update_src_rect
- def update_src_rect
- if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
- pattern = @character.pattern < 3 ? @character.pattern : 1
- sx = pattern * @cw
- sy = (@character.direction - 2) / 2 * @ch
- self.src_rect.set(sx, sy, @cw, @ch)
- else
- ws_player_graphic_update_src_rect
- end
- end
- end
- #==============================================================================
- # ■ Scene_Equip
- #------------------------------------------------------------------------------
- # 装備画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Equip
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias ws_player_graphic_start start
- def start
- ws_player_graphic_start
- $game_party.members.each {|member| member.character_graphic.set_cache }
- end
- #--------------------------------------------------------------------------
- # ● 終了前処理
- #--------------------------------------------------------------------------
- alias ws_player_graphic_pre_terminate pre_terminate
- def pre_terminate
- ws_player_graphic_pre_terminate
- $game_party.members.each do |member|
- member.character_graphic.set_data
- Cache.update_player_bitmap(member) if member.character_graphic.need_for_update
- end
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # マップ画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :spriteset
- end
- #==============================================================================
- # ■ Game_Interpreter
- #------------------------------------------------------------------------------
- # イベントの処理を行うインタプリタのクラスです。
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● 装備の変更
- #--------------------------------------------------------------------------
- alias ws_player_graphic_command_319 command_319
- def command_319
- actor = $game_actors[@params[0]]
- actor.character_graphic.set_cache if actor
- ws_player_graphic_command_319
- actor.character_graphic.set_data if actor
- if actor && actor.character_graphic.need_for_update
- Cache.update_player_bitmap(actor)
- SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
- end
- end
- end
- #==============================================================================
- # ■ Game_Player
- #------------------------------------------------------------------------------
- # プレイヤーを扱うクラスです。
- #==============================================================================
- class Game_Player
- #--------------------------------------------------------------------------
- # ● 移動コマンドの処理
- #--------------------------------------------------------------------------
- alias ws_player_graphic_process_move_command process_move_command
- def process_move_command(command)
- ws_player_graphic_process_move_command(command)
- params = command.parameters
- if command.code == ROUTE_CHANGE_GRAPHIC
- actor.set_graphic(params[0], params[1], actor.face_name, actor.face_index)
- SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
- end
- end
- end
复制代码 |
|