Project1

标题: 【脚本】指定N次战斗后消除的状态 [打印本页]

作者: 灯笼菜刀王    时间: 2025-3-5 10:12
标题: 【脚本】指定N次战斗后消除的状态
本帖最后由 灯笼菜刀王 于 2025-3-5 10:15 编辑

一个小脚本,看到有这类需求就写一下

使用方法: 把脚本塞到main之前, 然后事件脚本写: 吃猫饭(角色id,状态id,持续场次)
                 ※ 角色id填-1时为全员,填0时为道具使用对象

栗子:  吃猫饭(1,2,3)  #=>1号角色获得2号状态,持续3场战斗后解除, 状态在3次战斗期间因其他原因解除也没影响, 要同时附加多个状态就再写一句

附赠一个获得道具/技能使用对象的id函数 : $target_id

冲突: 改动了 def use_item_to_actors , 有冲突就把备注里的那句移动到对方脚本的对应位置, 然后删掉 42-49行即可

RUBY 代码复制
  1. #-----------------------------------------------------
  2. # 指定N次战斗后消除的状态    By:灯笼菜刀王
  3. #
  4. # 使用方法, 事件脚本写: 吃猫饭(角色id,状态id,持续场次)
  5. # ※ 角色id填-1时为全员,填0时为道具使用对象
  6. #-----------------------------------------------------
  7. class Game_Interpreter
  8.   def 吃猫饭(actor_id,state_id,turn)
  9.     return if turn < 1 or actor_id < -1
  10.     if actor_id == -1
  11.       $game_party.members.each{|i| i.add_state(state_id)}
  12.       b = "members.each{|i| i.remove_state(#{state_id})}"
  13.     else
  14.       actor_id = $target_id if actor_id == 0 and $target_id != nil
  15.       $game_actors[actor_id].add_state(state_id)
  16.       b = "$game_actors[#{actor_id}].remove_state(#{state_id})"
  17.     end
  18.     $game_party.battle_end_inter_push(turn,b)
  19.   end
  20. end
  21. class Game_Party < Game_Unit
  22.   attr_accessor :battle_end_inter
  23.   alias :old_initialize :initialize
  24.   def initialize
  25.     old_initialize
  26.     @battle_end_inter = []
  27.   end
  28.   def battle_end_inter_push(turn,s)
  29.     if @battle_end_inter[turn - 1].nil?
  30.       @battle_end_inter[turn - 1] = s
  31.     else
  32.       @battle_end_inter[turn - 1] += ";#{s}"
  33.     end
  34.   end
  35.   def on_battle_end
  36.     super
  37.     if (r=@battle_end_inter.shift) != nil
  38.       eval(r)
  39.     end
  40.   end
  41. end
  42. class Scene_ItemBase < Scene_MenuBase
  43.   def use_item_to_actors
  44.     item_target_actors.each do |target|
  45.       $target_id = target.id #冲突就把这句移动过去,然后删掉42-49行
  46.       item.repeats.times { target.item_apply(user, item) }
  47.     end
  48.   end
  49. end
  50. class Scene_Battle < Scene_Base
  51.   alias :old_apply_item_effects :apply_item_effects
  52.   def apply_item_effects(target, item)
  53.     $target_id = target.id
  54.     old_apply_item_effects(target, item)
  55.   end
  56. end


作者: djs789783    时间: 2025-3-5 10:58
又是这个ID又是这个函数,不懂哦,只会插脚本。要配合什么脚本用吗?还是这个直接用呀?
作者: djs789783    时间: 2025-3-5 11:00
怎么填写呀,角色ID是1  要怎么写呀
作者: 邱小谦    时间: 2025-3-5 18:50
djs789783 发表于 2025-3-5 11:00
怎么填写呀,角色ID是1  要怎么写呀

作者都已经说的很清楚了,使用方法, 事件脚本写: 吃猫饭(角色id,状态id,持续场次),你好歹自己要动脑筋研究一下吧。。。。
作者: djs789783    时间: 2025-3-6 03:18
邱小谦 发表于 2025-3-5 18:50
作者都已经说的很清楚了,使用方法, 事件脚本写: 吃猫饭(角色id,状态id,持续场次),你好歹自己要动脑筋研 ...

这个知道啊,我试了,出错了,而且他还有未完成的。

对了,请问有没有可以让物品添加HP的方法?像那个什么破限只能在护甲类添加HP<MAXHP: +45000>物品的有没有办法?添加?
作者: chen12311    时间: 2025-3-6 08:46
本帖最后由 chen12311 于 2025-3-6 10:51 编辑
djs789783
这个知道啊,我试了,出错了,而且他还有未完成的。
对了,请问有没有可以让物品添加HP的方法?像那个什么破限只能在护甲类添加HP<MAXHP: +45000>物品的有没有办法?添加?

不是很明白你说的话,但你试试看这个
  1. module Armo_MAX
  2.   Note= /<MAXHP[::] (\d+)>/
  3. end
  4. class RPG::EquipItem
  5.   def Armor_NOTE
  6.     @note =~ Armo_MAX::Note ? $1.to_i : nil
  7.   end
  8. end
  9. class Game_Actor < Game_Battler
  10. #  def param_max(param_id) #这段毫无意义
  11. #    return 99999 if param_id == 0  # MHP
  12. #    return 9999   if param_id == 1  # MMP
  13. #    return 999
  14. #  end
  15.   def armor_mhp
  16.     a=0
  17.     armors.each do|armor|
  18.       next unless armor.Armor_NOTE
  19.       a=armor.Armor_NOTE
  20.     end
  21.     a
  22.   end
  23.   def param(param_id)
  24.     return super unless param_id==0 && armor_mhp
  25.     value = param_base(param_id) + param_plus(param_id)
  26.     value *= param_rate(param_id) * param_buff_rate(param_id)
  27.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i + armor_mhp
  28.   end
  29. end
复制代码

在护甲备注加<MAXHP: (MHP)>




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