查看: 2341|回复: 1

[已经过期] 换装脚本,人物被事件覆盖了...

[复制链接]
梦石
0
星屑
5626
在线时间
177 小时
注册时间
2011-6-3
回帖
29
发表于 2017-8-14 18:08:01 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 RyanBern 于 2017-8-14 19:18 编辑

换装脚本,人物被事件覆盖了...求大神帮忙~
以下是脚本


[pre lang="Ruby"]
#==============================================================================
# ■ 角色装备行走图变更                                          BY:亿万星辰
#------------------------------------------------------------------------------
#  使用了一种特殊的方法来改变行走图,不是更换,而是在原图的基础上继续描绘新的
# 层以实现层的叠加,类似暗黑里的装备帽子以后角色的行走图就多出帽子,装备盾牌以
# 后就会看到角色的左手拿着盾牌。
#
# 介绍:
# 现在默认分为5层,最下为默认的行走图,也就是数据库里角色那里设置的。之后分为头
# 部、身体、左右手4层,也可自行添加,但需要一定的功底,以防备逻辑上的混乱……
#
# 使用说明:
# 全部都是在数据库里设置,对应的武器或防具后逗号追加一个图片文件名即可,此文件
# 放在graphics/characters下,至于图片的绘制,实属虐待美工…… 具体可参考范例里
# 的graphics/characters目录,不过盾牌的图画的不是很合适
#==============================================================================
module RPG
  class Weapon
    def name
      return @name.split(/,/)[0].nil? ? "" : @name.split(/,/)[0]
    end
    def part
      return @name.split(/,/)[1].nil? ? "" : @name.split(/,/)[1]
    end
  end

  class Armor
    def name
      return @name.split(/,/)[0].nil? ? "" : @name.split(/,/)[0]
    end
    def part
      return @name.split(/,/)[1].nil? ? "" : @name.split(/,/)[1]
    end
  end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================

class Game_Player < Game_Character
  attr_accessor   :part_name                # 角色 文件名
  attr_accessor   :turn_z
=begin
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super
    @turn_z = [0,3,4,1,2] # 优先级,靠后的显示在最前 0主身体 1武器 2盾牌 3身体 4头
    @part_name = [
      $game_party.actors[0].character_name,
      $game_party.actors[0].weapon_id != 0 ? $data_weapons[$game_party.actors[0].weapon_id].part : "",
      $game_party.actors[0].armor1_id != 0 ? $data_armors[$game_party.actors[0].armor1_id].part : "",
      $game_party.actors[0].armor2_id != 0 ? $data_armors[$game_party.actors[0].armor2_id].part : "",
      $game_party.actors[0].armor3_id != 0 ? $data_armors[$game_party.actors[0].armor3_id].part : ""]
  end
=end
  #--------------------------------------------------------------------------
  def refresh
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0
      # 清除角色的文件名及对像
      @character_name = ""
      @character_hue = 0
#修改-------------------------------------------------------------------------
      @turn_z = [0,3,4,1,2,5]
      @part_name = ["","","","","",""]
      # 分支结束
      return
    end
    # 获取带头的角色
    actor = $game_party.actors[0]
   
    #-----------------------------------
    # X☆R: 貌似放在这儿比较好一点。
   
    @turn_z = case @direction
#修改-------------------------------------------------------------------------
# 优先级,靠后的显示在最前 0主身体 1武器.发1 2盾牌.发2 3身体.衣服 4头.裤子 5鞋子
    when 2 :[0,3,4,1,2,5] #面向向下
    when 4 :[1,0,3,4,2,5] #面向向左
    when 6 :[2,0,3,4,1,5] #面向向右
    when 8 :[0,1,2,3,4,5] #面向向上
    end
    @part_name = [actor.character_name,
                  actor.weapon_id != 0 ? $data_weapons[actor.weapon_id].part : "",
                  actor.armor1_id != 0 ? $data_armors[actor.armor1_id].part : "",
                  actor.armor2_id != 0 ? $data_armors[actor.armor2_id].part : "",
                  actor.armor3_id != 0 ? $data_armors[actor.armor3_id].part : "",
                  actor.armor4_id != 0 ? $data_armors[actor.armor4_id].part : ""]
    #------------------------------------
                  
    # 设置角色的文件名及对像
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    # 初始化不透明度和合成方式
    @opacity = 255
    @blend_type = 0
  end
  #--------------------------------------------------------------------------
  # ● 面向向下
  #--------------------------------------------------------------------------
  def turn_down
    unless @direction_fix
      @direction = 2
      @stop_count = 0
      @turn_z = [0,3,4,1,2,5] # 优先级,靠后的显示在最前
    end
  end
  #--------------------------------------------------------------------------
  # ● 面向向左
  #--------------------------------------------------------------------------
  def turn_left
    unless @direction_fix
      @direction = 4
      @stop_count = 0
      @turn_z = [1,0,3,4,2,5] # 优先级,靠后的显示在最前
    end
  end
  #--------------------------------------------------------------------------
  # ● 面向向右
  #--------------------------------------------------------------------------
  def turn_right
    unless @direction_fix
      @direction = 6
      @stop_count = 0
      @turn_z = [2,0,3,4,1,5] # 优先级,靠后的显示在最前
    end
  end
  #--------------------------------------------------------------------------
  # ● 面向向上
  # (这里感觉不太好处理,有些时候有的图一步在角色主图前,一步在角色主图后,
  # 不怎么好处理,只能麻烦美工了……比如范例里的盾牌……)
  #--------------------------------------------------------------------------
  def turn_up
    unless @direction_fix
      @direction = 8
      @stop_count = 0
      @turn_z = [0,1,2,3,4,5] # 优先级,靠后的显示在最前
    end
  end
end

#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
#  角色显示用脚本。监视 Game_Character 类的实例、
# 自动变化脚本状态。
#==============================================================================

class Sprite_Player < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :part                # 角色
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     viewport  : 查看端口
  #     character : 角色 (Game_Character)
  #--------------------------------------------------------------------------
  def initialize(viewport, part)
    super(viewport)
    @part = part
    @character = $game_player
    self.z += $game_player.turn_z.index(part)
    update
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    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 为有效值的情况下
      pic = @character.part_name[@part]
      self.bitmap = RPG::Cache.character(pic, @character.character_hue)
      @cw = bitmap.width / 4
      @ch = bitmap.height / 4
      self.ox = @cw / 2
      self.oy = @ch
    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.turn_z.index(part)
    # 设置不透明度、合成方式、茂密
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    # 动画
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    # 生成显示端口
    @viewport1 = Viewport.new(0, 0, 1280, 704)
    @viewport2 = Viewport.new(0, 0, 1280, 704)
    @viewport3 = Viewport.new(0, 0, 1280, 704)
    @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
      @tilemap.autotiles = 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
    # 生成角色活动块
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events)
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Player.new(@viewport1, 0)) # 主体
    @character_sprites.push(Sprite_Player.new(@viewport1, 1)) # 武器
    @character_sprites.push(Sprite_Player.new(@viewport1, 2)) # 盾牌
    @character_sprites.push(Sprite_Player.new(@viewport1, 3)) # 身体
    @character_sprites.push(Sprite_Player.new(@viewport1, 4)) # 头
    @character_sprites.push(Sprite_Player.new(@viewport1, 5)) #饰品
    # 生成天气
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures))
    end
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
end

#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # X☆R
  def self_is_player?
    return $game_party.actors[0] == self
  end
  #--------------------------------------------------------------------------
  # ● 变更装备
  #     equip_type : 装备类型
  #     id    : 武器 or 防具 ID  (0 为解除装备)
  #--------------------------------------------------------------------------
  alias add_equip_xdrs equip
  def equip(equip_type, id)
    add_equip_xdrs(equip_type, id)
    $game_player.refresh if self_is_player? #X☆R
  end
end
#==============================================================================
[/pre]
# 基于RMMV/MZ基础编写插件,持续更新,请多多支持.
# 需求人多的优先编写!最新消息请关注下面通道.

[插件交流群][个人插件网]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2018-2-7 22:34:28 | 显示全部楼层
你試一試 他的2013年版本,解決了这个問題,不过没試過
  1. #==============================================================================
  2. # ■ 角色装备行走图变更_—— 主角版
  3. #------------------------------------------------------------------------------
  4. #  使用了一种特殊的方法来改变行走图,不是更换,而是在原图的基础上继续描绘新的
  5. # 层以实现层的叠加,类似暗黑里的装备帽子以后角色的行走图就多出帽子,装备盾牌以
  6. # 后就会看到角色的左手拿着盾牌。
  7. #
  8. # 使用说明:
  9. # 全部都是在数据库里设置,对应的武器或防具后逗号追加一个图片文件名即可,此文件
  10. # 放在graphics/characters下,至于图片的绘制,实属虐待美工…… 具体可参考范例里
  11. # 的graphics/characters目录。
  12. #
  13. # 此部分为通用脚本。
  14. #==============================================================================
  15. module RPG
  16.   class Weapon
  17.     def name
  18.       return @name.split(/,/)[0]
  19.     end
  20.     def part
  21.       return @name.split(/,/)[1]
  22.     end
  23.   end
  24.   
  25.   class Armor
  26.     def name
  27.       return @name.split(/,/)[0]
  28.     end
  29.     def part
  30.       return @name.split(/,/)[1]
  31.     end
  32.   end
  33. end

  34. #==============================================================================
  35. # ■ Game_Player
  36. #------------------------------------------------------------------------------
  37. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  38. # 本类的实例请参考 $game_player。
  39. #==============================================================================

  40. class Game_Player < Game_Character
  41.   attr_accessor :change                 # 重绘行走图开关
  42.   def refresh
  43.     # 同伴人数为 0 的情况下
  44.     if $game_party.actors.size == 0
  45.       # 清除角色的文件名及对像
  46.       @character_name = ""
  47.       @character_hue = 0
  48.       # 分支结束
  49.       return
  50.     end
  51.     # 获取带头的角色
  52.     actor = $game_party.actors[0]
  53.     # 设置角色的文件名及对像
  54.     @character_name = actor.character_name
  55.     @character_hue = actor.character_hue
  56.     # 初始化不透明度和合成方式子
  57.     @opacity = 255
  58.     @blend_type = 0
  59.     pic = RPG::Cache.character(@character_name,0)
  60.     width = pic.width
  61.     height = pic.height
  62.     $player_bitmap = Bitmap.new(width, height)
  63.     self.part_update
  64.   end
  65. end

  66. class Game_Actor < Game_Battler
  67.   #--------------------------------------------------------------------------
  68.   # ● 变更装备
  69.   #     equip_type : 装备类型
  70.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  71.   #--------------------------------------------------------------------------
  72.   alias old_equip equip
  73.   def equip(equip_type, id)
  74.     old_equip(equip_type, id)
  75.     $game_player.part_update if $game_party.actors.index(self) == 0
  76.   end
  77. end

  78. class Scene_Title
  79.   #--------------------------------------------------------------------------
  80.   # ● 命令 : 新游戏
  81.   #--------------------------------------------------------------------------
  82.   def command_new_game
  83.     # 演奏确定 SE
  84.     $game_system.se_play($data_system.decision_se)
  85.     # 停止 BGM
  86.     Audio.bgm_stop
  87.     # 重置测量游戏时间用的画面计数器
  88.     Graphics.frame_count = 0
  89.     # 生成各种游戏对像
  90.     $game_temp          = Game_Temp.new
  91.     $game_system        = Game_System.new
  92.     $game_switches      = Game_Switches.new
  93.     $game_variables     = Game_Variables.new
  94.     $game_self_switches = Game_SelfSwitches.new
  95.     $game_screen        = Game_Screen.new
  96.     $game_actors        = Game_Actors.new
  97.     $game_party         = Game_Party.new
  98.     $game_troop         = Game_Troop.new
  99.     $game_map           = Game_Map.new
  100.     # 设置初期同伴位置
  101.     $game_party.setup_starting_members
  102.     $game_player        = Game_Player.new
  103.     # 设置初期位置的地图
  104.     $game_map.setup($data_system.start_map_id)
  105.     # 主角向初期位置移动
  106.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  107.     # 刷新主角
  108.     $game_player.refresh
  109.     # 执行地图设置的 BGM 与 BGS 的自动切换
  110.     $game_map.autoplay
  111.     # 刷新地图 (执行并行事件)
  112.     $game_map.update
  113.     # 切换地图画面
  114.     $scene = Scene_Map.new
  115.   end
  116. end

  117. class Scene_Map
  118.   #--------------------------------------------------------------------------
  119.   # ● 主处理
  120.   #--------------------------------------------------------------------------
  121.   alias old_main main
  122.   def main
  123.     # 生成活动块
  124.     $game_player.part_update
  125.     old_main
  126.   end
  127. end
复制代码
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部