public static void SendAttackerStateUpdate(DamageAction action) { if (action.Attacker is Character && action.Victim is NPC) { var atacker = (Character)action.Attacker; var victim = (NPC)action.Victim; using (var packet = new RealmPacketOut(RealmServerOpCode.MonstrTakeDmg)) //4029 { packet.WriteInt16(atacker.SessionId); //{killerSessId}default value : 17 Len : 2 packet.WriteInt16(victim.UniqIdOnMap); //{monstrMapId}default value : 125 Len : 2 packet.WriteInt32(victim.UniqWorldEntityId); //value name : unk6 default value : 0Len : 4 if (action.VictimState == VictimState.Evade) { packet.WriteInt32(-1); } else if (action.VictimState == VictimState.Block) { packet.WriteInt32(-2); } else if (action.VictimState == VictimState.Immune) { packet.WriteInt32(-3); } else if (action.VictimState == VictimState.Deflect || action.VictimState == VictimState.Dodge || action.VictimState == VictimState.Interrupt || action.VictimState == VictimState.Parry) { packet.WriteInt32(-1); } else { packet.WriteUInt32(action.ActualDamage + (action.IsCritical?2147483648:0)); //{AmountOfDmg}default value : 482 Len : 4 } packet.WriteSkip(unk8); //value name : unk8 default value : unk8Len : 21 victim.SendPacketToArea(packet); } return; } else if (action.Attacker is NPC && action.Victim is Character) { var atacker = (NPC)action.Attacker; var victim = (Character)action.Victim; var dmg = 0; if (action.VictimState == VictimState.Evade) { dmg = -1; } else if (action.VictimState == VictimState.Block) { dmg = -2; } else if (action.VictimState == VictimState.Immune) { dmg = -3; } else if (action.VictimState == VictimState.Miss || action.VictimState == VictimState.Deflect || action.VictimState == VictimState.Dodge || action.VictimState == VictimState.Interrupt || action.VictimState == VictimState.Parry) { dmg = 0; } else { dmg = (int)(action.ActualDamage + (action.IsCritical?2147483648:0)); //{AmountOfDmg}default value : 482 Len : 4 } Asda2MovmentHandler.SendMonstMoveOrAtackResponse(victim.SessionId, atacker, dmg, atacker.Asda2Position, true); } else if (action.Attacker is Character && action.Victim is Character) { var dmg = 0; if (action.VictimState == VictimState.Evade) { dmg = -1; } else if (action.VictimState == VictimState.Block) { dmg = -2; } else if (action.VictimState == VictimState.Immune) { dmg = -3; } else if (action.VictimState == VictimState.Miss || action.VictimState == VictimState.Deflect || action.VictimState == VictimState.Dodge || action.VictimState == VictimState.Interrupt || action.VictimState == VictimState.Parry) { dmg = 0; } else { dmg = (int)(action.ActualDamage + (action.IsCritical ? 2147483648 : 0)); //{AmountOfDmg}default value : 482 Len : 4 } using (var packet = new RealmPacketOut(RealmServerOpCode.AtackCharacterRes)) //4204 { packet.WriteInt16(action.Attacker.CharacterMaster.SessionId); //{atackerSessId}default value : 11 Len : 2 packet.WriteInt16(action.Victim.CharacterMaster.SessionId); //{victimSessId}default value : 105 Len : 2 packet.WriteInt32(0); //value name : unk6 default value : 0Len : 4 packet.WriteInt32(dmg); //{dmg}default value : 1 Len : 4 packet.WriteByte(0); //value name : unk8 default value : 0Len : 1 packet.WriteInt16(-1); //value name : unk9 default value : -1Len : 2 packet.WriteInt32(0); //value name : unk4 default value : 0Len : 4 action.Victim.CharacterMaster.SendPacketToArea(packet, true, true); } } }
public static void SendAttackerStateUpdate(DamageAction action) { if (action.Attacker is Character && action.Victim is NPC) { Character attacker = (Character)action.Attacker; NPC victim = (NPC)action.Victim; using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.MonstrTakeDmg)) { packet.WriteInt16(attacker.SessionId); packet.WriteInt16(victim.UniqIdOnMap); packet.WriteInt32(victim.UniqWorldEntityId); if (action.VictimState == VictimState.Evade) { packet.WriteInt32(-1); } else if (action.VictimState == VictimState.Block) { packet.WriteInt32(-2); } else if (action.VictimState == VictimState.Immune) { packet.WriteInt32(-3); } else if (action.VictimState == VictimState.Deflect || action.VictimState == VictimState.Dodge || (action.VictimState == VictimState.Interrupt || action.VictimState == VictimState.Parry)) { packet.WriteInt32(-1); } else { packet.WriteUInt32((long)action.ActualDamage + (action.IsCritical ? 2147483648L : 0L)); } packet.WriteSkip(Asda2CombatHandler.unk8); victim.SendPacketToArea(packet, true, true, Locale.Any, new float?()); } } else if (action.Attacker is NPC && action.Victim is Character) { NPC attacker = (NPC)action.Attacker; Character victim = (Character)action.Victim; int dmg = action.VictimState != VictimState.Evade ? (action.VictimState != VictimState.Block ? (action.VictimState != VictimState.Immune ? (action.VictimState == VictimState.Miss || action.VictimState == VictimState.Deflect || (action.VictimState == VictimState.Dodge || action.VictimState == VictimState.Interrupt) || action.VictimState == VictimState.Parry ? 0 : (int)((long)action.ActualDamage + (action.IsCritical ? 2147483648L : 0L))) : -3) : -2) : -1; Asda2MovmentHandler.SendMonstMoveOrAtackResponse(victim.SessionId, attacker, dmg, attacker.Asda2Position, true); } else { if (!(action.Attacker is Character) || !(action.Victim is Character)) { return; } int val = action.VictimState != VictimState.Evade ? (action.VictimState != VictimState.Block ? (action.VictimState != VictimState.Immune ? (action.VictimState == VictimState.Miss || action.VictimState == VictimState.Deflect || (action.VictimState == VictimState.Dodge || action.VictimState == VictimState.Interrupt) || action.VictimState == VictimState.Parry ? 0 : (int)((long)action.ActualDamage + (action.IsCritical ? 2147483648L : 0L))) : -3) : -2) : -1; using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.AtackCharacterRes)) { packet.WriteInt16(action.Attacker.CharacterMaster.SessionId); packet.WriteInt16(action.Victim.CharacterMaster.SessionId); packet.WriteInt32(0); packet.WriteInt32(val); packet.WriteByte(0); packet.WriteInt16(-1); packet.WriteInt32(0); action.Victim.CharacterMaster.SendPacketToArea(packet, true, true, Locale.Any, new float?()); } } }