手搓了几个AI脚本,我真的恼了
由于冲突不会解决,怒让AI搓了几个脚本,还满好用,白板工程测试可用,就是技能书和魔法盾死活搓不出来,恼了。1,金钟罩,任何伤害为0,包括一切无视效果都为0
RUBY 代码
#==============================================================================
# ■ 金钟罩状态:拥有此状态时,受到的伤害恒为0
#==============================================================================
module GoldenBell
# ★ 金钟罩对应的状态ID(根据你在数据库里设置的状态编号修改)
STATE_ID = 52
end
class Game_Battler
#--------------------------------------------------------------------------
# ● 拦截攻击造成的伤害
#--------------------------------------------------------------------------
alias goldenbell_attack_effect attack_effect unless method_defined?(:goldenbell_attack_effect)
def attack_effect(attacker)
result = goldenbell_attack_effect(attacker)
# 如果伤害数值大于0,并且自身拥有金钟罩状态
if@damage.is_a?(Numeric) && @damage > 0 && state?(GoldenBell::STATE_ID)
@hp += @damage # 撤销已经扣减的HP
@damage = 1 # 显示伤害改为0
end
return result
end
#--------------------------------------------------------------------------
# ● 拦截技能造成的伤害
#--------------------------------------------------------------------------
alias goldenbell_skill_effect skill_effect unless method_defined?(:goldenbell_skill_effect)
def skill_effect(user, skill)
result = goldenbell_skill_effect(user, skill)
if@damage.is_a?(Numeric) && @damage > 0 && state?(GoldenBell::STATE_ID)
@hp += @damage
@damage = 0
end
return result
end
end
2,绝对反击,我方血量 < 50% 时造成敌人当前血量一半伤害
RUBY 代码
# ============================================================
# 自定义技能:我方血量 < 50% 时造成敌人当前血量一半伤害
# 技能ID、动画ID 请根据你的数据库修改
# ============================================================
class Game_Battler
CUSTOM_SKILL_ID = 57 # 你的技能编号
CUSTOM_ANIM_ID= 34 # 动画编号
alias custom_skill_effect skill_effect unless method_defined?(:custom_skill_effect)
def skill_effect(user, skill)
# 如果是目标技能,并且使用者为我方角色且血量低于一半
if skill.id == CUSTOM_SKILL_ID &&
user.is_a?(Game_Actor) &&
user.hp < user.maxhp / 2
# 伤害 = 目标当前生命值的一半
self.damage = self.hp / 2
self.hp -= self.damage
# 播放指定动画
self.animation_id = CUSTOM_ANIM_ID
# 如果你还需要技能原本的状态附加、公共事件等,
# 可以在这里自行添加,例如:
# skill.plus_state_set.each { |id| self.add_state(id) }
# $game_temp.common_event_id = skill.common_event_id if skill.common_event_id > 0
returntrue # 技能成功
else
# 非指定技能或其他情况,执行原方法
return custom_skill_effect(user, skill)
end
end
end
----优点,在反击时还可以播放一个动画,比如一个镜头大吼一声,而且血量大于50%时,伤害按原公式计算,不影响,该脚本短小精悍,冲突小。
3,法术反弹
RUBY 代码
#==============================================================================
# ★ 反弹伤害技能 (RMXP)
# 功能:拥有指定状态的角色/敌人在受到技能伤害时,将伤害的 50% 反弹给攻击方。
# 反弹伤害的数字会在原伤害显示结束后独立弹出。
#==============================================================================
module ReboundConfig
# 拥有此状态的 battler 将获得伤害反弹效果
REBOUND_STATE_ID = 21 #0
rebound = (self.damage * ReboundConfig::REBOUND_RATE).to_i
rebound = 1if rebound < 1 # 至少有 1 点伤害
# 将反弹伤害直接扣除攻击者的 HP
user.hp -= rebound
# 把反弹伤害存入攻击者的临时变量,等待延迟显示
user.pending_rebound_damage = rebound
end
end
effective
end
end
#==============================================================================
# ■ Scene_Battle (在伤害显示步骤中追加反弹伤害的弹出)
#==============================================================================
class Scene_Battle
# 保存原有的 update_phase4_step5 方法
alias rebound_update_phase4_step5 update_phase4_step5
def update_phase4_step5
# 1. 先执行原版的伤害显示逻辑(目标受到的伤害会先弹出)
rebound_update_phase4_step5
# 2. 在所有正常伤害显示完毕后,处理反弹伤害
# 遍历所有队伍成员和敌人
all_battlers = $game_party.actors + $game_troop.enemies
all_battlers.eachdo |battler|
if battler.pending_rebound_damage != nil && battler.pending_rebound_damage > 0
# 设置伤害显示用的变量
battler.damage = battler.pending_rebound_damage
battler.damage_pop = true
# 临时保存反弹伤害值,通过覆写伤害显示颜色可以区分(此处用普通伤害颜色)
battler.critical = false# 非暴击,保持普通颜色
# 立即强制该 battler 进入伤害动画显示流程
battler.damage_pop = true
# 清除临时变量,确保只显示一次
battler.pending_rebound_damage = nil
# 因为原版 refresh 后可能不会立即绘制伤害,这里手动触发一次伤害动画
if battler.is_a?(Game_Actor)
@status_window.refresh
@active_battler = battler# 暂时设为活动战斗者,确保 sprite 刷新
# 重置 phase4 步骤以重新进入显示流程(简单有效)
@phase4_step = 5
end
end
end
end
end
----该脚本优点在于反弹的法术会略晚于技能伤害,但不能变色,搓不出来变色,略有遗憾,还可以加入延时计时器,没做,可以自定义反弹伤害弹出延时时间,总之三个脚本呢都短小精悍,白板工程都可以用,也可以一起用无冲突,目前为止。
本帖来自P1论坛作者y967,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=498969若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]