| 本帖最后由 alexncf125 于 2020-8-19 08:31 编辑 
 [url=forum.php?mod=redirect&goto=findpost&pid=2900424&ptid=482902]灯笼菜刀王发表于2020-8-18 09:49[/ url]这个是在道具的伤害结算里判断的, 判断角色的HPSP状态都没发生变化, 且道具不带公共事件的时候, 会返回 fal ...
研究完一阵子,现在除注释了【Game_Battler】中 item_test 内那句 return true if $game_party.in_battle 外
 我还把【Scene_Battle】那段 def on_actor_ok 魔改成以下的样子
 
 
 #------------------------------------------------- -------------------------  # ● 角色“确定”  #------------------------------------------------- -------------------------  def on_actor_ok     #[url]https://rpg.blue/forum.php?mod=viewthread&tid=411480[/url]    #当在菜单对我方使用了一个包含了行动限制状态的道具时角色会进入行动限制的状态,    #此时若我方全部人员都被限制了行动,则道具显示变成灰色,    #但是光标仍然留在选择道具的目标窗口,此时如果再点击一次确定键就会报错。    #将【Scene_ItemBase】的第65行改成 if user and item_usable?     if item_target_actors && item_usable? #~这里用不用加 item_target_actors (?,还是直接 if item_usable?      BattleManager.actor.input.target_index = @actor_window.index      @actor_window.hide      @skill_window.hide      @item_window.hide      next_command    else      BattleManager.actor.input.target_index = @actor_window.index #~这句是有什么用途的? 要不要删去??      @actor_window.activate      Sound.play_buzzer    end  end  #------------------------------------------------- -------------------------  # ● 获取物品的使用目标数组  #------------------------------------------------- -------------------------  def item_target_actors    item = @item_window.item    if !item.for_friend?      []    elsif item.for_all?      $game_party.members    else      [$game_party.members[@actor_window.index]]    end  end  #------------------------------------------------- -------------------------  # ● 判定物品是否可以使用  #------------------------------------------------- -------------------------  def item_usable?    item = @item_window.item    item_target_actors.any? do |target|      target.usable?(item) && item_effects_valid?    end  end  #------------------------------------------------- -------------------------  # ● 判定物品的效果是否有效  #------------------------------------------------- -------------------------  def item_effects_valid?    item = @item_window.item    item_target_actors.any? do |target|      target.item_test(target, item) #~ 在【Scene_ItemBase】中是 target.item_test(user, item)                                         #~ 我改成 target.item_test(target, item) 是不是不对?    end  end
#------------------------------------------------- ------------------------- 
  # ● 角色“确定” 
  #------------------------------------------------- ------------------------- 
  def on_actor_ok 
  
    #[url]https://rpg.blue/forum.php?mod=viewthread&tid=411480[/url] 
    #当在菜单对我方使用了一个包含了行动限制状态的道具时角色会进入行动限制的状态, 
    #此时若我方全部人员都被限制了行动,则道具显示变成灰色, 
    #但是光标仍然留在选择道具的目标窗口,此时如果再点击一次确定键就会报错。 
    #将【Scene_ItemBase】的第65行改成 if user and item_usable? 
  
    if item_target_actors && item_usable? #~这里用不用加 item_target_actors (?,还是直接 if item_usable? 
      BattleManager.actor.input.target_index = @actor_window.index 
      @actor_window.hide 
      @skill_window.hide 
      @item_window.hide 
      next_command 
    else 
      BattleManager.actor.input.target_index = @actor_window.index #~这句是有什么用途的? 要不要删去?? 
      @actor_window.activate 
      Sound.play_buzzer 
    end 
  end 
  #------------------------------------------------- ------------------------- 
  # ● 获取物品的使用目标数组 
  #------------------------------------------------- ------------------------- 
  def item_target_actors 
    item = @item_window.item 
    if !item.for_friend? 
      [] 
    elsif item.for_all? 
      $game_party.members 
    else 
      [$game_party.members[@actor_window.index]] 
    end 
  end 
  #------------------------------------------------- ------------------------- 
  # ● 判定物品是否可以使用 
  #------------------------------------------------- ------------------------- 
  def item_usable? 
    item = @item_window.item 
    item_target_actors.any? do |target| 
      target.usable?(item) && item_effects_valid? 
    end 
  end 
  #------------------------------------------------- ------------------------- 
  # ● 判定物品的效果是否有效 
  #------------------------------------------------- ------------------------- 
  def item_effects_valid? 
    item = @item_window.item 
    item_target_actors.any? do |target| 
      target.item_test(target, item) #~ 在【Scene_ItemBase】中是 target.item_test(user, item) 
                                         #~ 我改成 target.item_test(target, item) 是不是不对? 
    end 
  end 
以上是魔改自【Scene_ItemBase】的
 
 
 #------------------------------------------------- -------------------------  # ● 获取物品的使用目标数组  #------------------------------------------------- -------------------------  def item_target_actors    if !item.for_friend?      []    elsif item.for_all?      $game_party.members    else      [$game_party.members[@actor_window.index]]    end  end  #------------------------------------------------- -------------------------  # ● 判定物品是否可以使用  #------------------------------------------------- -------------------------  def item_usable?    user.usable?(item) && item_effects_valid?  end  #------------------------------------------------- -------------------------  # ● 判定物品的效果是否有效  #------------------------------------------------- -------------------------  def item_effects_valid?    item_target_actors.any? do |target|      target.item_test(user, item)    end  end
#------------------------------------------------- ------------------------- 
  # ● 获取物品的使用目标数组 
  #------------------------------------------------- ------------------------- 
  def item_target_actors 
    if !item.for_friend? 
      [] 
    elsif item.for_all? 
      $game_party.members 
    else 
      [$game_party.members[@actor_window.index]] 
    end 
  end 
  #------------------------------------------------- ------------------------- 
  # ● 判定物品是否可以使用 
  #------------------------------------------------- ------------------------- 
  def item_usable? 
    user.usable?(item) && item_effects_valid? 
  end 
  #------------------------------------------------- ------------------------- 
  # ● 判定物品的效果是否有效 
  #------------------------------------------------- ------------------------- 
  def item_effects_valid? 
    item_target_actors.any? do |target| 
      target.item_test(user, item) 
    end 
  end 
总体来说,我把【Scene_ItemBase】的 user 换成了 item_target_actors.any? do |target| 的 target
 和 item 换成了 @item_window.item 后,搬到【Scene_Battle】去了,也不知这样改有没有什么问题,大大能指点一下么?
 
 另外如果我想搭配星泻的脚本使用,
 是不是加上以下这段就可行了??
 
 
 复制代码
class Scene_Battle < Scene_Base
  alias on_item_ok_unuse_inv_face on_item_ok
  def on_item_ok
    $game_temp.temp_unuse_item = @item_window.item
    item_target_actors.any? do |target|
      $game_temp.temp_unuse_actor = target
    end
    on_item_ok_unuse_inv_face
  end
end
 星潟的脚本 
 |