void monsterEngine_MonsterAttack(object sender, MonsterAttackInfoEventArgs e) { if (MonsterAttack != null) { MonsterAttack(sender, e); } }
void monsterEngine_MonsterAttack(object sender, MonsterAttackInfoEventArgs e) { if (MonsterAttack != null) MonsterAttack(sender, e); }
void mapEngine_MonsterAttack(object sender, MonsterAttackInfoEventArgs e) { MonsterAI monsterAI = sender as MonsterAI; MapEngine mapEngine = GetMapEngine(monsterAI.Monster.MapID); Client[] clients = GetClientsForChars(mapEngine.GetCharactersInRange(monsterAI.Monster.Position, 150).ToArray()); BaseEntity Target = e.Info.Target; Character ch = null; Pet pet = null; Client c = null; if (Target == null) { monsterAI.Monster.Attacking = false; monsterAI.Monster.Target = null; return; } if (Target is Character) { ch = Target as Character; c = GetClientByCharacterID(ch.CharacterId); } if (Target is Pet) { pet = Target as Pet; c = GetClientByCharacterID(pet.OwnerID); } if (ch != null && ch.Alive && monsterAI.Monster.Alive) { AttackInfo atk = ch.OnAttack(monsterAI.Monster); if (atk != null) { byte[] SendTargetHealMana = PacketManager.SendHealMana(ch.MaxHp, ch.CurrentHp, ch.MaxMana, ch.CurrentMana, 0); c.Send(SendTargetHealMana); byte[] SendAttack1 = PacketManager.SendAttack1(atk); SendToClients(SendAttack1, clients); byte[] SendAttack2 = PacketManager.SendAttack2(atk, c.MyCharacter); SendToClients(SendAttack2, clients); if (atk.DoRefDamage && !atk.Dead) { BaseSkill skill = c.MyCharacter.FindSkill((int)HardSkills.Reflection); CastSkillInfo RefInfo = monsterAI.Monster.OnCast(c.MyCharacter, skill); RefInfo.CasterType = 1; byte[] SendRefdamage = PacketManager.SendCast2(skill, RefInfo, monsterAI.Monster); SendToClients(SendRefdamage, clients); if (RefInfo.Dead) { CharacterGainExperience(c, monsterAI.Monster, c.MyCharacter, false); MonsterDropItem(monsterAI.Monster, c.MyCharacter); byte[] SendMonsterDie = PacketManager.SendMonsterDie(monsterAI.Monster); SendToClients(SendMonsterDie, clients); } } if (atk.PetDamaged) { if (c.MyCharacter.tempPet != null) { byte[] SendPetHealth = PacketManager.SendPetHealth(c.MyCharacter.tempPet); c.Send(SendPetHealth); if (atk.PetDied) { BaseSkill skill = new BaseSkill(); if (c.MyCharacter.RemoveActiveSkill((int)HardSkills.Shadow_Strike)) { skill.SkillID = (int)HardSkills.Shadow_Strike; skill.SkillLevel = 1; c.Send(PacketManager.SendEndSkill(c.MyCharacter, skill)); } if (c.MyCharacter.RemoveActiveSkill((int)AbsorbSkills.Shadow_Focus)) { skill.SkillID = (int)AbsorbSkills.Shadow_Focus; skill.SkillLevel = 1; c.Send(PacketManager.SendEndSkill(c.MyCharacter, skill)); } if (c.MyCharacter.RemoveActiveSkill((int)RebirthSkills.Duplicate_Attack)) { skill.SkillID = (int)RebirthSkills.Duplicate_Attack; skill.SkillLevel = 1; c.Send(PacketManager.SendEndSkill(c.MyCharacter, skill)); } byte[] RemovePet = PacketManager.SendMonsterDie(c.MyCharacter.tempPet); SendToClients(RemovePet, clients); c.MyCharacter.tempPet = null; } } } if (atk.Dead) { mapEngine.ActiveClientEntities.Remove(c.MyCharacter); byte[] SendPlayerDead = PacketManager.SendPlayerDie(c.MyCharacter); SendToClients(SendPlayerDead, clients); } monsterAI.Monster.LastAttack = DateTime.Now; } } else if (pet != null && pet.Alive && monsterAI.Monster.Alive) { AttackInfo atk = pet.OnAttack(monsterAI.Monster); if (atk != null) { byte[] SendPetHealth = PacketManager.SendPetHealth(pet); c.Send(SendPetHealth); byte[] SendAttack1 = PacketManager.SendAttack1(atk); SendToClients(SendAttack1, clients); byte[] SendAttack2 = PacketManager.SendAttack2(atk, Target); SendToClients(SendAttack2, clients); if (atk.Dead) { byte[] SendPetDie = PacketManager.SendMonsterDie(pet); SendToClients(SendPetDie, clients); pet.Alive = false; petManager.UpdatePet(pet); c.MyCharacter.Pet = null; mapEngine.ActiveClientEntities.Remove(pet); } monsterAI.Monster.LastAttack = DateTime.Now; } } }