Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- server Managment
- case (ushort)SpellID.BladeTempest:
- {
- var spellclient = ID.Value;
- Queue<FloorSpell> RemoveSpells = new Queue<FloorSpell>();
- foreach (var spell in spellclient.Spells.GetValues())
- {
- if (spellclient.CheckInvocke(Now, spell))
- {
- RemoveSpells.Enqueue(spell);
- //spellclient.CreateMsgSpell(100);
- spellclient.SpellPacket = new Network.Messages.MsgMagicEffect(spellclient.UID, 100, spellclient.X, spellclient.Y, 14250, spellclient.DBSkill.Level, spellclient.LevelHu, 1);
- uint Experience = 0;
- List<Structures.AttackHandler.Algoritms.InLineAlgorithm.coords> coord = Structures.AttackHandler.Algoritms.MoveCoords.CheckBladeTeampsCoords(spell.FloorPacket.X, spell.FloorPacket.Y, spell.FloorPacket.OwnerX, spell.FloorPacket.OwnerY, ID.Value.GMap);
- foreach (var obj in client.Screen.Where<Character>(p => p.MapObjType == IO.MapObjectType.Monster))
- {
- var monster = obj as Character;
- if (monster == null) continue;
- if (CoMath.GetDistance(spell.FloorPacket.OwnerX, spell.FloorPacket.OwnerY, monster.X, monster.Y) <= spell.DBSkill.Range)
- {
- if (Structures.AttackHandler.Algoritms.MoveCoords.InRange(monster.X, monster.Y, 1, coord))
- {
- if (Structures.AttackHandler.CheckAttack.CanAttackMonster.Verified(client, monster, spell.DBSkill))
- {
- Structures.AttackHandler.Calculate.Physical.OnMonster(client.Character, monster, spell.DBSkill, out MsgMagicEffect.SpellObj SpellObj);
- Experience += Structures.AttackHandler.ReceiveAttack.Monster.Execute(SpellObj, client, monster);
- SpellObj.Damage = Structures.AttackHandler.Calculate.Base.CalculateSoul(SpellObj.Damage, spellclient.LevelHu);
- spellclient.SpellPacket.Targets.Enqueue(SpellObj);
- }
- }
- }
- }
- foreach (var obj in client.Screen.Where<Character>(p => p.MapObjType == IO.MapObjectType.Player))
- {
- var target = obj as Character;
- if (target == null) continue;
- if (CoMath.GetDistance(spell.FloorPacket.OwnerX, spell.FloorPacket.OwnerY, target.X, target.Y) <= spell.DBSkill.Range)
- {
- if (Structures.AttackHandler.Algoritms.MoveCoords.InRange(target.X, target.Y, 1, coord))
- {
- if (Structures.AttackHandler.CheckAttack.CanAttackPlayer.Verified(client, target, spell.DBSkill))
- {
- Structures.AttackHandler.Calculate.Physical.OnPlayer(client.Character, target, spell.DBSkill, out MsgMagicEffect.SpellObj SpellObj, false);
- Structures.AttackHandler.ReceiveAttack.Player.Execute(SpellObj, client, target);
- SpellObj.Damage = Structures.AttackHandler.Calculate.Base.CalculateSoul(SpellObj.Damage, spellclient.LevelHu);
- spellclient.SpellPacket.Targets.Enqueue(SpellObj);
- }
- }
- }
- }
- foreach (var obj in client.Screen.Where<NpcsHandler.NpcInfoEx>(p => p.MapObjType == IO.MapObjectType.SobNpc))
- {
- var target = obj as NpcsHandler.NpcInfoEx;
- if (target == null) continue;
- if (CoMath.GetDistance(spell.FloorPacket.OwnerX, spell.FloorPacket.OwnerY, target.X, target.Y) <= spell.DBSkill.Range)
- {
- if (Structures.AttackHandler.Algoritms.MoveCoords.InRange(target.X, target.Y, 1, coord))
- {
- if (Structures.AttackHandler.CheckAttack.CanAttackNpc.Verified(client, target, spell.DBSkill))
- {
- Structures.AttackHandler.Calculate.Physical.OnNpcs(client.Character, target, spell.DBSkill, out MsgMagicEffect.SpellObj SpellObj);
- Experience += Structures.AttackHandler.ReceiveAttack.Npc.Execute(SpellObj, client, target);
- SpellObj.Damage = Structures.AttackHandler.Calculate.Base.CalculateSoul(SpellObj.Damage, spellclient.LevelHu);
- spellclient.SpellPacket.Targets.Enqueue(SpellObj);
- }
- }
- }
- }
- ActionQuery action = new ActionQuery()
- {
- ObjId = spell.FloorPacket.UID,
- TargetPositionX = spell.FloorPacket.X,
- TargetPositionY = spell.FloorPacket.Y,
- wParam1 = spell.FloorPacket.X,
- wParam2 = spell.FloorPacket.Y,
- Type = ActionType.RemoveTrap
- };
- client.SendScreen(new MsgAction(action), true);
- spell.FloorPacket.DropType = MsgDropID.RemoveEffect;
- client.Send(new MsgAction(action));
- client.SendScreen(new MsgMapItem(spell.FloorPacket), true);
- spellclient.SpellPacket.Send(client);
- }
- }
- while (RemoveSpells.Count > 0)
- spellclient.RemoveItem(RemoveSpells.Dequeue());
- if (spellclient.Spells.Count == 0)
- {
- FloorSpell.ClientFloorSpells FloorSpell;
- client.Character.FloorSpells.TryRemove(spellclient.DBSkill.ID, out FloorSpell);
- }
- break;
- }
- Class Move Line
- public class MoveLine
- {
- public unsafe static void Execute(Core.Client user, InteractQuery Attack, Dictionary<ushort, Database.MagicType.Magic> DBSpells)
- {
- Database.MagicType.Magic DBSpell;
- MsgMagicInfo ClientSpell;
- if (CheckAttack.CanUseSpell.Verified(Attack, user, DBSpells, out ClientSpell, out DBSpell))
- {
- var MsgSpell = new MsgMagicEffect(user.Character.UID, 0, Attack.X, Attack.Y, ClientSpell.ID, ClientSpell.Level, ClientSpell.UseSpellSoul, (uint)(user.MySpells.ClientSpells.ContainsKey(14250) ? 1 : 0));
- List<Algoritms.InLineAlgorithm.coords> coord = Algoritms.MoveCoords.CheckBladeTeampsCoords(user.Character.X, user.Character.Y, Attack.X
- , Attack.Y, user.Map);
- if (coord == null || coord.Count == 0) return;
- if (user.MySpells.ClientSpells.ContainsKey(14250))
- {
- if (!user.Character.FloorSpells.ContainsKey(ClientSpell.ID))
- user.Character.FloorSpells.TryAdd(ClientSpell.ID, new FloorSpell.ClientFloorSpells(user.Character.UID, Attack.X, Attack.Y, ClientSpell.SoulLevel, DBSpell, user.Map));
- var FloorItem = new FloorSpell(MsgMapItem.TideTrap, (ushort)user.Character.X, (ushort)user.Character.Y, 14, DBSpell, 2000);
- FloorItem.FloorPacket.ItemOwnerUID = user.Character.UID;
- FloorItem.FloorPacket.OwnerX = Attack.X;
- FloorItem.FloorPacket.OwnerY = Attack.Y;
- user.Character.FloorSpells[ClientSpell.ID].AddItem(FloorItem);
- user.SendScreen(new MsgMapItem(FloorItem.FloorPacket), true);
- }
- else
- {
- int i = 0;
- for (i = 0; i < coord.Count; i++)
- {
- if (user.Map.Floor[coord[i].X, coord[i].Y, IO.MapObjectType.Player])
- //&& !user.Entity.ThroughGate(coord[i].X, coord[i].Y))
- {
- user.Character.X = (ushort)coord[i].X;
- user.Character.Y = (ushort)coord[i].Y;
- }
- else
- {
- break;
- }
- }
- //if (!CheckAttack.CheckFloors.CheckGuildWar(user, coord[coord.Count - 1].X, coord[coord.Count - 1].Y)) Soon For GuildWar
- //{
- // return;
- //}
- }
- MsgSpell.X = user.Character.X;
- MsgSpell.Y = user.Character.Y;
- if (!user.Map.Floor[user.Character.X, user.Character.Y, IO.MapObjectType.Player, null])
- return;
- uint Experience = 0;
- foreach (IO.IMapObject target in user.Screen.Where<Core.Character>(m => m.MapObjType == IO.MapObjectType.Monster))
- {
- var attacked = target as Core.Character;
- if (attacked == null) continue;
- if (Calculate.Base.GetDistance(Attack.X, Attack.Y, attacked.X, attacked.Y) <= DBSpell.Range)
- {
- if (CheckAttack.CanAttackMonster.Verified(user, attacked, DBSpell))
- {
- if (!Algoritms.MoveCoords.InRange(attacked.X, attacked.Y, 1, coord))
- continue;
- Calculate.Physical.OnMonster(user.Character, attacked, DBSpell, out MsgMagicEffect.SpellObj SpellObj);
- SpellObj.Damage = Calculate.Base.CalculateSoul(SpellObj.Damage, ClientSpell.UseSpellSoul);
- Experience += ReceiveAttack.Monster.Execute(SpellObj, user, attacked);
- MsgSpell.Targets.Enqueue(SpellObj);
- if (target.Alive)
- {
- if (Core.CoMath.Rate(35))
- {
- attacked.BlackSpot = true;
- attacked.Stamp_BlackSpot = ConquerBoxLib.Extensions.Time32.Now.AddSeconds((int)DBSpell.Duration);
- user.SendScreen(new MsgDeadMark(true, attacked.UID), true);
- }
- }
- }
- }
- }
- foreach (IO.IMapObject target in user.Screen.Where<Core.Character>(p => p.MapObjType == IO.MapObjectType.Player))
- {
- var attacked = target as Core.Character;
- if (attacked == null) continue;
- if (Calculate.Base.GetDistance(Attack.X, Attack.Y, attacked.X, attacked.Y) <= 6)
- {
- if (!Algoritms.MoveCoords.InRange(attacked.X, attacked.Y, 1, coord))
- continue;
- if (CheckAttack.CanAttackPlayer.Verified(user, attacked, DBSpell))
- {
- Calculate.Physical.OnPlayer(user.Character, attacked, DBSpell, out MsgMagicEffect.SpellObj SpellObj);
- SpellObj.Damage = Calculate.Base.CalculateSoul(SpellObj.Damage, ClientSpell.UseSpellSoul);
- ReceiveAttack.Player.Execute(SpellObj, user, attacked);
- MsgSpell.Targets.Enqueue(SpellObj);
- if (attacked.Alive)
- {
- if (Core.CoMath.Rate(35))
- {
- attacked.BlackSpot = true;
- attacked.Stamp_BlackSpot = ConquerBoxLib.Extensions.Time32.Now.AddSeconds((int)DBSpell.Duration);
- user.SendScreen(new MsgDeadMark(true, attacked.UID), true);
- }
- }
- }
- }
- }
- foreach (IO.IMapObject target in user.Screen.Where<NpcsHandler.NpcInfoEx>(p => p.MapObjType == IO.MapObjectType.SobNpc))
- {
- var attackedsob = target as NpcsHandler.NpcInfoEx;
- if (attackedsob == null) continue;
- if (Calculate.Base.GetDistance(Attack.X, Attack.Y, attackedsob.X, attackedsob.Y) <= 6)
- {
- if (CheckAttack.CanAttackNpc.Verified(user, attackedsob, DBSpell))
- {
- if (!Algoritms.MoveCoords.InRange(attackedsob.X, attackedsob.Y, 1, coord))
- continue;
- Calculate.Physical.OnNpcs(user.Character, attackedsob, DBSpell, out MsgMagicEffect.SpellObj SpellObj);
- SpellObj.Damage = Calculate.Base.CalculateSoul(SpellObj.Damage, ClientSpell.UseSpellSoul);
- Experience += ReceiveAttack.Npc.Execute(SpellObj, user, attackedsob);
- MsgSpell.Targets.Enqueue(SpellObj);
- }
- }
- }
- Updates.IncreaseExperience.Up(user, Experience);
- Updates.UpdateSpell.CheckUpdate(user, Attack, Experience, DBSpells);
- MsgSpell.SendRole(user);
- }
- }
- }
- MsgMagicEffect
- Send(Core.Character monster) monster dont forgeetttttttttttt
- public void Send(Core.Character monster)
- {
- var f = this;
- if (Targets.Count < 30)
- {
- //ToArray(Targets, monster.Owner, false);
- monster.MonsterInfo.SendScreen(new MsgMagicEffect(Targets, f));
- }
- else
- {
- Dictionary<uint, Queue<SpellObj>> BigArray = new Dictionary<uint, Queue<SpellObj>>();
- var TargetsArray = Targets.ToArray();
- uint count = 0;
- for (int x = 0; x < TargetsArray.Length; x++)
- {
- if (x % 30 == 0)
- {
- count++;
- BigArray.Add(count, new Queue<SpellObj>());
- }
- BigArray[count].Enqueue(TargetsArray[x]);
- }
- foreach (var small_array in BigArray.Values)
- {
- //ToArray(small_array, monster.Owner, false);
- monster.Owner.Send(new MsgMagicEffect(small_array, f));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement