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

Project1

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

[已经解决] 【★】如何在与指定敌群的战斗中禁用特定道具?

[复制链接]

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4125
在线时间
5076 小时
注册时间
2012-1-15
帖子
4618

开拓者贵宾短篇七成年组亚军剧作品鉴家

跳转到指定楼层
1
发表于 2012-10-9 22:44:03 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 迷糊的安安 于 2012-10-25 10:57 编辑

本问题为【Ace推荐问答计划】活动问题。
详情请点击:http://rpg.blue/forum.php?mod=viewthread&tid=251118

基本要求:通过战斗事件设置,将特定消耗物品在与特定敌群的战斗中变为不可使用,物品说明变更为类似"受到邪恶力量的影响,你无法使用任何回复道具。"的说明性文字。战斗之后复原。

进阶要求:通过在战斗事件的第一行写上类似这样的注释【DisableItem(1,2,3,8)#DisableSkill(26,27,28,29,30)#Reason"受到邪恶力量的影响,你无法使用任何回复道具或法术。"】来实现这样的功能——物品编号为1、2、3、8的物品显示为灰色不可使用、技能编号为26、27、28、29、30的技能显示为灰色不可使用,将光标移动到被禁用的道具或者法术上时,画面上方显示浮动窗口提示”受到邪恶力量的影响,你无法使用任何回复道具或法术。“

进阶要求的实现格式不一定要拘泥于通过战斗事件注释,只要实现类似这样的功能即可。

点评

安安,有时间的话帮审核一下吧。VA区的活动问题已经基本上被P叔和没是的人瓜分完毕了,不知道是否还有活动问题更新?  发表于 2012-10-25 10:19
hcm
好了,这样吗?  发表于 2012-10-20 21:26
若后退就皆成谎言。

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4125
在线时间
5076 小时
注册时间
2012-1-15
帖子
4618

开拓者贵宾短篇七成年组亚军剧作品鉴家

4
 楼主| 发表于 2012-10-25 10:39:58 | 只看该作者
protosssonny 发表于 2012-10-20 14:07
先给范例链接:http://pan.baidu.com/share/link?shareid=88540&uk=875076719
实现要求:特定消耗物品和魔 ...

啊啦 不好意思久等了……

功能实现很不错,字符处理有细微的问题。
如果用类似\c[6]之类手动定义了第一行文字的颜色,则第二行字不显示。且玩家不能手动\n。
不过把那个21改改也是可以满足大部分时候的需求的。不用第二行。

总体来说非常好!

点评

嗷呜,谢谢安安百忙之中抽出时间来审核。那么现在除了那个版本更新的问题之外,其它问题都基本解决或有解决方案了。等待安安更新其他活动问题  发表于 2012-10-25 10:49
若后退就皆成谎言。
回复

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4684
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

3
发表于 2012-10-20 14:07:41 | 只看该作者
先给范例链接:http://pan.baidu.com/share/link?shareid=88540&uk=875076719
实现要求:特定消耗物品和魔法在与特定敌群的战斗中变为不可使用。
使用方法:敌群注释(必须把注释写在敌群事件的第一页,写在其它页无效)。比如范例中的敌群1史莱姆*2注释如下:

如果需要设定与某敌群的战斗禁止使用某些物品或魔法,那么:
(1)注释的第一行必须写<禁止恢复>
(2)注释的第二行DisableItem等号后面的中括号写上需要禁止使用的物品ID,比如禁止1至4号物品就写[1,2,3,4],不能写成[1..4]。
(3)注释的第三行DisableSkill等号后面的中括号写上需要禁止使用的技能ID,比如禁止26至30号物品就写[26,27,28,29,30],不能写成[26..30]。
(4)注释的第四行Reason等号后面的中括号写上需要禁止使用的物品或技能的帮助说明(说明无需加引号" ")。若这行写不完,第五行还可以接着写。
按要求截图:
与恢复技能禁止的敌群战斗

与普通敌群战斗

恢复物品禁止的截图类似,这里由于篇幅的原因省略。
按要求上脚本:
脚本注释得很详细,特别适合新手们学习
  1. #==============================================================================
  2. # ■ Game_Troop
  3. #------------------------------------------------------------------------------
  4. #  管理敌群和战斗相关资料的类,也可执行如战斗事件管理之类的功能。
  5. #   本类的实例请参考 $game_troop 。
  6. #==============================================================================

  7. class Game_Troop < Game_Unit
  8.   attr_reader   :troop_id               # 敌群ID
  9. end  

  10. #==============================================================================
  11. # ■ Game_BattlerBase
  12. #------------------------------------------------------------------------------
  13. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  14. #==============================================================================

  15. class Game_BattlerBase
  16.   #--------------------------------------------------------------------------
  17.   # ● 判定技能/使用物品是否可用  再定义
  18.   #--------------------------------------------------------------------------
  19.   def usable?(item)
  20.     return false if special_troop_cannot_recover(item)[0]  # 添加
  21.     return skill_conditions_met?(item) if item.is_a?(RPG::Skill)
  22.     return item_conditions_met?(item)  if item.is_a?(RPG::Item)
  23.     return false
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 敌群注释的读取  新定义
  27.   #--------------------------------------------------------------------------
  28.   def special_troop_cannot_recover(item)
  29.     item_id = []                        # 数组初始化
  30.     skill_id = []                       # 数组初始化
  31.     message = []                        # 数组初始化
  32.     if SceneManager.scene_is?(Scene_Battle)  # 战斗中
  33.       troop_page = $data_troops[$game_troop.troop_id].pages[0] # 只判定第一事件页
  34.       if troop_page.list[0].code == 108 and troop_page.list[0].parameters == ["<禁止恢复>"]
  35.         if troop_page.list[1].parameters[0].split(/=/)[0] == "DisableItem"
  36.           item_id = eval(troop_page.list[1].parameters[0].split(/=/)[1]) # 读取物品禁止列表
  37.         end
  38.         if troop_page.list[2].parameters[0].split(/=/)[0] == "DisableSkill"
  39.           skill_id = eval(troop_page.list[2].parameters[0].split(/=/)[1])# 读取技能禁止列表
  40.         end
  41.         if troop_page.list[3].parameters[0].split(/=/)[0] == "Reason"
  42.           message = troop_page.list[3].parameters[0].split(/=/)[1]+      # 读取禁止时的帮助文本
  43.             troop_page.list[4].parameters[0]
  44.         end
  45.       end
  46.       case item
  47.       when RPG::Item
  48.         return [true, item_id, message] if item_id.include?(item.id) # 物品情况下返回特定值
  49.       when RPG::Skill
  50.         return [true, skill_id, message] if skill_id.include?(item.id) # 技能情况下返回特定值
  51.       end
  52.     end
  53.     return [false, [], ""] # 无注释情况下返回特定值
  54.   end  
  55. end  

  56. #==============================================================================
  57. # ■ Window_BattleItem
  58. #------------------------------------------------------------------------------
  59. #  战斗画面中,选择“使用物品”的窗口。
  60. #==============================================================================

  61. class Window_BattleItem < Window_ItemList
  62.   #--------------------------------------------------------------------------
  63.   # ● 查询使用列表中是否含有此物品  再定义
  64.   #--------------------------------------------------------------------------
  65.   def include?(item)
  66.     return true if item.is_a?(RPG::Item) # 显示所有物品列表
  67.   end
  68. end  

  69. #==============================================================================
  70. # ■ Window_Help
  71. #------------------------------------------------------------------------------
  72. #  显示特技和物品等的说明、以及角色状态的窗口
  73. #==============================================================================

  74. class Window_Help < Window_Base
  75.   #--------------------------------------------------------------------------
  76.   # ● 设置物品  再定义
  77.   #     item : 技能、物品等
  78.   #--------------------------------------------------------------------------
  79.   def set_item(item)
  80.     set_text(item ? item.description : "")
  81.     text = Game_BattlerBase.new.special_troop_cannot_recover(item)[2]
  82.     text.insert(21, "\n") if text != ""  # 在第21个字符插入换行
  83.     set_text(item ? text : "") if text != ""
  84.   end
  85. end  
  86.   
复制代码

评分

参与人数 2星屑 +2 梦石 +8 收起 理由
咕噜 + 2 标记已读
迷糊的安安 + 8 最佳答案 好人卡+4

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4604
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

2
发表于 2012-10-15 12:49:55 | 只看该作者
本帖最后由 hcm 于 2012-10-20 23:33 编辑

这个的话我一般会用交换物品的方法,
反正只有特定战斗,那一定是事件的而不是暗雷,
就在战斗前的事件用多个变量获取回复物品的数量,全部减去,
再得到同等数量(变量用刚才的)的不可用同名不同序号的物品(说明为“受到邪恶力量的影响,你无法使用任何回复道具或法术”),
战斗后再换回。
禁用法术直接施加禁用技能(但这样技能说明不变)的状态,战斗结束消除。
(或者用遗忘真技能学会不可用技能,战斗后换回的方法,假技能说明为“受到……法术”)

1.png (18.32 KB, 下载次数: 38)

1.png

2.png (18.64 KB, 下载次数: 42)

2.png

点评

作为推荐问答活动……能提供下详细配图教程吗?  发表于 2012-10-20 11:55

评分

参与人数 1梦石 +4 收起 理由
迷糊的安安 + 4 简单实用的事件解决法 好人卡+2.

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 16:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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