拿到源代码的我相信都会发现gameserver\clientpackets\AttackRequest.java类,里面含有客户端攻击请求,其中有一句:
Attack atk = new Attack(activeChar.getObjectId(), objectId,
100,
false,
false,
false, activeChar.getX(), activeChar.getY(), activeChar.getZ());
大家注意红色部分。
找到gameserver\serverpackets下面有一个Attack.java,看看Attack类初始化函数吧
public Attack(int attackerId, int defenderId, int damage, boolean miss, boolean critical, boolean soulshot, int x, int y, int z)
{
_attackerId = attackerId;
_defenderId = defenderId;
_damage = damage;
_miss = miss;
_critical = critical;
织梦内容管理系统
_soulshot = soulshot;
_x = x;
_y = y;
_z = z;
} 注意,棕色部分第三个参数正是
100对应的,会点e文的都知道什么意思吧。
红色部分的
false,对应下面miss,程序调用时给赋予了永假,就是说你永远不会miss,这就是你每次打怪都会命中的原因了
下面说说如何修改,我的做法是建立了一个新类,根据传送的attackerId,defenderId的属性计算出该值,然后传给gameserver.serverpackets.Attack,至于miss永真问题可以写一个加权的随机函数,这个权值应该是命中之类的吧。