Project1

标题: 怎样使只有某特定角色才能使用某战斗物品 [打印本页]

作者: 夏天的枫    时间: 2010-7-27 09:43
标题: 怎样使只有某特定角色才能使用某战斗物品
比如,我设定一个物品扔出去能使敌人混乱,但是我希望只有角色a才能在战斗中投掷这个物品,其他角色不行。问问各位大虾该如何实现?
作者: goahead    时间: 2010-7-27 09:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: kukurui00    时间: 2010-7-27 10:01
看图

未命名.jpg (11.91 KB, 下载次数: 6)

未命名.jpg

作者: 夏天的枫    时间: 2010-7-27 10:01

我是这样实现投掷的。。
作者: kukurui00    时间: 2010-7-27 10:04
加个公共事件就行勒
作者: 夏天的枫    时间: 2010-7-27 10:07
kukurui00 我不明白,你那个是显示文章,具体怎么设定呢?
另外,在同伴中是指该角色在队伍中所有人就能使用还是只有该角色能使用?
作者: kukurui00    时间: 2010-7-27 10:09
只有该角色才能使用  
作者: 夏天的枫    时间: 2010-7-27 10:15
那具体怎么操作呢?
如果是更改敌人状态貌似不能选定特定敌人?1,2,3,4是啥意思?
作者: kukurui00    时间: 2010-7-27 10:18
敌人的ID  
作者: 认真的学    时间: 2010-7-27 12:13
本帖最后由 认真的学 于 2010-7-27 19:16 编辑

脚本找到Scene_Battle 3,225行下插入:
if @item.id == 1  #物品ID
  if @active_battler.name !="阿尔西斯"  #角色名称
     $game_system.se_play($data_system.buzzer_se)
     return
  end
end
当然也可以用case,多个角色可以使用的话用&&连接吧
作者: 逸豫    时间: 2010-7-27 12:21
  1. class Game_Party
  2.   alias icu item_can_use?
  3.   def item_can_use?(item_id,actor_id = 1000)
  4.     occasion = $data_items[item_id].occasion
  5.     if actor_id != 1000
  6.       if $game_temp.in_battle && item_id == 1 && actor_id == 1 && item_number(item_id) != 0 && (occasion == 0 or occasion == 1)
  7.         return  true
  8.       else
  9.         return false
  10.       end
  11.     end
  12.     icu(item_id)
  13.   end
  14. end
复制代码
把这段脚本扔到Main前面
然后在Game_Battle 3 里面找到这句
      unless $game_party.item_can_use?(@item.id)
改成
      unless $game_party.item_can_use?(@item.id,@active_battler.id)
脚本第六行的      
item_id == 1 && actor_id == 1
前面一个1是物品id 后面一个是指定角色id

最后,6~10行可以复制N次,产生n个指定角色物品
作者: 夏天的枫    时间: 2010-7-27 17:45
还是不行,按10楼的方法发生了错误
[attach]19892[/attach]

想按11楼的方法可是找不到
unless $game_party.item_can_use?(@item.id)

作者: 夏天的枫    时间: 2010-7-27 17:46
补上用10楼的方法时的图片
作者: 夏天的枫    时间: 2010-7-27 17:47

ls发错了,不好意思
作者: 逸豫    时间: 2010-7-27 17:57
啊,那个,不是Game_Battler 是 Scene_Battle 不小心手误了……
作者: 夏天的枫    时间: 2010-7-27 18:07
本帖最后由 夏天的枫 于 2010-7-27 18:11 编辑

终于可以了,十分感谢楼上,不过此时其他角色想使用那个特定物品时物品还是亮着的只是按不动,能否使其像其他无法在战斗中使用的物品一样变暗呢?
作者: 夏天的枫    时间: 2010-7-27 18:54
又发生新问题了,我把6-10行复制到11-15行然后改了一下物品id但是11-15行的似乎无效,导致现在在战斗中连回复药水都无法使用了...这是怎么回事呢?
作者: 逸豫    时间: 2010-7-27 19:29
  1. class Game_Party
  2.   def item_can_use?(item_id)
  3.     # 物品个数为 0 的情况
  4.     if item_number(item_id) == 0
  5.       # 不能使用
  6.       return false
  7.     end
  8.     # 获取可以使用的时候
  9.     occasion = $data_items[item_id].occasion
  10.     # 战斗的情况
  11.     if $game_temp.in_battle
  12.       # 可以使用时为 0 (平时) 或者是 1 (战斗时) 可以使用
  13.       return (occasion == 0 or occasion == 1)
  14.     end
  15.     # 可以使用时为 0 (平时) 或者是 2 (菜单时) 可以使用
  16.     return (occasion == 0 or occasion == 2)
  17.   end
  18. end
  19. $特定物品 = {1 => 1,15 => 2}  #箭头前为物品id 箭头后为特定角色id 英文半角逗号分隔
  20. class Game_Party
  21.   alias icu item_can_use?
  22.   def item_can_use?(item_id,actor_id = 1000)
  23.     occasion = $data_items[item_id].occasion
  24.     if actor_id != 1000
  25.       if $game_temp.in_battle && $特定物品.keys.include?(item_id)
  26.         if actor_id == $特定物品[item_id] && item_number(item_id) != 0 && (occasion == 0 or occasion == 1)
  27.           return  true
  28.         else
  29.           return false
  30.         end
  31.       end
  32.     end
  33.     icu(item_id)
  34.   end
  35. end
  36. class Window_Item
  37.   alias xtdf_initialize initialize
  38.   def initialize(actor_id = 1000)
  39.     @actor_id = actor_id
  40.     xtdf_initialize
  41.   end
  42.   def draw_item(index)
  43.     item = @data[index]
  44.     case item
  45.     when RPG::Item
  46.       number = $game_party.item_number(item.id)
  47.     when RPG::Weapon
  48.       number = $game_party.weapon_number(item.id)
  49.     when RPG::Armor
  50.       number = $game_party.armor_number(item.id)
  51.     end
  52.     if item.is_a?(RPG::Item) and
  53.        $game_party.item_can_use?(item.id,@actor_id)
  54.       self.contents.font.color = normal_color
  55.     else
  56.       self.contents.font.color = disabled_color
  57.     end
  58.     x = 4 + index % 2 * (288 + 32)
  59.     y = index / 2 * 32
  60.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  61.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  62.     bitmap = RPG::Cache.icon(item.icon_name)
  63.     opacity = self.contents.font.color == normal_color ? 255 : 128
  64.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  65.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  66.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  67.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  68.   end
  69. end
复制代码
Game_Battle 3的这句话
    @item_window = Window_Item.new
改为
    @item_window = Window_Item.new(@active_battler.id)
作者: 认真的学    时间: 2010-7-27 19:35
本帖最后由 认真的学 于 2010-7-27 19:41 编辑

我在10楼手滑打错字......修改完毕10L脚本可以使用,但是也没有【变暗】的效果。
LZ用11L脚本出问题,第一个问题LZ有没有把6-10行复制到10行的end后?
第二个问题有没有修改各种ID。
第三个问题我不大确认,就是11L好像把原来的can_use给换掉了,但是又因为这个判断要求使用物品时只能是1号角色使用1号物品,其他情况都不可以,所以使用物品的时候除了1号角色可以使用1号物品之外,其他角色都不能使用物品,1号角色也不能使用其他物品。
如果LZ还是想用11L的脚本的话,小小修改一下就可以使用:
  1. class Game_Party
  2.   alias icu item_can_use?
  3.   def item_can_use?(item_id,actor_id = 1000)
  4.     occasion = $data_items[item_id].occasion
  5.     if actor_id != 1000
  6.       if item_id == 1
  7.         if $game_temp.in_battle && actor_id == 2 && item_number(item_id) != 0 && (occasion == 0 or occasion == 1)
  8.           return  true
  9.         else
  10.          return false
  11.         end
  12.       else
  13.         return true
  14.       end
  15.     end
  16.     icu(item_id)
  17.   end
  18. end
复制代码
6-14行可以无限复制,其他要求同11
(刚刚才发现回答晚了,LZ还是用LS的比较好嗯)
作者: 夏天的枫    时间: 2010-7-27 23:29
现在用了18楼的脚本,目前已经完全没有问题了,十分感谢两位大虾
作者: mugencomic    时间: 2012-1-3 21:15
逸豫 发表于 2010-7-27 19:29
Game_Battle 3的这句话
    @item_window = Window_Item.new
改为

原谅我挖一下坟……脚本本身没问题,在跟RTAB整合的时候碰到了点麻烦。本来以为RTAB核心只改了SCENE_BATTLE的前面部分,冲突应该没有才对——
战斗中点开道具菜单的话,只有道具变灰这项在起作用,但跟人物无关,每个人的这种道具都显示变灰。估计是没能引入ACTIVE_BATTLE.ID?然后实际上不管变不变灰都能使用这道具。
奇怪我都把这脚本放最底了,到底内鬼在哪??




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