public SeePlayerAttack(uint victimID, uint victimHP, CharacterInfo ci, AttackTargetRequest atr, byte error = 1) { _victimID = victimID; _victimHP = victimHP; _ci = ci; _atr = atr; _errorByte = error; }
void DoAttack_Handler(Task t) { AttackTargetRequest atr = (AttackTargetRequest)t.Args; PlayMap map = _server.GetPlayMap(t.Client.Character.MapID); if (atr.TargetT == AttackTargetRequest.TargetType.Monster) { map.PlayerAttackMonster(t.Client, atr); } }
public static AttackTargetRequest Read(PacketHeader header, BinaryReader br) { AttackTargetRequest atr = new AttackTargetRequest(); atr.TargetID = br.ReadUInt32(); atr.Critical = false; byte typeByte = br.ReadByte(); atr.TargetT = (typeByte & 3) == 0 ? TargetType.Player : TargetType.Monster; atr.ComboT = ((typeByte >> 2) & 0x3F); byte unkByte = br.ReadByte(); byte comboByte = br.ReadByte(); atr.ComboCount = (comboByte & 0x3F); atr.ComboStatus = ((comboByte >> 6) & 0x3); atr.Motion = br.ReadUInt16(); return(atr); }
private void Client_OnAttack(object sender, AttackTargetRequest e) { TaskProcessor.AddTask(new Task(Task.TaskType.DoAttack, (Connection)sender, e)); }
public SeePlayerAttack(uint victimID, uint victimHP, CharacterInfo ci, AttackTargetRequest atr, byte error = 1) { _victimID = victimID; _victimHP = victimHP; _ci = ci; _atr = atr; _errorByte = error; }
public static AttackTargetRequest Read(PacketHeader header, BinaryReader br) { AttackTargetRequest atr = new AttackTargetRequest(); atr.TargetID = br.ReadUInt32(); atr.Critical = false; byte typeByte = br.ReadByte(); atr.TargetT = (typeByte & 3) == 0 ? TargetType.Player : TargetType.Monster; atr.ComboT = ((typeByte >> 2) & 0x3F); byte unkByte = br.ReadByte(); byte comboByte = br.ReadByte(); atr.ComboCount = (comboByte & 0x3F); atr.ComboStatus = ((comboByte >> 6) & 0x3); atr.Motion = br.ReadUInt16(); return atr; }
public void PlayerAttackMonster(Connection client, AttackTargetRequest atr) { if (!_monsters.ContainsKey(atr.TargetID)) { LogInterface.Log(string.Format("Character({0}) attacking non existant monster {1} on map {2}", client.Character.ID, atr.TargetID, client.Character.MapID), LogInterface.LogMessageType.Game); client.SendPacket(new SeePlayerAttack(atr.TargetID, 0, client.Character, atr, 6)); // Wrong target } else { Monster m = _monsters[atr.TargetID]; client.Character.AttackTarget(m, atr); SeePlayerAttack pkt = new SeePlayerAttack(m.ID, m.CurHP, client.Character, atr); foreach( Connection c in _players.Values ) c.SendPacket(pkt); if (m.Dead) { // Do loot! m.GiveLoot(client); } } }
void Attack_Handler(PacketHeader header, BinaryReader br) { OnAttack(this, AttackTargetRequest.Read(header, br)); }
private void Client_OnAttack(object sender, AttackTargetRequest e) { TaskProcessor.AddTask(new Task(Task.TaskType.DoAttack, (Connection)sender, e)); }