设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1198|回复: 0
打印 上一主题 下一主题

[已经过期] 如何在脚本中插入一段设定使得该脚本运行时跳过几个人物

[复制链接]

Lv2.观梦者

梦石
0
星屑
352
在线时间
377 小时
注册时间
2013-1-30
帖子
219
跳转到指定楼层
1
发表于 2015-4-6 04:01:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 qknight 于 2015-4-6 18:22 编辑

    目前在下使用的论坛里tan12345大神的一套宠物脚本以及外站的一个重叠行走图的脚本产生了冲突。
    具体来说,就是宠物脚本里有这样一个功能,副本入队(将ID为actor_id的人物以副本的形式加入队伍,强制初始化),这样子就可以让同样的人物,比如4个阿奈思特一起组队打BOSS。
    不过外站的那个脚本的功能就是可以将几个行走图叠加在一个人物身上,比如说一个基础人物的行走图,我们可以用这个脚本在原行走图上再叠加上一套炫酷的盔甲,而且可以做到换不同的盔甲实时叠加上不同的盔甲行走图。但也因此,一旦用副本入队的脚本加入克隆出来的人物后,外站脚本就无法识别该ID的人物,然后就开始报错弹出了。
    所以在下在此求一个修改的方法,如何在该换装脚本中插入一段设定使得该脚本运行时忽略那几个宠物角色,不再对他们起作用。
  1. =begin  =======================================================================
  2.   ☆ 歩行グラ着せ替えスクリプト
  3. -------------------------------------------------------------------------------
  4.   アクターの歩行グラをレイヤー化し、装備による着せ替えを可能にします。
  5. -------------------------------------------------------------------------------
  6.   [使い方]
  7.     1. Graphics/Charactersに装備レイヤーの歩行グラをインポートします。
  8.     2. グラフィックを設定したい装備に以下のようにタグを記述します。
  9.    
  10.       <歩行グラ fn, index => f_priority, l_priority, r_priority, b_priority>
  11.       
  12.       * fn
  13.           ファイル名(拡張子は省略可)
  14.          
  15.         index
  16.           キャラクターインデックス、
  17.           歩行グラを設定する際に使用するものと同じ(0, 1, 2, ..., 7)
  18.          
  19.         (f, l, r, b)_priority
  20.           前, 左, 右, 後ろ向きに対する指定画像のプライオリティ
  21.           0を除く任意の整数で指定します。
  22.           キャラクターの画像のプライオリティを0とし、
  23.           プライオリティの高い順から上のレイヤーとして描画されます。
  24.           なお、複数の装備の間でプライオリティがかぶっている場合、
  25.           下で設定する装備タイプでのレイヤー優先度に準拠します。
  26.          
  27.   [注意事項]
  28.     セーブファイルの歩行グラ他、
  29.     他素材で使用される歩行グラには反映されないことがあります。
  30.     そのため、セーブファイルに関しては顔グラを表示する素材などを使用してください。
  31.    
  32. =end

  33. #==============================================================================
  34. # ■ 設定項目
  35. #==============================================================================

  36. module WS
  37.   module CG
  38.     EquipType_Priority = [0, 1, 2, 3, 4]
  39.       # 装備タイプでのレイヤー優先度を設定します。
  40.       # 配列の各要素は装備タイプIDに対応します(0 = 武器, 1 = 盾, ...)。
  41.       # 他素材で装備タイプを拡張している場合、それに対応した値を
  42.       # 追加してください。
  43.       # レイヤーの優先度はインデックス0 > 1 > 2 ...という感じになります。
  44.   end
  45. end

  46. #==============================================================================
  47. # ■ PlayerGraphics
  48. #------------------------------------------------------------------------------
  49. #  プレイヤーの歩行グラフィックのデータクラスです。
  50. #==============================================================================

  51. class PlayerGraphics
  52.   #--------------------------------------------------------------------------
  53.   # ● 公開インスタンス変数
  54.   #--------------------------------------------------------------------------
  55.   attr_reader :data
  56.   #--------------------------------------------------------------------------
  57.   # ● オブジェクト初期化
  58.   #--------------------------------------------------------------------------
  59.   def initialize(actor)
  60.     @actor = actor
  61.     set_data
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● データのクリア
  65.   #--------------------------------------------------------------------------
  66.   def clear_data
  67.     @data = []
  68.     base_data = [@actor.character_name, @actor.character_index]
  69.     4.times {|i| @data[i] = {0 => base_data} }
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● データキャッシュの設定
  73.   #--------------------------------------------------------------------------
  74.   def set_cache
  75.     @data_cache = @data.dup
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● データの設定
  79.   #--------------------------------------------------------------------------
  80.   def set_data
  81.     clear_data
  82.     @actor.equips.compact.each do |equip|
  83.       note = equip.note.scan(/<(?:歩行グラ|character_graphic)\s*(.+?)\s*\,\s*(\d+)\s*=>\s(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*>/).flatten
  84.       next if note.empty?
  85.       e_p = (WS::CG::EquipType_Priority.index(equip.etype_id) || WS::CG::EquipType_Priority.size) * 0.01
  86.       for i in 0..3
  87.         @data[i][note[i + 2].to_i - e_p] = [$1, $2.to_i]
  88.       end
  89.     end
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● ビットマップの更新確認
  93.   #--------------------------------------------------------------------------
  94.   def need_for_update
  95.     return @data_cache != @data
  96.   end
  97. end

  98. #==============================================================================
  99. # ■ Game_Actor
  100. #------------------------------------------------------------------------------
  101. #  アクターを扱うクラスです。
  102. #==============================================================================

  103. class Game_Actor
  104.   #--------------------------------------------------------------------------
  105.   # ● 公開インスタンス変数
  106.   #--------------------------------------------------------------------------
  107.   attr_reader :character_graphic
  108.   #--------------------------------------------------------------------------
  109.   # ● オブジェクト初期化
  110.   #--------------------------------------------------------------------------
  111.   alias ws_player_graphic_initialize initialize
  112.   def initialize(actor_id)
  113.     ws_player_graphic_initialize(actor_id)
  114.     @character_graphic = PlayerGraphics.new(self)
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● グラフィックの変更
  118.   #--------------------------------------------------------------------------
  119.   alias ws_player_graphic_set_graphic set_graphic
  120.   def set_graphic(c_name, c_index, f_name, f_index)
  121.     ws_player_graphic_set_graphic(c_name, c_index, f_name, f_index)
  122.     @character_graphic.set_data
  123.     Cache.update_player_bitmap(self)
  124.     SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  125.   end
  126. end

  127. #==============================================================================
  128. # ■ Cache
  129. #==============================================================================

  130. module Cache
  131.   #--------------------------------------------------------------------------
  132.   # ● プレイヤーの歩行グラフィックの取得
  133.   #--------------------------------------------------------------------------
  134.   def self.player(actor_id)
  135.     init_player_bitmap unless @players
  136.     return @players[actor_id]
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● プレイヤーの歩行グラフィックの配列作成
  140.   #--------------------------------------------------------------------------
  141.   def self.init_player_bitmap
  142.     @players = []
  143.     for i in 1...$data_actors.size
  144.       actor = $game_actors[i]
  145.       set_player_bitmap(actor)
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● プレイヤーの歩行グラフィックのビットマップ作成
  150.   #--------------------------------------------------------------------------
  151.   def self.set_player_bitmap(actor)
  152.     base = character(actor.character_name)
  153.     cw = base.width / 12
  154.     ch = base.height / 8
  155.     bitmap = Bitmap.new(cw * 3, ch * 4)
  156.     base_rect = Rect.new(0, 0, cw * 3, ch)
  157.     actor.character_graphic.data.each_with_index do |data, index|
  158.       data.keys.sort.each do |priority|
  159.         src_bitmap = Cache.character(data[priority][0])
  160.         src_rect = base_rect.dup
  161.         src_rect.x, src_rect.y = cw * (data[priority][1] % 4) * 3, ch * ((data[priority][1] / 4) * 4 + index)
  162.         bitmap.blt(0, ch * index, src_bitmap, src_rect)
  163.       end
  164.     end
  165.     @players[actor.id] = bitmap
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● プレイヤーの歩行グラフィックの更新
  169.   #--------------------------------------------------------------------------
  170.   def self.update_player_bitmap(actor)
  171.     @players[actor.id].dispose
  172.     set_player_bitmap(actor)
  173.   end
  174. end

  175. #==============================================================================
  176. # ■ Sprite_Character
  177. #------------------------------------------------------------------------------
  178. #  キャラクター表示用のスプライトです。
  179. #==============================================================================

  180. class Sprite_Character
  181.   #--------------------------------------------------------------------------
  182.   # ● キャラクターのビットマップを設定
  183.   #--------------------------------------------------------------------------
  184.   alias ws_player_graphic_set_character_bitmap set_character_bitmap
  185.   def set_character_bitmap
  186.     if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
  187.       self.bitmap = @character.actor ? Cache.player(@character.actor.id) : Cache.empty_bitmap
  188.       @cw = bitmap.width / 3
  189.       @ch = bitmap.height / 4
  190.       self.ox = @cw / 2
  191.       self.oy = @ch
  192.     else
  193.       ws_player_graphic_set_character_bitmap
  194.     end
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 転送元矩形の更新
  198.   #--------------------------------------------------------------------------
  199.   alias ws_player_graphic_update_src_rect update_src_rect
  200.   def update_src_rect
  201.     if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
  202.       pattern = @character.pattern < 3 ? @character.pattern : 1
  203.       sx = pattern * @cw
  204.       sy = (@character.direction - 2) / 2 * @ch
  205.       self.src_rect.set(sx, sy, @cw, @ch)
  206.     else
  207.       ws_player_graphic_update_src_rect
  208.     end
  209.   end
  210. end

  211. #==============================================================================
  212. # ■ Scene_Equip
  213. #------------------------------------------------------------------------------
  214. #  装備画面の処理を行うクラスです。
  215. #==============================================================================

  216. class Scene_Equip
  217.   #--------------------------------------------------------------------------
  218.   # ● 開始処理
  219.   #--------------------------------------------------------------------------
  220.   alias ws_player_graphic_start start
  221.   def start
  222.     ws_player_graphic_start
  223.     $game_party.members.each {|member| member.character_graphic.set_cache }
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 終了前処理
  227.   #--------------------------------------------------------------------------
  228.   alias ws_player_graphic_pre_terminate pre_terminate
  229.   def pre_terminate
  230.     ws_player_graphic_pre_terminate
  231.     $game_party.members.each do |member|
  232.       member.character_graphic.set_data
  233.       Cache.update_player_bitmap(member) if member.character_graphic.need_for_update
  234.     end
  235.   end
  236. end

  237. #==============================================================================
  238. # ■ Scene_Map
  239. #------------------------------------------------------------------------------
  240. #  マップ画面の処理を行うクラスです。
  241. #==============================================================================

  242. class Scene_Map
  243.   #--------------------------------------------------------------------------
  244.   # ● 公開インスタンス変数
  245.   #--------------------------------------------------------------------------
  246.   attr_reader :spriteset
  247. end

  248. #==============================================================================
  249. # ■ Game_Interpreter
  250. #------------------------------------------------------------------------------
  251. #  イベントの処理を行うインタプリタのクラスです。
  252. #==============================================================================

  253. class Game_Interpreter
  254.   #--------------------------------------------------------------------------
  255.   # ● 装備の変更
  256.   #--------------------------------------------------------------------------
  257.   alias ws_player_graphic_command_319 command_319
  258.   def command_319
  259.     actor = $game_actors[@params[0]]
  260.     actor.character_graphic.set_cache if actor
  261.     ws_player_graphic_command_319
  262.     actor.character_graphic.set_data if actor
  263.     if actor && actor.character_graphic.need_for_update
  264.       Cache.update_player_bitmap(actor)
  265.       SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  266.     end
  267.   end
  268. end

  269. #==============================================================================
  270. # ■ Game_Player
  271. #------------------------------------------------------------------------------
  272. #  プレイヤーを扱うクラスです。
  273. #==============================================================================

  274. class Game_Player
  275.   #--------------------------------------------------------------------------
  276.   # ● 移動コマンドの処理
  277.   #--------------------------------------------------------------------------
  278.   alias ws_player_graphic_process_move_command process_move_command
  279.   def process_move_command(command)
  280.     ws_player_graphic_process_move_command(command)
  281.     params = command.parameters
  282.     if command.code == ROUTE_CHANGE_GRAPHIC
  283.       actor.set_graphic(params[0], params[1], actor.face_name, actor.face_index)
  284.       SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  285.     end
  286.   end
  287. end
复制代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 22:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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