private static void HandleAoeDamage(GameSession session, PacketReader packet) { List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >(); long skillSN = packet.ReadLong(); int unkValue = packet.ReadInt(); int playerObjectId = packet.ReadInt(); CoordF coords = packet.Read <CoordF>(); CoordF coords2 = packet.Read <CoordF>(); CoordF coords3 = packet.Read <CoordF>(); packet.ReadByte(); byte count = packet.ReadByte(); packet.ReadInt(); for (int i = 0; i < count; i++) { int entity = packet.ReadInt(); mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(entity)); packet.ReadByte(); if (mobs[i] != null) { mobs[i].Value.UpdateStats(session.FieldPlayer.Value.SkillCast.GetDamage()); session.Send(StatPacket.UpdateMobStats(mobs[i])); } } session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillSN, unkValue, coords, mobs)); }
private static void HandleAoeDamage(GameSession session, PacketReader packet) { List <(IFieldObject <Mob>, DamageHandler)> mobs = new List <(IFieldObject <Mob>, DamageHandler)>(); long skillSN = packet.ReadLong(); int unkValue = packet.ReadInt(); int playerObjectId = packet.ReadInt(); CoordF coords = packet.Read <CoordF>(); CoordF coords2 = packet.Read <CoordF>(); CoordF coords3 = packet.Read <CoordF>(); packet.ReadByte(); byte count = packet.ReadByte(); packet.ReadInt(); bool isCrit = DamageHandler.RollCrit(session.Player.Stats[PlayerStatId.CritRate].Current); for (int i = 0; i < count; i++) { int entity = packet.ReadInt(); packet.ReadByte(); IFieldObject <Mob> mob = session.FieldManager.State.Mobs.GetValueOrDefault(entity); if (mob != null) { DamageHandler damage = DamageHandler.CalculateDamage(session.FieldPlayer.Value.SkillCast, session.FieldPlayer.Value, mob.Value, isCrit); mob.Value.Damage(damage.Damage); session.Send(StatPacket.UpdateMobStats(mob)); if (mob.Value.IsDead) { HandleMobKill(session, mob); } if (mob.Value.Id == 29000128) // Temp fix for tutorial barrier { session.Send("4F 00 03 E8 03 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray()); session.Send("4F 00 03 D0 07 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray()); session.Send("4F 00 08 01 04 01 00 00".ToByteArray()); } mobs.Add((mob, damage)); } } session.Send(SkillDamagePacket.ApplyDamage(skillSN, unkValue, coords, session.FieldPlayer, mobs)); }
private static void HandleAoeDamage(GameSession session, PacketReader packet) { List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >(); long skillSN = packet.ReadLong(); int unkValue = packet.ReadInt(); int playerObjectId = packet.ReadInt(); CoordF coords = packet.Read <CoordF>(); CoordF coords2 = packet.Read <CoordF>(); CoordF coords3 = packet.Read <CoordF>(); packet.ReadByte(); byte count = packet.ReadByte(); packet.ReadInt(); for (int i = 0; i < count; i++) { int entity = packet.ReadInt(); mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(entity)); packet.ReadByte(); if (mobs[i] != null) { mobs[i].Value.UpdateStats(session.FieldPlayer.Value.SkillCast.GetDamage()); session.Send(StatPacket.UpdateMobStats(mobs[i])); // TODO: There needs to be a more centralized way to give rewards from killing mobs... // TODO: Add trophy, exp, meso and item drops if (mobs[i].Value.IsDead) { QuestHelper.UpdateQuest(session, mobs[i].Value.Id.ToString(), "npc"); } if (mobs[i].Value.Id == 29000128) // Temp fix for tutorial barrier { session.Send("4F 00 03 E8 03 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray()); session.Send("4F 00 03 D0 07 00 00 00 00 00 00 00 00 00 00 00 00 80 3F".ToByteArray()); session.Send("4F 00 08 01 04 01 00 00".ToByteArray()); } } } session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillSN, unkValue, coords, mobs)); }
private void HandleAoeDamage(GameSession session, PacketReader packet) { List <IFieldObject <Mob> > mobs = new List <IFieldObject <Mob> >(); long skillUid = packet.ReadLong(); int someValue = packet.ReadInt(); int playerObjectId = packet.ReadInt(); CoordF coords = packet.Read <CoordF>(); CoordF coords2 = packet.Read <CoordF>(); CoordF coords3 = packet.Read <CoordF>(); packet.ReadByte(); byte count = packet.ReadByte(); packet.ReadInt(); for (int i = 0; i < count; i++) { mobs.Add(session.FieldManager.State.Mobs.GetValueOrDefault(packet.ReadInt())); packet.ReadByte(); session.Send(StatPacket.UpdateMobStats(mobs[i])); } session.Send(SkillDamagePacket.ApplyDamage(session.FieldPlayer, skillUid, someValue, coords, mobs)); }