Project1

标题: 如何双手剑的效果?即装备了双手剑就无法装备盾了。 [打印本页]

作者: 爆焰    时间: 2017-9-20 23:37
标题: 如何双手剑的效果?即装备了双手剑就无法装备盾了。
如何双手剑的效果?即装备了双手剑就无法装备盾了。盾的位置栏里显示一个跟双手剑名字一样的灰色名称效果会更好。
作者: ayasekoyuki    时间: 2017-9-21 00:10
做两把一样的剑,一个设置成武器一个设置成盾,再在用语里面分别改成左手和右手
(神经病式解决法)
作者: 亿万星辰    时间: 2017-9-21 14:42
如果不强求灰色的话,每次从菜单退出来的时候打开个开关,然后用公共事件判断一下角色是否装备了一件双手武器,如果是,那就把盾牌卸了,这样似乎动F11少一些。
如果想完善一下,那就修改下Game_Actor里用于装备的那个方法,如果当前装备的武器时一件双手武器(通过武器的属性来给)时,把盾牌卸掉;然后再修改用于显示的方法,如果武器时双手武器时,盾牌位置就用灰色显示武器名字。
作者: kk688005    时间: 2017-9-21 15:48
数据库我们改变不了。。
但是游戏运行时候的东西要实现的话用脚本还是可以的。。
作者: 酋长的图腾    时间: 2017-9-21 18:52
本帖最后由 酋长的图腾 于 2017-9-21 19:31 编辑

把下面脚本插入Main之前
RUBY 代码复制
  1. #======================================
  2. #  在这里设置双手剑的属性id。
  3. #  双手剑类型的武器要为其添加相应属性。
  4. #  属性要在数据库里设置。
  5.  
  6.    ELEMENT_NUM = 20
  7. #======================================
  8.  
  9. #==============================================================================
  10. # ■ Window_Base
  11. #------------------------------------------------------------------------------
  12. #  游戏中全部窗口的超级类。
  13. #==============================================================================
  14.  
  15. class Window_Base < Window
  16.   #--------------------------------------------------------------------------
  17.   # ● 描绘物品名
  18.   #     item : 物品
  19.   #     x    : 描画目标 X 坐标
  20.   #     y    : 描画目标 Y 坐标
  21.   #--------------------------------------------------------------------------
  22.   #★★★★★★
  23.   def draw_item_name(item, x, y)
  24.     if item == nil
  25.       return
  26.     end
  27.     unless @bitmap_tag
  28.       bitmap = RPG::Cache.icon(item.icon_name)
  29.       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  30.     end
  31.     self.contents.font.color = normal_color unless $scene.is_a?(Scene_Equip)
  32.     self.contents.draw_text(x + 28, y, 212, 32, item.name)
  33.   end
  34. end
  35. #==============================================================================
  36. # ■ Window_EquipRight
  37. #------------------------------------------------------------------------------
  38. #  装备画面、显示角色现在装备的物品的窗口。
  39. #==============================================================================
  40.  
  41. class Window_EquipRight < Window_Selectable
  42.   #--------------------------------------------------------------------------
  43.   # ● 刷新
  44.   #--------------------------------------------------------------------------
  45.   def refresh
  46.     self.contents.clear
  47.     @data = []
  48.     @data.push($data_weapons[@actor.weapon_id])
  49.     @data.push($data_armors[@actor.armor1_id])
  50.     @data.push($data_armors[@actor.armor2_id])
  51.     @data.push($data_armors[@actor.armor3_id])
  52.     @data.push($data_armors[@actor.armor4_id])
  53.     #★★★★★★
  54.     if @actor.weapon_id != 0
  55.       if $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
  56.         @data[1] = $data_weapons[@actor.weapon_id]
  57.       end
  58.     end
  59.     #★★★★★★
  60.     @item_max = @data.size
  61.     self.contents.font.color = system_color
  62.     self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
  63.     self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
  64.     self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
  65.     self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
  66.     self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
  67.  
  68.     self.contents.font.color = normal_color
  69.     draw_item_name(@data[0], 92, 32 * 0)
  70.     #★★★★★★
  71.     @bitmap_tag = false
  72.     if @actor.weapon_id != 0
  73.       if $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
  74.         self.contents.font.color = disabled_color
  75.         @bitmap_tag = true
  76.       end
  77.     end
  78.     draw_item_name(@data[1], 92, 32 * 1)
  79.     self.contents.font.color = normal_color
  80.     @bitmap_tag = false
  81.     #★★★★★★
  82.     draw_item_name(@data[2], 92, 32 * 2)
  83.     draw_item_name(@data[3], 92, 32 * 3)
  84.     draw_item_name(@data[4], 92, 32 * 4)
  85.   end
  86. end
  87.  
  88. #==============================================================================
  89. # ■ Scene_Equip
  90. #------------------------------------------------------------------------------
  91. #  处理装备画面的类。
  92. #==============================================================================
  93.  
  94. class Scene_Equip
  95.     #--------------------------------------------------------------------------
  96.   # ● 刷新画面 (右侧窗口被激活的情况下)
  97.   #--------------------------------------------------------------------------
  98.   def update_right
  99.     # 按下 B 键的情况下
  100.     if Input.trigger?(Input::B)
  101.       # 演奏取消 SE
  102.       $game_system.se_play($data_system.cancel_se)
  103.       # 切换到菜单画面
  104.       $scene = Scene_Menu.new(2)
  105.       return
  106.     end
  107.     # 按下 C 键的情况下
  108.     if Input.trigger?(Input::C)
  109.       # 固定装备的情况下
  110.       if @actor.equip_fix?(@right_window.index)
  111.         # 演奏冻结 SE
  112.         $game_system.se_play($data_system.buzzer_se)
  113.         return
  114.       end
  115.       # 演奏确定 SE
  116.       $game_system.se_play($data_system.decision_se)
  117.  
  118.       #★★★★★★
  119.       if @right_window.index == 1
  120.         if @actor.weapon_id != 0
  121.           unless $data_weapons[@actor.weapon_id].element_set.include?(ELEMENT_NUM)
  122.             # 激活物品窗口
  123.             @right_window.active = false
  124.             @item_window.active = true
  125.             @item_window.index = 0
  126.             return
  127.           end
  128.         else
  129.             # 激活物品窗口
  130.             @right_window.active = false
  131.             @item_window.active = true
  132.             @item_window.index = 0
  133.             return
  134.         end
  135.       else
  136.           # 激活物品窗口
  137.           @right_window.active = false
  138.           @item_window.active = true
  139.           @item_window.index = 0
  140.           return
  141.       end
  142.       #★★★★★★\
  143.  
  144.     end
  145.     # 按下 R 键的情况下
  146.     if Input.trigger?(Input::R)
  147.       # 演奏光标 SE
  148.       $game_system.se_play($data_system.cursor_se)
  149.       # 移至下一位角色
  150.       @actor_index += 1
  151.       @actor_index %= $game_party.actors.size
  152.       # 切换到别的装备画面
  153.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  154.       return
  155.     end
  156.     # 按下 L 键的情况下
  157.     if Input.trigger?(Input::L)
  158.       # 演奏光标 SE
  159.       $game_system.se_play($data_system.cursor_se)
  160.       # 移至上一位角色
  161.       @actor_index += $game_party.actors.size - 1
  162.       @actor_index %= $game_party.actors.size
  163.       # 切换到别的装备画面
  164.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  165.       return
  166.     end
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 刷新画面 (物品窗口被激活的情况下)
  170.   #--------------------------------------------------------------------------
  171.   def update_item
  172.     # 按下 B 键的情况下
  173.     if Input.trigger?(Input::B)
  174.       # 演奏取消 SE
  175.       $game_system.se_play($data_system.cancel_se)
  176.       # 激活右侧窗口
  177.       @right_window.active = true
  178.       @item_window.active = false
  179.       @item_window.index = -1
  180.       return
  181.     end
  182.     # 按下 C 键的情况下
  183.     if Input.trigger?(Input::C)
  184.       # 演奏装备 SE
  185.       $game_system.se_play($data_system.equip_se)
  186.       # 获取物品窗口现在选择的装备数据
  187.       item = @item_window.item
  188.  
  189.       # 变更装备
  190.       #★★★★★★
  191.       if item != nil
  192.         unless @right_window.index == 0 and @actor.armor1_id != 0 and
  193.                item.element_set.include?(ELEMENT_NUM)
  194.           @actor.equip(@right_window.index, item == nil ? 0 : item.id)
  195.           # 激活右侧窗口
  196.           @right_window.active = true
  197.           @item_window.active = false
  198.           @item_window.index = -1
  199.           # 再生成右侧窗口、物品窗口的内容
  200.           @right_window.refresh
  201.           @item_window.refresh
  202.           return
  203.         end
  204.       else
  205.           @actor.equip(@right_window.index, item == nil ? 0 : item.id)
  206.           # 激活右侧窗口
  207.           @right_window.active = true
  208.           @item_window.active = false
  209.           @item_window.index = -1
  210.           # 再生成右侧窗口、物品窗口的内容
  211.           @right_window.refresh
  212.           @item_window.refresh
  213.           return
  214.       end
  215.       #★★★★★★
  216.  
  217.  
  218.     end
  219.   end
  220. end

详见范例工程。

双手剑士与盾士.rar

191.48 KB, 下载次数: 83

范例工程


作者: 爆焰    时间: 2017-9-27 17:36
本帖最后由 爆焰 于 2017-10-12 05:03 编辑

(错误回复)请删除




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1