Project1

标题: 一种特殊类型的物品【已解决】 [打印本页]

作者: RMVXA    时间: 2020-8-8 07:22
标题: 一种特殊类型的物品【已解决】
本帖最后由 RMVXA 于 2020-8-9 01:15 编辑

默认物品A,B都是[不可使用]。
特殊的地方例如:
当变量1大于某个数值时,A变成[菜单可用];
当变量2大于某个数值时,B变成[战斗可用]……

请问大佬这个可以实现的吗?
作者: alexncf125    时间: 2020-8-8 07:44
本帖最后由 alexncf125 于 2020-8-8 07:48 编辑

未测试
  1. class Game_BattlerBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 判定技能/使用物品是否可用
  4.   #--------------------------------------------------------------------------
  5.   alias old_usable_old? usable?
  6.   def usable?(item)
  7.     if movable? && $game_party.has_item?(item)
  8.       if $game_party.in_battle
  9.         return true if $game_variables[b] > 某个数值 && item.id == 物品B的ID
  10.       else
  11.         return true if $game_variables[a] > 某个数值 && item.id == 物品A的ID
  12.       end
  13.     end
  14.     return false if [物品A的ID, 物品B的ID].include?(item.id)
  15.     old_usable_old?
  16.   end
复制代码

作者: alexncf125    时间: 2020-8-8 17:56
本帖最后由 alexncf125 于 2020-8-9 08:38 编辑

物品的备注栏,备注
<菜单可用: 1, 50>

<战斗可用: 3, 25>
  1. module RMVXA
  2.   module ITEM_USABLE
  3.     MENU_OK = /<菜单可用:[ ]*(\d+)[,]?[ ]*(\d+)/i
  4.     BATTLE_OK = /<战斗可用:[ ]*(\d+)[,]?[ ]*(\d+)/i
  5.   end
  6. end

  7. module DataManager  
  8.   #--------------------------------------------------------------------------
  9.   # ● Loads the database
  10.   #--------------------------------------------------------------------------
  11.   class << self; alias_method(:old_load_database_old, :load_database); end
  12.   def self.load_database
  13.     old_load_database_old
  14.     load_rmvxa_item_usable_notetags
  15.   end  
  16.   #--------------------------------------------------------------------------
  17.   # ● Loads the note tags
  18.   #--------------------------------------------------------------------------
  19.   def self.load_rmvxa_item_usable_notetags
  20.     for obj in $data_items
  21.       next if obj.nil?
  22.       obj.load_rmvxa_item_usable_notetags
  23.     end
  24.   end
  25. end

  26. class RPG::Item < RPG::UsableItem
  27.   #--------------------------------------------------------------------------
  28.   # ● Loads the note tags
  29.   #--------------------------------------------------------------------------
  30.   def load_rmvxa_item_usable_notetags
  31.     @note.split(/[\r\n]+/).each do |line|
  32.       case line
  33.       when RMVXA::ITEM_USABLE::MENU_OK
  34.         @item_usable_menu_ok = [$1.to_i, $2.to_i]
  35.       when RMVXA::ITEM_USABLE::BATTLE_OK
  36.         @item_usable_battle_ok = [$1.to_i, $2.to_i]
  37.       end
  38.     end
  39.   end
  40.   
  41.   #--------------------------------------------------------------------------
  42.   # ● Returns item usable
  43.   #--------------------------------------------------------------------------
  44.   def item_usable
  45.     return @item_usable if @item_usable
  46.     item_usable_menu_ok = @item_usable_menu_ok || 0
  47.     item_usable_battle_ok = @item_usable_battle_ok || 0
  48.     @item_usable = {
  49.     :item_usable_menu_ok => item_usable_menu_ok,
  50.     :item_usable_battle_ok => item_usable_battle_ok,
  51.     }
  52.     @item_usable
  53.   end
  54. end

  55. class Game_BattlerBase
  56.   #--------------------------------------------------------------------------
  57.   # ● 判定技能/使用物品是否可用
  58.   #--------------------------------------------------------------------------
  59.   alias old_usable_old? usable?
  60.   def usable?(item)
  61.     if !item.nil? && item.is_a?(RPG::Item) && movable? && $game_party.has_item?(item)
  62.       if $game_party.in_battle
  63.         return true if $game_variables[item.item_usable[:item_usable_battle_ok][0]] > item.item_usable[:item_usable_battle_ok][1]
  64.       else
  65.         return true if $game_variables[item.item_usable[:item_usable_menu_ok][0]] > item.item_usable[:item_usable_menu_ok][1]
  66.       end
  67.       return false if item.item_usable[:item_usable_battle_ok][0] > 0 || item.item_usable[:item_usable_menu_ok][0] > 0
  68.     end
  69.     old_usable_old?(item)
  70.   end
  71. end
复制代码

作者: RMVXA    时间: 2020-8-8 18:40
本帖最后由 RMVXA 于 2020-8-8 18:49 编辑

谢谢大神写了这么多行代码。但是这个改动较大了,导致道具栏打开时报错,其他正常道具和技能的可用情况也受到了影响……
是这样的:只有几个这种道具而已,使用场合一开始设置为了【不能使用】。预想效果:当变量1大于100时,对应道具A的使用场合变成【仅菜单中】即可。对了,道具是贵重品里的。谢谢大佬!
作者: RMVXA    时间: 2020-8-8 19:58

作者: RMVXA    时间: 2020-8-8 20:01
选择【武器】或【防具】时也会报错!
特殊道具只是一些【贵重品】
作者: alexncf125    时间: 2020-8-8 21:55
本帖最后由 alexncf125 于 2020-8-9 00:35 编辑

至于为什么物品的使用场合一开始要设置为【常时】,而不是设置为【不能使用】
我也不知道,得@些大神科普一下

@喵呜喵5  :

一个备注了<菜单可用: 75, 100>的物品的使用场合设置为【常时】
当75号变量<=100时,该物品不能被使用
当75号变量>100时,该物品能被使用

一个备注了<菜单可用: 50, 100>的物品的使用场合设置为【不能使用】
结果是
当50号变量<=100时,该物品不能被使用
当50号变量>100时,该物品仍然不能被使用

为什么呢?~为什么呢?~

好像是因为我的工程和新建工程有所不同而引致
本層作废




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