#encoding:utf-8 #============================================================================== # ■ 多帧4_8方图,4_8向行走 # # 支持4方图:兼容rmVA原格式图片,4向8向行走 # 支持8方图:从上到下方向为:正、左、右、背、左下、右下、左上、右上 # 对应小键盘:24681379 # 支持开火车,有一定范围的拥挤处理。支持4、8方混合开 # 按住方向键时,碰到障碍物会踏步(可选) # 可选4、8向行走,在代码开头设置,默认为8向行走 #------------------------------------------------------------------------------ #使用说明:对原rmVA不支持的格式,需要对文件名实行命名规则 # 1.png图片,须仅包含一个人物的全套行走 # 2.图片内容,从左到右,小于99帧; # 从上到下8个方向:正、左、右、背、左下、右下、左上、右上 # 3.文件命名 # 文件名:角色名+格式串+.png # name@D#DD%DD.png 其中%DD可选 # @D表示png文件中, 每一列有多少个图。以一位数表示,如8,即8个方向 # #DD表示png文件中,每一行有多少个图。以两位数表示,如06或6,即6帧 # %DD,可选,调整角色在游戏画面中的高度,单位像素。如20,即调低20像素 # 说明:因为如果是精美8方图的话,一般有带阴影,而阴影会比脚低 # 这时可通过%DD来调整人物在画面中的高低 # 有些图片空白过多,也可用此来调整,不用弄PS。 # #小技巧:★可新建一个工程,以RMVA默认的角色领队开火车,可看出是否对齐 # ★若人物在开火车中挤紧在一起,把其每帧的图片加宽,如>=68像素即可。 #注意: ☆rmVA原格式行走图,停下来会停在第2帧(这是rmVA的默认方法) # ☆自定义格式行走图,停下来会停在第1帧 # ☆格式串前的name必须在characters文件夹下的png文件中唯一 #------------------------------------------------------------------------------ # by rmav (有任何问题请毫无顾忌滴提出) # # v1.0 #============================================================================== $imported ||= {} $imported[:rmav_walk] = true module Rmav #---------行走选项设置---------# Opt_walk={ dir8_on: true, #false则4向行走,本插件系列其他功能仍可以用 step_ext_on: true #按着方向键碰到障碍物踏步,若为false则静止(rmVA默认是静止的) } INPUT_HV=[[0,0],[4,2],[0,2],[6,2],[4,0],[0,0],[6,0],[4,8],[0,8],[6,8]] #-------------------------------------------------------------------------- # ● 缓存文件夹中所有png文件名 #-------------------------------------------------------------------------- def self.loadFolder(folderName) @cache_folder||={} folderName.gsub!(/\\/,'/') folderName+='/' if folderName[-1]!='/' folderName.downcase! unless @cache_folder.include?(folderName) @cache_folder[folderName]=[] Dir.glob(folderName+"*.png"){|f| @cache_folder[folderName]<<f.split('/')[-1].chomp!('.png').downcase } end @cache_folder[folderName] end end class Sprite_Character #-------------------------------------------------------------------------- # ● 设置角色的位图(n方向,n帧) #-------------------------------------------------------------------------- alias_method :set_character_bitmap_org_rmav, :set_character_bitmap def set_character_bitmap self.bitmap = Cache.character(@character_name) @fmt_sign = @character_name[/\@(\d{1,2})\#(\d{1,2})(\%(\d{1,2}))?/] if @fmt_sign @fmt_sign=[$1.to_i,$2.to_i,$4.to_i] @cw = bitmap.width / @fmt_sign[1] @ch = bitmap.height / @fmt_sign[0] self.ox = @cw / 2 self.oy = @ch-@fmt_sign[2] else set_character_bitmap_org_rmav end if @character @character.cw=@cw @character.ch=@ch @character.fmt_sign=@fmt_sign @character.original_pattern=0 if @fmt_sign end end #-------------------------------------------------------------------------- # ● 更新源矩形 #-------------------------------------------------------------------------- def update_src_rect if @tile_id == 0 index = @character.character_index pattern = @character.pattern < (@fmt_sign?@fmt_sign[1]:3) \ ? @character.pattern : 1 sx = (index % 4 * 3 + pattern) * @cw sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch case @character.direction when 1; sy=@fmt_sign?(@fmt_sign[0]==4?0:4)*@ch:(index / 4 * 4 ) * @ch when 3; sy=@fmt_sign?(@fmt_sign[0]==4?0:5)*@ch:(index / 4 * 4 ) * @ch when 7; sy=@fmt_sign?(@fmt_sign[0]==4?3:6)*@ch:(index / 4 * 4+3 ) * @ch when 9; sy=@fmt_sign?(@fmt_sign[0]==4?3:7)*@ch:(index / 4 * 4+3 ) * @ch end self.src_rect.set(sx, sy, @cw, @ch) end end end class Game_Player if Rmav::Opt_walk[:dir8_on] #-------------------------------------------------------------------------- # ● 由方向键移动,8方向 #-------------------------------------------------------------------------- def move_by_input return if !movable? || $game_map.interpreter.running? input=Input.dir8 move_diagonal(*Rmav::INPUT_HV[input]) if input > 0 end end #-------------------------------------------------------------------------- # ● 更新步行/踏步动画 #-------------------------------------------------------------------------- alias_method :update_animation_org_rmav,:update_animation def update_animation if stopping? && @stop_count<1 @step_ext_anime=true else @step_ext_anime=false end super end end class Game_CharacterBase attr_accessor :cw,:ch,:fmt_sign,:original_pattern,:step_ext_anime alias_method :characterBase_init_org_rmav, :initialize def initialize characterBase_init_org_rmav @cw=@ch=0 @fmt_sign=nil @step_ext_anime=false end #-------------------------------------------------------------------------- # ● 斜向移动 # horz : 横向(4 or 6) # vert : 纵向(2 or 8) #-------------------------------------------------------------------------- alias_method :charBase_move_diagonal_org_rmav, :move_diagonal def move_diagonal(horz, vert, turn_ok = true) unless turn_ok charBase_move_diagonal_org_rmav(horz, vert) return end @move_succeed = diagonal_passable?(x, y, horz, vert) if @move_succeed set_direction(Rmav::INPUT_HV.index([horz, vert])) @x = $game_map.round_x_with_direction(@x, horz) @y = $game_map.round_y_with_direction(@y, vert) @real_x = $game_map.x_with_direction(@x, reverse_dir(horz)) @real_y = $game_map.y_with_direction(@y, reverse_dir(vert)) increase_steps elsif turn_ok set_direction(Rmav::INPUT_HV.index([horz, vert])) check_event_trigger_touch_front end end #-------------------------------------------------------------------------- # ● 更新动画图案 #-------------------------------------------------------------------------- def update_anime_pattern if !@step_anime && @stop_count > 0 @pattern = @original_pattern else @pattern = (@pattern + 1) % (@fmt_sign?@fmt_sign[1]:4) end end #-------------------------------------------------------------------------- # ● 更新动画计数 #-------------------------------------------------------------------------- alias_method :update_anime_count_org_rmav,:update_anime_count def update_anime_count if Rmav::Opt_walk[:step_ext_on] && !(moving? && @walk_anime) && @step_ext_anime @anime_count += 1 else update_anime_count_org_rmav end end end class Game_Follower attr_accessor :gathering alias_method :follower_initialize_org_rmav, :initialize def initialize(member_index, preceding_character) follower_initialize_org_rmav(member_index, preceding_character) @gathering=false end #-------------------------------------------------------------------------- # ● 追随带队角色 #-------------------------------------------------------------------------- def chase_preceding_character unless moving? sx = distance_x_from(@preceding_character.x) sy = distance_y_from(@preceding_character.y) dx_pix=[(@preceding_character.cw+@cw)/2, 79].min if !@gathering && dx_pix > sx.abs*32+16 if sy>0 return if (@ch>32+16&&sy<2) elsif sy<0 return if (@preceding_character.ch>32+16&&sy.abs<2) else return end end if sx != 0 && sy != 0 move_diagonal(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2) elsif sx != 0 move_straight(sx > 0 ? 4 : 6) elsif sy != 0 move_straight(sy > 0 ? 8 : 2) end end end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- alias_method :update_org_rmav,:update def update @step_ext_anime = $game_player.step_ext_anime @stop_count=0 if @step_ext_anime update_org_rmav end end class Game_Followers #-------------------------------------------------------------------------- # ● 集合 #-------------------------------------------------------------------------- alias_method :gather_org_rmav,:gather def gather gather_org_rmav visible_folloers.each {|follower| follower.gathering=true } end #-------------------------------------------------------------------------- # ● 判定是否集合完毕 #-------------------------------------------------------------------------- alias_method :gather_org_rmav?,:gather? def gather? ok = gather_org_rmav? if ok visible_folloers.each {|follower| follower.gathering=false } end ok end end
75 Bytes, 下载次数: 460
#encoding:utf-8 #============================================================================== # ■ 玩家更换行走图 # (仅支持png中只包含一个角色的行走图) # # 这是一个《多帧4_8方图,4_8向行走》插件的配套插件 # 可让玩家在不接触源代码或破解的情况下,自己更换行走图 # 当游戏使用《多帧4_8方图,4_8向行走》插件时,若玩家想更换行走图 # 而2个行走图格式又刚好不一样(如帧数等),不能直接同名替换文件 # 需要使用本插件 # #------------------------------------------------------------------------------ #使用说明: # 原文件名:name@D#DD%DD.png 或name.png 其中%DD可选 # 新文件名:name@D#DD%DD.png 其中%DD可选 # 以上name必须相同,D或DD的值可以不同。 # # 把原文件中的name改名,或删除文件,再换上新文件,重启游戏即可。 # # 配套插件须放在主插件《多帧4_8方图,4_8向行走》之下 #------------------------------------------------------------------------------ # by rmav (有任何问题请毫无顾忌滴提出) # # v1.0 #============================================================================== $imported ||= {} $imported[:rmav_walk_replace] = true module Cache #-------------------------------------------------------------------------- # ● 获取角色行走图 #-------------------------------------------------------------------------- def self.character(filename) @char_mapfiles||={} unless (filename.empty? ) filename.downcase! if @char_mapfiles[filename] filename.replace @char_mapfiles[filename] else files=Rmav.loadFolder("Graphics/Characters/") if not files.include?(filename) filename=~%r{(.+)\@\d{1,2}\#\d{1,2}(\%\d{1,2})?} prefix = ($1)?($1):filename prefix = Regexp.escape prefix.downcase files.each{|f| found = f[/\A#{prefix}@\d{1,2}#\d{1,2}.*/] if found @char_mapfiles[filename]=f filename.replace f break end } end end end load_bitmap("Graphics/Characters/", filename) end end
#encoding:utf-8 #============================================================================== # ■ 屏蔽插件 # # 按插件标签屏蔽 # 标签名以-开头的将被屏蔽 # 禁用插件:在该插件的标签名前加一个- # 启用插件:去掉该插件标签名前所有的- #------------------------------------------------------------------------------ # 使用方法:放在最上面,作为第一个脚本 #------------------------------------------------------------------------------ # by rmav (有任何问题请毫无顾忌滴提出) #============================================================================== $RGSS_SCRIPTS.each{|v| if v[1][/\A-+/] #自定义屏蔽符号格式 v[2]="x\x9C\u0003\u0000\u0000\u0000\u0000\u0001" v[3]="" end }
#encoding:utf-8 #============================================================================== # ■ 整合多帧8向 # # 整合《多帧4_8方图,4_8向行走》与其他插件冲突 #------------------------------------------------------------------------------ #使用说明: # 仅当不兼容时使用 # 把本插件放在《多帧4_8方图,4_8向行走》与冲突插件 之下 # #------------------------------------------------------------------------------ # by rmav (有任何问题请毫无顾忌滴提出) # # v1.0 整合《Sion鼠标插件v2.1C》 #============================================================================== $imported ||= {} $imported[:rmav_walk_merge] = true module Rmav tmp={ #冲突插件标记: [是否在使用该插件,是否处理该冲突] Sion_mouse: [nil,true] #Sion鼠标插件冲突 #说明:Sion鼠标脚本有8向移动补丁,直接用那个补丁可用鼠标8向移动 } Conflicts||={} tmp.each_pair{|k,v| Conflicts[k]=v} end begin if Mouse.class==Module && KsOfSion.class==Module Rmav::Conflicts[:Sion_mouse][0]=true end rescue Rmav::Conflicts[:Sion_mouse][0]=false end if Rmav::Opt_walk[:dir8_on] class Game_Player if Rmav::Conflicts[:Sion_mouse][0]&&Rmav::Conflicts[:Sion_mouse][1] #-------------------------------------------------------------------------- # ● 由方向键移动 #-------------------------------------------------------------------------- def move_by_input return if !movable? || $game_map.interpreter.running? input=Input.dir8 if input > 0 move_diagonal(*Rmav::INPUT_HV[input]) reset_move_path else move_by_mouse end end end end end
1.8 MB, 下载次数: 117
#encoding:utf-8 #============================================================================== # ■ 人物动态待机 # (仅支持png中只包含一个角色的图) # # 这是一个《多帧4_8方图,4_8向行走》插件的配套插件 # 会自动寻找待机图片(依据行走图文件) # 当有待机图片时,在角色等待时会播放待机图片动画 # 当没有待机图片时,在角色等待时不会播放任何动画,也不会提示。 # #------------------------------------------------------------------------------ #使用说明: # 必须与行走图文件配套,注意校准 # 行走图文件名:name@D#DD%DD.png 其中%DD可选 # 待机图文件名:name_w@D#DD%DD.png 其中%DD可选 # # 以上name必须相同,D或DD的值可以不同。 # # 待机图文件放在characters文件夹下。 # # ★停下多久播放待机动画,在代码开头设置 # # 配套插件须放在主插件《多帧4_8方图,4_8向行走》之下 #------------------------------------------------------------------------------ # by rmav (有任何问题请毫无顾忌滴提出) # # v1.0 #============================================================================== $imported ||= {} $imported[:rmav_walk_wait] = true module Rmav #--------待机选项---------# Opt_wait={ #停下多久播放待机动画,默认为90约1.5秒左右 stop_count: 90, #推荐取值范围12至120 play_speed: 0.5 #播放速度,越大越快 } end class Game_CharacterBase alias_method :characterBase_init_org_rmav_2, :initialize def initialize characterBase_init_org_rmav_2 init_waiting end def init_waiting(wait_enable=false) @wait_enable=wait_enable @waiting_name=nil @character_name_org=nil @got_waiting_name=nil @wait_anime=false end def waiting? @wait_enable&&stopping? &&!@character_name.empty? \ && @stop_count>Rmav::Opt_wait[:stop_count] end def waiting_play? waiting? && @got_waiting_name end #-------------------------------------------------------------------------- # ● 更新等待、行走 #-------------------------------------------------------------------------- def update_waiting_walking if waiting? if @got_waiting_name @character_name=@waiting_name elsif @got_waiting_name==nil @got_waiting_name=false @character_name=~%r{(.+)\@\d{1,2}\#\d{1,2}(\%\d{1,2})?} if $1 @waiting_name=$1+"_w" waiting_name_esc = Regexp.escape @waiting_name.downcase files=Rmav.loadFolder("Graphics/Characters/") files.each{|f| found = f[/\A#{waiting_name_esc}@\d{1,2}#\d{1,2}.*/] if found @waiting_name.replace f @got_waiting_name=true break end } @character_name_org=@character_name @character_name=@waiting_name if @got_waiting_name end end else @character_name=@character_name_org if @character_name_org end end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- alias_method :update_org_rmav_2,:update def update update_waiting_walking update_org_rmav_2 end #-------------------------------------------------------------------------- # ● 更新步行/踏步动画 #-------------------------------------------------------------------------- alias_method :update_animation_org_rmav_2,:update_animation def update_animation if waiting_play? @wait_anime=true else @wait_anime=false end update_animation_org_rmav_2 end #-------------------------------------------------------------------------- # ● 更新动画计数 #-------------------------------------------------------------------------- alias_method :update_anime_count_org_rmav_2,:update_anime_count def update_anime_count if @wait_anime @anime_count += Rmav::Opt_wait[:play_speed] return end update_anime_count_org_rmav_2 end #-------------------------------------------------------------------------- # ● 更新动画图案 #-------------------------------------------------------------------------- alias_method :update_anime_pattern_org_rmav_2,:update_anime_pattern def update_anime_pattern if @wait_anime @pattern = (@pattern + 1) % (@fmt_sign?@fmt_sign[1]:4) return end update_anime_pattern_org_rmav_2 end end class Game_Player alias_method :initialize_org_rmav_2,:initialize def initialize initialize_org_rmav_2 @wait_enable=true end #-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- alias_method :refresh_org_rmav_2,:refresh def refresh init_waiting(true) refresh_org_rmav_2 end end class Game_Follower alias_method :follower_initialize_org_rmav_2, :initialize def initialize(member_index, preceding_character) follower_initialize_org_rmav_2(member_index, preceding_character) @wait_enable=true end #-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- alias_method :refresh_org_rmav_2,:refresh def refresh init_waiting(true) refresh_org_rmav_2 end end
307.44 KB, 下载次数: 74
class Game_CharacterBase #-------------------------------------------------------------------------- # ● 更改方向 # d : 方向(2,4,6,8) #-------------------------------------------------------------------------- def set_direction(d) @direction = d if !@direction_fix && d != 0 end end
aa838320582 发表于 2016-6-16 23:13
不好意思啊挖个坟……
请问楼主大大,事件NPC的踏步动画无效的BUG修改了吗? ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |