本帖最后由 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
复制代码
星潟的脚本
|