查看: 3325|回复: 8

[已经解决] 如何双手剑的效果?即装备了双手剑就无法装备盾了。

[复制链接]
梦石
0
星屑
3181
在线时间
1439 小时
注册时间
2009-7-27
回帖
1187
发表于 2017-9-20 23:37:05 | 显示全部楼层 |阅读模式

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

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

×
如何双手剑的效果?即装备了双手剑就无法装备盾了。盾的位置栏里显示一个跟双手剑名字一样的灰色名称效果会更好。

博客:我的博客
梦石
0
星屑
50
在线时间
188 小时
注册时间
2016-8-22
回帖
141
发表于 2017-9-21 00:10:24 | 显示全部楼层
做两把一样的剑,一个设置成武器一个设置成盾,再在用语里面分别改成左手和右手
(神经病式解决法)

点评

不对。双手武器和双武器的区别  发表于 2017-9-21 08:22
回复

使用道具 举报

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 2017-9-21 14:42:41 | 显示全部楼层
如果不强求灰色的话,每次从菜单退出来的时候打开个开关,然后用公共事件判断一下角色是否装备了一件双手武器,如果是,那就把盾牌卸了,这样似乎动F11少一些。
如果想完善一下,那就修改下Game_Actor里用于装备的那个方法,如果当前装备的武器时一件双手武器(通过武器的属性来给)时,把盾牌卸掉;然后再修改用于显示的方法,如果武器时双手武器时,盾牌位置就用灰色显示武器名字。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

梦石
0
星屑
229
在线时间
17 小时
注册时间
2007-8-22
回帖
96
发表于 2017-9-21 15:48:20 | 显示全部楼层
数据库我们改变不了。。
但是游戏运行时候的东西要实现的话用脚本还是可以的。。

评分

参与人数 1星屑 -10 收起 理由
RyanBern -10 请不要回复对楼主问题无帮助的答案.

查看全部评分

不要麻仁.
回复

使用道具 举报

梦石
0
星屑
448
在线时间
123 小时
注册时间
2010-9-27
回帖
19

开拓者

发表于 2017-9-21 18:52:03 | 显示全部楼层
本帖最后由 酋长的图腾 于 2017-9-21 19:31 编辑

把下面脚本插入Main之前
[pre lang="ruby" line="1"]#======================================
#  在这里设置双手剑的属性id。
#  双手剑类型的武器要为其添加相应属性。
#  属性要在数据库里设置。

   ELEMENT_NUM = 20
#======================================

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中全部窗口的超级类。
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 描绘物品名
  #     item : 物品
  #     x    : 描画目标 X 坐标
  #     y    : 描画目标 Y 坐标
  #--------------------------------------------------------------------------
  #★★★★★★
  def draw_item_name(item, x, y)
    if item == nil
      return
    end
    unless @bitmap_tag
      bitmap = RPG::Cache.icon(item.icon_name)
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    end
    self.contents.font.color = normal_color unless $scene.is_a?(Scene_Equip)
    self.contents.draw_text(x + 28, y, 212, 32, item.name)
  end
end
#==============================================================================
# ■ Window_EquipRight
#------------------------------------------------------------------------------
#  装备画面、显示角色现在装备的物品的窗口。
#==============================================================================

class Window_EquipRight < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @data = []
    @data.push($data_weapons[@actor.weapon_id])
    @data.push($data_armors[@actor.armor1_id])
    @data.push($data_armors[@actor.armor2_id])
    @data.push($data_armors[@actor.armor3_id])
    @data.push($data_armors[@actor.armor4_id])
    #★★★★★★
    if @actor.weapon_id != 0
      if $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
        @data[1] = $data_weapons[@actor.weapon_id]
      end
    end
    #★★★★★★
    @item_max = @data.size
    self.contents.font.color = system_color
    self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
    self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
    self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
    self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
    self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
   
    self.contents.font.color = normal_color
    draw_item_name(@data[0], 92, 32 * 0)
    #★★★★★★
    @bitmap_tag = false
    if @actor.weapon_id != 0
      if $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
        self.contents.font.color = disabled_color
        @bitmap_tag = true
      end
    end
    draw_item_name(@data[1], 92, 32 * 1)
    self.contents.font.color = normal_color
    @bitmap_tag = false
    #★★★★★★
    draw_item_name(@data[2], 92, 32 * 2)
    draw_item_name(@data[3], 92, 32 * 3)
    draw_item_name(@data[4], 92, 32 * 4)
  end
end

#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  处理装备画面的类。
#==============================================================================

class Scene_Equip
    #--------------------------------------------------------------------------
  # ● 刷新画面 (右侧窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_right
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(2)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 固定装备的情况下
      if @actor.equip_fix?(@right_window.index)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      
      #★★★★★★
      if @right_window.index == 1
        if @actor.weapon_id != 0
          unless $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
            # 激活物品窗口
            @right_window.active = false
            @item_window.active = true
            @item_window.index = 0
            return
          end
        else
            # 激活物品窗口
            @right_window.active = false
            @item_window.active = true
            @item_window.index = 0
            return
        end
      else
          # 激活物品窗口
          @right_window.active = false
          @item_window.active = true
          @item_window.index = 0
          return
      end
      #★★★★★★\
      
    end
    # 按下 R 键的情况下
    if Input.trigger?(Input::R)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至下一位角色
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 切换到别的装备画面
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
    # 按下 L 键的情况下
    if Input.trigger?(Input::L)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至上一位角色
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 切换到别的装备画面
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏装备 SE
      $game_system.se_play($data_system.equip_se)
      # 获取物品窗口现在选择的装备数据
      item = @item_window.item
      
      # 变更装备
      #★★★★★★
      if item != nil
        unless @right_window.index == 0 and @actor.armor1_id != 0 and
               item.element_set.include?(ELEMENT_NUM)
          @actor.equip(@right_window.index, item == nil ? 0 : item.id)
          # 激活右侧窗口
          @right_window.active = true
          @item_window.active = false
          @item_window.index = -1
          # 再生成右侧窗口、物品窗口的内容
          @right_window.refresh
          @item_window.refresh
          return
        end
      else
          @actor.equip(@right_window.index, item == nil ? 0 : item.id)
          # 激活右侧窗口
          @right_window.active = true
          @item_window.active = false
          @item_window.index = -1
          # 再生成右侧窗口、物品窗口的内容
          @right_window.refresh
          @item_window.refresh
          return
      end
      #★★★★★★
      

    end
  end
end[/pre]
详见范例工程。

双手剑士与盾士.rar

191.48 KB, 下载次数: 83

范例工程

点评

谢谢SailCat前辈的指点!我会继续努力学习的!  发表于 2017-10-5 22:44
说严重点(不是针对层主),所有用属性实现扩展效果但是没有对Game_Actor之element_rate或element_correct方法做出相应变更的都是耍流氓……  发表于 2017-10-1 22:46

评分

参与人数 1赞 +1 收起 理由
RyanBern + 1 精品文章

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
3181
在线时间
1439 小时
注册时间
2009-7-27
回帖
1187
 楼主| 发表于 2017-9-27 17:36:17 | 显示全部楼层
本帖最后由 爆焰 于 2017-10-12 05:03 编辑

(错误回复)请删除

博客:我的博客
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部