2015年4月—2024年4月,论坛已建立9周年,欢迎加入QQ群讨论:419848937

保护祝福的修改

爆率、物品、补丁修改等技术参考资料
回复
头像
天堂之手
Mr.GL
Mr.GL
帖子: 263
注册时间: 2018-02-24 21:37

保护祝福的修改

帖子 天堂之手 » 2018-03-14 15:59

天堂2有个技能名叫“保护祝福”,技能官方的效果是:对39级以下的二转前的角色进行PK保护:即39级以下的二转前角色在野外不会受到比自己高10级以上的红名玩家的攻击。
我觉得这样的设置不太好,为了保护新手玩家,想修改这个技能,比如改成:85级内的角色在野外都不会受到别的任何玩家的攻击。
那我就开始找这个技能ID:5182,这个容易。然后经过一天的查找,我发现这技能的调用不在内核中,是在DP中,郁闷。但更郁闷的是,DP中只有调用的代码,没有实现的代码。
那我想这技能应该是定义在内核里一个class里或一个method中吧。然后我就开始找啊,找啊。从skill,到effect........model到template.......基本上看了上万行代码了,能找的类、有可能方法、函数全都找了,就是找不到这保护玩家技能的具体实现,芒果节都要闭幕了,再找不到我就去吃100个芒果撑死,哈哈。
刚才9点半的时候我思维终于从乱七八糟的类中跳了出来。哥是不是应该换个方法思考?这技能不一定非要定义一个class来实现啊,完全可以只定义这个技能的一个ID,然后,在玩家攻击玩家的控制class中,对玩家身上是否有这技能、双方等级、攻击方是否红名进行判断。
说找就找啊,果然换个方式思考,不到1分钟就找到了实现代码,哥兴奋了,必须把这过程记录下来。
在com.l2jserver.gameserver.ai.L2PlayableAI.java中:(AI:原来这也算人工智能,哈)

代码: 全选

protected void onIntentionAttack(L2Character target)
{
if (target instanceof L2Playable)
{
if (target.getActingPlayer().getProtectionBlessing()
&& (_actor.getActingPlayer().getLevel() - target.getActingPlayer().getLevel()) >= 10
&& _actor.getActingPlayer().getKarma() > 0
&& !(target.isInsideZone(L2Character.ZONE_PVP)))
{
// If attacker have karma and have level >= 10 than his target and target have
// Newbie Protection Buff,
_actor.getActingPlayer().sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
clientActionFailed();
return;
}
图片

回复