public void Delete(Entities.GameClient client, Packets.TeamActionPacket packet) { if (!client.Alive) return; if (Leader != client.EntityUID) return; client.RemoveFlag1(Enums.Effect1.TeamLeader); foreach (Entities.GameClient member in Members.Values) { member.Team = null; member.Send(packet); } Members.Clear(); Leader = 0; }
public static bool Handle(Entities.GameClient client, UseSpellPacket usespell) { if (!client.Equipments.Contains(Enums.ItemLocation.Steed)) return false; if (client.ContainsFlag1(Enums.Effect1.Riding)) client.RemoveFlag1(Enums.Effect1.Riding); else if (client.Stamina < 100) return false; else client.AddStatusEffect1(Enums.Effect1.Riding); using (var vigor = new Packets.SteedVigorPacket()) { vigor.Type = 2; vigor.Amount = 9001; client.Send(vigor); } usespell.AddTarget(client.EntityUID, 0); return true; }
/// <summary> /// Handling the combat of the interact packet. /// </summary> /// <param name="client">The client.</param> /// <param name="interact">The interact packet.</param> public static void Handle(Entities.GameClient client, InteractionPacket interact) { if (interact == null) return; if (!client.Alive) return; if (client.Paralyzed) return; if (!client.CanAttack) return; if (!(DateTime.Now >= client.LoginProtection.AddSeconds(10))) { using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST)) client.Send(fmsg); return; } if (!(DateTime.Now >= client.ReviveProtection.AddSeconds(5))) { using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST)) client.Send(fmsg); return; } if (!(DateTime.Now >= client.LastAttack.AddMilliseconds(Core.TimeIntervals.AttackInterval)) && client.AttackPacket == null) { using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST)) client.Send(fmsg); return; } if (client.Battle != null) { if (!client.Battle.HandleBeginAttack(client)) { using (var fmsg = Packets.Message.MessageCore.CreateSystem2(client.Name, Core.MessageConst.REST)) client.Send(fmsg); return; } } client.LastAttack = DateTime.Now; //client.AutoAttacking = false; switch (interact.Action) { case Enums.InteractAction.MagicAttack: { #region TemporaryDecryption if (!interact.UnPacked) { interact.UnPacked = true; byte[] packet = interact.Copy(); ushort SkillId = Convert.ToUInt16(((long)packet[24] & 0xFF) | (((long)packet[25] & 0xFF) << 8)); SkillId ^= (ushort)0x915d; SkillId ^= (ushort)client.EntityUID; SkillId = (ushort)(SkillId << 0x3 | SkillId >> 0xd); SkillId -= 0xeb42; uint Target = ((uint)packet[12] & 0xFF) | (((uint)packet[13] & 0xFF) << 8) | (((uint)packet[14] & 0xFF) << 16) | (((uint)packet[15] & 0xFF) << 24); Target = ((((Target & 0xffffe000) >> 13) | ((Target & 0x1fff) << 19)) ^ 0x5F2D2463 ^ client.EntityUID) - 0x746F4AE6; ushort TargetX = 0; ushort TargetY = 0; long xx = (packet[16] & 0xFF) | ((packet[17] & 0xFF) << 8); long yy = (packet[18] & 0xFF) | ((packet[19] & 0xFF) << 8); xx = xx ^ (client.EntityUID & 0xffff) ^ 0x2ed6; xx = ((xx << 1) | ((xx & 0x8000) >> 15)) & 0xffff; xx |= 0xffff0000; xx -= 0xffff22ee; yy = yy ^ (client.EntityUID & 0xffff) ^ 0xb99b; yy = ((yy << 5) | ((yy & 0xF800) >> 11)) & 0xffff; yy |= 0xffff0000; yy -= 0xffff8922; TargetX = Convert.ToUInt16(xx); TargetY = Convert.ToUInt16(yy); interact.TargetUID = Target; interact.MagicType = SkillId; interact.X = TargetX; interact.Y = TargetY; } #endregion if (client.ContainsFlag1(Enums.Effect1.Riding) && interact.MagicType != 7001) { if (client.Stamina >= 100) { client.Stamina = 0; client.RemoveFlag1(Enums.Effect1.Riding); } return; } Magic.Handle(client, interact); break; } case Enums.InteractAction.Attack: if (client.ContainsFlag1(Enums.Effect1.Riding)) { if (client.Stamina >= 100) { client.Stamina = 0; client.RemoveFlag1(Enums.Effect1.Riding); } return; } Physical.Handle(client, interact); break; case Enums.InteractAction.Shoot: if (client.ContainsFlag1(Enums.Effect1.Riding)) { if (client.Stamina >= 100) { client.Stamina = 0; client.RemoveFlag1(Enums.Effect1.Riding); } return; } Ranged.Handle(client, interact); break; } }
void Regular(Entities.Monster mob) { #region Poison if (mob.ContainsFlag1(Enums.Effect1.Poisoned)) { if (DateTime.Now >= mob.LastPoison.AddMilliseconds(3000)) { mob.LastPoison = DateTime.Now; if (mob.PoisonEffect > 0) { uint damage = (uint)((mob.HP / 100) * mob.PoisonEffect); if (mob.HP > damage) { Packets.Interaction.Battle.Combat.HitDamage(null, mob, damage); using (var interact = new Packets.InteractionPacket()) { interact.Action = Enums.InteractAction.Attack; interact.EntityUID = mob.EntityUID; interact.TargetUID = mob.EntityUID; interact.UnPacked = true; interact.X = mob.X; interact.Y = mob.Y; interact.Data = damage; mob.Screen.UpdateScreen(interact, false); } } else mob.RemoveFlag1(Enums.Effect1.Poisoned); } } } #endregion if (mob.Target != null) { if (mob.Target.Alive) { if (mob.Screen.MapObjects.ContainsKey(mob.Target.EntityUID)) { if (Core.Screen.GetDistance(mob.X, mob.Y, mob.Target.X, mob.Target.Y) <= mob.AttackRange && DateTime.Now >= mob.AttackTime) { mob.AttackTime = DateTime.Now.AddMilliseconds( ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next( mob.AttackSpeed, mob.AttackSpeed * 3)); #region physical attack using (var interact = new Packets.InteractionPacket()) { interact.Action = Enums.InteractAction.Attack; interact.EntityUID = mob.EntityUID; interact.TargetUID = mob.Target.EntityUID; interact.UnPacked = true; interact.X = mob.Target.X; interact.Y = mob.Target.Y; Packets.Interaction.Battle.Physical.Handle(mob, interact); } #endregion return; } } } } mob.Target = null; foreach (Maps.IMapObject obj in mob.Screen.MapObjects.Values) { if (obj is Entities.GameClient) { if ((obj as Entities.GameClient).ContainsFlag1(Enums.Effect1.PartiallyInvisible)) { continue; } mob.Target = obj as Entities.IEntity; if (!mob.Target.Alive) { mob.Target = null; continue; } break; } } }
public static void Handle(Entities.GameClient client, GeneralDataPacket General) { client.RemoveFlag1(Enums.Effect1.Fly); }