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

Project1

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

[已经过期] 如何禁止主角不穿装备

[复制链接]

Lv2.观梦者

梦石
0
星屑
653
在线时间
2658 小时
注册时间
2010-6-28
帖子
1361

开拓者

跳转到指定楼层
1
发表于 2012-1-5 12:34:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问怎么禁止主角不穿装备,即当主角只有一件装备(包括武器防具什么的)时,禁止脱下目前装备中的装备,但是允许更换装备。通过搜索我有看到沉影不器写的脚本,但是用了后没效果……所以想问一下怎么弄……
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 更改装备 (指定 ID)
  4.   #--------------------------------------------------------------------------
  5.   def change_equip_by_id(equip_type, item_id, test = false)
  6.     return if self.class.weapon_set.size == 1
  7.     if equip_type == 0 or (equip_type == 1 and two_swords_style)
  8.       change_equip(equip_type, $data_weapons[item_id], test)
  9.     else
  10.       change_equip(equip_type, $data_armors[item_id], test)
  11.     end
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 更改装备 (指定对象)
  15.   #--------------------------------------------------------------------------
  16.   def change_equip(equip_type, item, test = false)
  17.     return if self.class.weapon_set.size == 1
  18.     last_item = equips[equip_type]
  19.     unless test
  20.       return if $game_party.item_number(item) == 0 if item != nil
  21.       $game_party.gain_item(last_item, 1)
  22.       $game_party.lose_item(item, 1)
  23.     end
  24.     item_id = item == nil ? 0 : item.id
  25.     case equip_type
  26.     when 0  # 武器
  27.       @weapon_id = item_id
  28.       unless two_hands_legal?             # 违反双手拿取的情况下
  29.         change_equip(1, nil, test)        # 解除反手的装备
  30.       end
  31.     when 1  # 盾
  32.       @armor1_id = item_id
  33.       unless two_hands_legal?             # 违反双手拿取的情况下
  34.         change_equip(0, nil, test)        # 解除反手的装备
  35.       end
  36.     when 2  # 头
  37.       @armor2_id = item_id
  38.     when 3  # 身体
  39.       @armor3_id = item_id
  40.     when 4  # 装饰品
  41.       @armor4_id = item_id
  42.     end
  43.   end
  44. end
复制代码

点评

那你看看有没有其他脚本改了这里?  发表于 2012-1-5 14:41

                 无从有中来,有从无中生。

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

2
发表于 2012-1-5 13:25:07 | 只看该作者
本帖最后由 feizhaodan 于 2012-1-5 13:27 编辑

替换原Scene_Equip的更新装备物品选择。因该是这个效果吧
  1.   #--------------------------------------------------------------------------
  2.   # ● 更新装备物品选择
  3.   #--------------------------------------------------------------------------
  4.   def update_item_selection
  5.     if Input.trigger?(Input::B)
  6.       Sound.play_cancel
  7.       @equip_window.active = true
  8.       @item_window.active = false
  9.       @item_window.index = -1
  10.     elsif Input.trigger?(Input::C)
  11.       if @actor.equips.size > 1 or @item_window.item != nil
  12.         Sound.play_equip
  13.         @actor.change_equip(@equip_window.index, @item_window.item)
  14.         @equip_window.active = true
  15.         @item_window.active = false
  16.         @item_window.index = -1
  17.         @equip_window.refresh
  18.         for item_window in @item_windows
  19.           item_window.refresh
  20.         end
  21.       else
  22.         Sound.play_buzzer
  23.       end
  24.     end
  25.   end
复制代码
有一个副作用,对着空槽装备空装备的时候也会响警告。因该不用在意= =

点评

那你看看有没有其他脚本改了这里?  发表于 2012-1-5 14:39
=-=额……为什没有效果……已经按照您的方法改了可是还是没有效果><  发表于 2012-1-5 14:32
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
653
在线时间
2658 小时
注册时间
2010-6-28
帖子
1361

开拓者

3
 楼主| 发表于 2012-1-5 14:57:25 | 只看该作者
feizhaodan 发表于 2012-1-5 13:25
替换原Scene_Equip的更新装备物品选择。因该是这个效果吧有一个副作用,对着空槽装备空装备的时候 ...

我有用这个菜单……
  1. #_______________________________________________________________________________
  2. # SEL SCENE EQUIP MENU V2.0
  3. #_______________________________________________________________________________
  4. # By Selacius
  5. # Graphics by lomastul, MOGHUNTER
  6. # Original XP Script by MOGHUNTER
  7. #_______________________________________________________________________________

  8. module MOG
  9.   # Set Maximum (STR,DEX,AGL,INT)
  10.   MST_ST = 999
  11.   # Set Maximum (ATK,PDEF,MDEF)
  12.   MST_STE = 999
  13.   # Set Maximum (HP, MP)
  14.   MST_HMP = 9999
  15. end

  16. module Cache
  17.   def self.menu(filename)
  18.     load_bitmap("Graphics/Menus/", filename)
  19.   end
  20.   def self.icon(filename)
  21.    load_bitmap("Graphics/Icons/", filename)
  22.   end
  23. end

  24. #==============================================================================
  25. # ** Window_Equip
  26. #==============================================================================
  27. class Window_Equip < Window_Selectable
  28.   def initialize(actor)
  29.     super(260, 70, 220, 170)
  30.     self.contents = Bitmap.new(width - 32, height - 32)
  31.     self.opacity = 0
  32.     @actor = actor
  33.     refresh
  34.     self.index = 0
  35.   end
  36.   def item
  37.     return @data[self.index]
  38.   end
  39.   def refresh
  40.     self.contents.clear
  41.     @data = []
  42.     for item in @actor.equips do @data.push(item) end
  43.     @item_max = @data.size
  44.     self.contents.font.color = system_color
  45.     self.contents.font.bold = true
  46.     self.contents.font.shadow = true
  47.     self.contents.font.size = 14
  48.     draw_item_name_menu_equip(@actor.equips[0], 0, 0)
  49.     draw_item_name_menu_equip(@actor.equips[1], 0, 24)
  50.     draw_item_name_menu_equip(@actor.equips[2], 0, 48)
  51.     draw_item_name_menu_equip(@actor.equips[3], 0, 72)
  52.     draw_item_name_menu_equip(@actor.equips[4], 0, 96)
  53.   end
  54.   def draw_item_name_menu_equip(item, x, y, enabled = true)
  55.     if item != nil
  56.       draw_icon(item.icon_index, x, y, enabled)
  57.       self.contents.font.color = normal_color
  58.       self.contents.font.color.alpha = enabled ? 255 : 128
  59.       self.contents.draw_text(x + 30, y, 150, WLH, item.name)
  60.     end
  61.   end
  62.     def item_rect(index)
  63.     rect = Rect.new(0, 0, 0, 0)
  64.     rect.width = (contents.width + @spacing) / @column_max - @spacing
  65.     rect.height = WLH
  66.     rect.x = index % @column_max * (rect.width + @spacing)
  67.     rect.y = index / @column_max * WLH
  68.     return rect
  69.   end
  70. end

  71. #==============================================================================
  72. # ** Window_EquipStatus
  73. #------------------------------------------------------------------------------
  74. class Window_EquipStatus < Window_Base
  75.   def initialize(x, y, actor)
  76.     super(x, y, 270, 390)
  77.     self.contents = Bitmap.new(width - 32, height - 32)
  78.     self.opacity = 0
  79.     self.contents.font.bold = true
  80.     self.contents.font.shadow = true
  81.     self.contents.font.size = 14
  82.     @actor = actor
  83.     refresh
  84.   end
  85.   def refresh
  86.     self.contents.clear
  87.     drw_equist(0,390)
  88.     draw_actor_face(@actor, 4, 30)
  89.     draw_actor_name(@actor, 4, 10)
  90.     self.contents.draw_text(4, 130, 36, 24, @actor.level.to_s, 2)   
  91.     self.contents.draw_text(25, 145, 90, 24, @actor.class.name, 2)        
  92.     draw_actor_parameter2(@actor, 0, 162 , 4, 10)
  93.     draw_actor_parameter2(@actor, 0, 185 , 5, 10)
  94.     draw_actor_parameter2(@actor, 0, 208 , 0)
  95.     draw_actor_parameter2(@actor, 0, 231 , 1)
  96.     draw_actor_parameter2(@actor, 0, 256 , 3)
  97.     draw_actor_parameter2(@actor, 0, 279 , 2)
  98.     if @new_hp != nil
  99.       self.contents.font.color = system_color
  100.       if @new_hp < @actor.hp
  101.         drw_eqpup(140,185,2)
  102.         self.contents.font.color = Color.new(255,50,50,255)
  103.       elsif @new_hp > @actor.hp
  104.         drw_eqpup(140,185,1)
  105.         self.contents.font.color = Color.new(50,250,150,255)
  106.       else
  107.         drw_eqpup(140,188,0)
  108.         self.contents.font.color = Color.new(255,255,255,255)
  109.       end
  110.       self.contents.draw_text(165, 164, 36, 24, @new_hp.to_s, 2)
  111.     end
  112.     if @new_mp != nil
  113.       self.contents.font.color = system_color
  114.       if @new_mp < @actor.mp
  115.         drw_eqpup(140,207,2)
  116.         self.contents.font.color = Color.new(255,50,50,255)
  117.       elsif @new_mp > @actor.mp
  118.         drw_eqpup(140,207,1)
  119.         self.contents.font.color = Color.new(50,250,150,255)
  120.       else
  121.         drw_eqpup(140,210,0)
  122.         self.contents.font.color = Color.new(255,255,255,255)
  123.       end
  124.       self.contents.draw_text(165, 187, 36, 24, @new_mp.to_s, 2)
  125.     end
  126.     if @new_atk != nil
  127.       self.contents.font.color = system_color
  128.       if @new_atk < @actor.atk
  129.         drw_eqpup(140,230,2)
  130.         self.contents.font.color = Color.new(255,50,50,255)
  131.       elsif @new_atk > @actor.atk
  132.         drw_eqpup(140,230,1)
  133.         self.contents.font.color = Color.new(50,250,150,255)
  134.       else
  135.         drw_eqpup(140,234,0)
  136.         self.contents.font.color = Color.new(255,255,255,255)
  137.       end
  138.       self.contents.draw_text(165, 210, 36, 24, @new_atk.to_s, 2)
  139.     end
  140.     if @new_def != nil
  141.       if @new_def < @actor.def
  142.         drw_eqpup(140,254,2)
  143.         self.contents.font.color = Color.new(255,50,50,255)
  144.       elsif @new_def > @actor.def
  145.         drw_eqpup(140,254,1)
  146.         self.contents.font.color = Color.new(50,250,150,255)
  147.       else
  148.         drw_eqpup(140,257,0)
  149.         self.contents.font.color = Color.new(255,255,255,255)
  150.       end
  151.       self.contents.draw_text(165, 232, 36, 24, @new_def.to_s, 2)
  152.     end
  153.     if @new_agi != nil
  154.       if @new_agi < @actor.agi
  155.         drw_eqpup(140,279,2)
  156.         self.contents.font.color = Color.new(255,50,50,255)
  157.       elsif @new_agi > @actor.agi
  158.         drw_eqpup(140,279,1)
  159.         self.contents.font.color = Color.new(50,250,150,255)
  160.       else
  161.         drw_eqpup(140,282,0)
  162.         self.contents.font.color = Color.new(255,255,255,255)
  163.       end
  164.       self.contents.draw_text(165, 258, 36, 24, @new_agi.to_s, 2)
  165.     end
  166.     if @new_spi != nil
  167.       if @new_spi < @actor.spi
  168.         drw_eqpup(140,302,2)
  169.         self.contents.font.color = Color.new(255,50,50,255)
  170.       elsif @new_spi > @actor.spi
  171.         drw_eqpup(140,302,1)
  172.         self.contents.font.color = Color.new(50,250,150,255)
  173.       else
  174.         drw_eqpup(140,305,0)
  175.         self.contents.font.color = Color.new(255,255,255,255)
  176.       end
  177.       self.contents.draw_text(165, 281, 36, 24, @new_spi.to_s, 2)
  178.     end
  179.   end
  180.   def set_new_parameters(new_hp, new_mp, new_atk, new_def, new_spi, new_agi)
  181.     if @new_hp != new_hp or @new_mp != new_mp or
  182.        @new_atk != new_atk or @new_def != new_def or
  183.        @new_spi != new_spi or @new_agi != new_agi
  184.       @new_hp = new_hp
  185.       @new_mp = new_mp
  186.       @new_atk = new_atk
  187.       @new_def = new_def
  188.       @new_spi = new_spi
  189.       @new_agi = new_agi
  190.       refresh
  191.     end
  192.   end
  193.   def drw_equist(x,y)
  194.     equist = Cache.menu("Equip_St")
  195.     cw = equist.width
  196.     ch = equist.height
  197.     src_rect = Rect.new(0, 0, cw, ch)
  198.     self.contents.blt(x , y - ch, equist, src_rect)
  199.   end
  200.   def drw_eqpup(x,y,type)
  201.     case type
  202.     when 0
  203.       est = Cache.icon("ST_EQU")
  204.     when 1
  205.       est = Cache.icon("ST_UP")
  206.     when 2
  207.       est = Cache.icon("ST_DOWN")
  208.     end
  209.     cw = est.width
  210.     ch = est.height
  211.     src_rect = Rect.new(0, 0, cw, ch)
  212.     self.contents.blt(x , y - ch, est, src_rect)
  213.   end
  214.   def draw_actor_parameter2(actor, x, y, type, z = 0)
  215.     back = Cache.menu("Parameter_Bar_Back")
  216.     cw = back.width
  217.     ch = back.height
  218.     src_rect = Rect.new(0, 0, cw - 106 - z, ch)
  219.     self.contents.blt(x + 40 , y - ch + 18, back, src_rect)
  220.     meter = Cache.menu("Parameter_Bar")
  221.     case type
  222.     when 0
  223.       parameter_value = actor.atk
  224.       cw = (meter.width - 106) * actor.atk / MOG::MST_STE
  225.     when 1
  226.       parameter_value = actor.def
  227.       cw = (meter.width - 106) * actor.def / MOG::MST_STE
  228.     when 2
  229.       parameter_value = actor.spi
  230.       cw = (meter.width - 106) * actor.spi / MOG::MST_ST
  231.     when 3
  232.       parameter_value = actor.agi
  233.       cw = (meter.width - 106) * actor.agi / MOG::MST_ST
  234.     when 4
  235.       parameter_value = actor.hp
  236.       cw = (meter.width - 106 - z) * actor.hp / MOG::MST_HMP
  237.     when 5
  238.       parameter_value = actor.mp
  239.       cw = (meter.width - 106 - z) * actor.mp / MOG::MST_HMP
  240.     end
  241.     self.contents.font.color = normal_color
  242.     self.contents.draw_text(x + 100, y - 2, 36, 32, parameter_value.to_s, 2)
  243.     ch = meter.height
  244.     src_rect = Rect.new(0, 0, cw, ch)
  245.     self.contents.blt(x + 40 , y - ch + 18, meter, src_rect)
  246.   end
  247. end
  248. #==============================================================================
  249. # ** Window_EquipItem
  250. #==============================================================================
  251. class Window_EquipItem < Window_Item
  252.   def initialize(x, y, width, height, actor, equip_type)
  253.     @actor = actor
  254.     if equip_type == 1 and actor.two_swords_style
  255.       equip_type = 0                              # Change shield to weapon
  256.     end
  257.     @equip_type = equip_type
  258.     @column_max = 1
  259.     super(x, y, width, height)
  260.     refresh
  261.   end
  262.   def include?(item)
  263.     return true if item == nil
  264.     if @equip_type == 0
  265.       return false unless item.is_a?(RPG::Weapon)
  266.     else
  267.       return false unless item.is_a?(RPG::Armor)
  268.       return false unless item.kind == @equip_type - 1
  269.     end
  270.     return @actor.equippable?(item)
  271.   end
  272.   def enable?(item)
  273.     return true
  274.   end
  275. end

  276. #==============================================================================
  277. # ** Scene_Equip
  278. #==============================================================================
  279. class Scene_Equip < Scene_Base
  280.   EQUIP_TYPE_MAX = 5                      # Number of equip region
  281.   def initialize(actor_index = 0, equip_index = 0)
  282.     @actor_index = actor_index
  283.     @equip_index = equip_index
  284.   end
  285.   def start
  286.     super
  287.     @actor = $game_party.members[@actor_index]
  288.     @msk_back1 = Plane.new
  289.     @msk_back1.bitmap = Cache.menu("Background")
  290.     @msk_lay = Sprite.new
  291.     if @actor.two_swords_style
  292.       @msk_lay.bitmap = Cache.menu("Equip_Lay2")
  293.     else
  294.       @msk_lay.bitmap = Cache.menu("Equip_Lay")
  295.     end
  296.     @help_window = Window_Help.new(42,362)
  297.     @help_window.opacity = 0
  298.     create_item_windows
  299.     @equip_window = Window_Equip.new(@actor)
  300.     @equip_window.help_window = @help_window
  301.     @equip_window.index = @equip_index
  302.     @status_window = Window_EquipStatus.new(0, 30, @actor)
  303.   end
  304.   def update
  305.     @help_window.update
  306.     @equip_window.update
  307.     update_status_window
  308.     update_item_windows
  309.     @msk_back1.ox += 1   
  310.     if @equip_window.active
  311.       update_equip_selection
  312.     elsif @item_window.active
  313.       update_item_selection
  314.     end
  315.   end
  316.   def create_item_windows
  317.     @item_windows = []
  318.     for i in 0...EQUIP_TYPE_MAX
  319.       @item_windows[i] = Window_EquipItem.new(240, 208, 300, 170, @actor, i)
  320.       @item_windows[i].opacity = 0
  321.       @item_windows[i].help_window = @help_window
  322.       @item_windows[i].visible = (@equip_index == i)
  323.       @item_windows[i].active = false
  324.       @item_windows[i].index = -1
  325.     end
  326.   end
  327.   def update_status_window
  328.     if @equip_window.active
  329.       @status_window.set_new_parameters(nil, nil, nil, nil, nil, nil)
  330.     elsif @item_window.active
  331.       temp_actor = @actor.clone
  332.       temp_actor.change_equip(@equip_window.index, @item_window.item, true)
  333.       new_hp = temp_actor.hp
  334.       new_mp = temp_actor.mp
  335.       new_atk = temp_actor.atk
  336.       new_def = temp_actor.def
  337.       new_spi = temp_actor.spi
  338.       new_agi = temp_actor.agi
  339.       @status_window.set_new_parameters(new_hp, new_mp,new_atk, new_def, new_spi, new_agi)
  340.     end
  341.     @status_window.update
  342.   end
  343.   def terminate
  344.     super
  345.     @help_window.dispose
  346.     @equip_window.dispose
  347.     @status_window.dispose
  348.     dispose_item_windows
  349.   end
  350.   def update_equip_selection
  351.     if Input.trigger?(Input::B)
  352.       Sound.play_cancel
  353.       return_scene
  354.     elsif Input.trigger?(Input::RIGHT)
  355.       Sound.play_cursor
  356.       next_actor
  357.     elsif Input.trigger?(Input::LEFT)
  358.       Sound.play_cursor
  359.       prev_actor
  360.     elsif Input.trigger?(Input::C)
  361.       if @actor.fix_equipment
  362.         Sound.play_buzzer
  363.       else
  364.         Sound.play_decision
  365.         @equip_window.active = false
  366.         @item_window.active = true
  367.         @item_window.index = 0
  368.       end
  369.     end
  370.   end  
  371. end
复制代码
但是之后我新开工程用了您的方法也还是无用……

                 无从有中来,有从无中生。
回复

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

4
发表于 2012-1-5 15:07:13 | 只看该作者
我的米呀 发表于 2012-1-5 14:57
我有用这个菜单……但是之后我新开工程用了您的方法也还是无用……
  1.   #--------------------------------------------------------------------------
  2.   # ● 更新装备物品选择
  3.   #--------------------------------------------------------------------------
  4.   def update_item_selection
  5.     if Input.trigger?(Input::B)
  6.       Sound.play_cancel
  7.       @equip_window.active = true
  8.       @item_window.active = false
  9.       @item_window.index = -1
  10.     elsif Input.trigger?(Input::C)
  11.       if @actor.equips.compact.size > 1 or @item_window.item != nil
  12.         Sound.play_equip
  13.         @actor.change_equip(@equip_window.index, @item_window.item)
  14.         @equip_window.active = true
  15.         @item_window.active = false
  16.         @item_window.index = -1
  17.         @equip_window.refresh
  18.         for item_window in @item_windows
  19.           item_window.refresh
  20.         end
  21.       else
  22.         Sound.play_buzzer
  23.       end
  24.     end
  25.   end
复制代码
用这个。替换原Scene_Equip的update_item_selection。
没有想到竟然会返回Nil
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
653
在线时间
2658 小时
注册时间
2010-6-28
帖子
1361

开拓者

5
 楼主| 发表于 2012-1-5 15:32:33 | 只看该作者
feizhaodan 发表于 2012-1-5 15:07
用这个。替换原Scene_Equip的update_item_selection。
没有想到竟然会返回Nil ...

不好意思又要麻烦你了……
我把你的脚本和到我的菜单里了,然后现在盾牌确实不会掉了,但是我的武器却能脱下来,而且装不上去了……
能帮我看看是哪里出了问题吗……下面是我的菜单脚本第365行开始改的。
  1. elsif Input.trigger?(Input::C)
  2.           if @actor.equips.compact.size > 1 or @item_window.item != nil
  3.         Sound.play_equip
  4.         @actor.change_equip(@equip_window.index, @item_window.item)
  5.         @equip_window.active = true
  6.         @item_window.active = false
  7.         @item_window.index = -1
  8.         @equip_window.refresh
  9.         for item_window in @item_windows
  10.           item_window.refresh
  11.         end
  12.       else
  13.         Sound.play_buzzer
  14.       end
  15.     end
  16.   end
  17. end
复制代码

点评

抱歉,我也不知道怎么回事了= =我这里测试是没问题,是不是有用装备扩张似的脚本?  发表于 2012-1-5 16:11

                 无从有中来,有从无中生。
回复

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

6
发表于 2012-1-5 15:39:10 | 只看该作者
是不是双手装备武器?

点评

XD没有用装备扩张来着……  发表于 2012-1-5 17:26
不是,刚才又测试了下,发现只有饰品正常,其他都是可脱下+装不上……0 0我再去修改看看……  发表于 2012-1-5 15:41
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-31 07:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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