رد: مشكلة فى اسكلة ShadowClone
entity.cs
حط فيها دول
كود PHP:
public SafeDictionary<uint, Entity> MyClones = new SafeDictionary<uint, Entity>(); public bool IsClone = false; public void AddClone(ushort cloneid) { #region SpawnPacket(10014)
var Entity = new Entity(EntityFlag.Entity, true); Entity.MonsterInfo = new MonsterInformation(); MonsterInformation.MonsterInformations.TryGetValue(9003, out Entity.MonsterInfo); Entity.Owner = Owner; Entity.MonsterInfo.Owner = Entity; Entity.IsClone = true; Entity._Name = "ShadowClone"; Entity.clan = Name; Entity.SpawnPacket = new byte[8 + _Names + _Name.Length + 36]; Array.Copy(SpawnPacket, Entity.SpawnPacket, Entity.SpawnPacket.Length); WriteStringList(new List<string>() { "ShadowClone", "", "", Name, "" }, _Names, Entity.SpawnPacket); Entity.Mesh = Mesh; Entity.Hitpoints = 1; Entity.UID = Owner.Map.CloneCounter.Next; Entity.GuildID = Entity.GuildRank = Entity.Action = 0; Entity.CountryID = Enums.CountryID.Default; Entity.StatusFlag = Entity.StatusFlag2 = Entity.StatusFlag3 = Entity.StatusFlag4 = 0; Writer.Write((uint)0, Game.ConquerStructures.Equipment.Steed, Entity.SpawnPacket); Writer.Write((uint)0, Game.ConquerStructures.Equipment.SteedPlus, Entity.SpawnPacket); Writer.Write((uint)0, Game.ConquerStructures.Equipment.SteedColor, Entity.SpawnPacket); Writer.Write((uint)0, Game.ConquerStructures.Equipment.MountArmor, Entity.SpawnPacket); Writer.Write((uint)0, Game.ConquerStructures.Equipment.Wing, Entity.SpawnPacket); Writer.Write((uint)0, Game.ConquerStructures.Equipment.WingPlus, Entity.SpawnPacket); Entity.FlowerRank = 0; Entity.NobilityRank = ConquerStructures.NobilityRank.Serf; Entity.Class = Entity.FirstRebornClass = Entity.SecondRebornClass = Entity.JiangTalent = Entity.SubClassesActive = Entity.Reborn = Entity.Level = Entity.ServerID = 0; Writer.Write((byte)2, 271, Entity.SpawnPacket); Writer.Write(cloneid, 272, Entity.SpawnPacket); Entity.OwnerUID = UID; Entity.JiangActive = false; Writer.Write((uint)0, 178, Entity.SpawnPacket); Writer.Write((uint)0, 182, Entity.SpawnPacket); Writer.Write((uint)0, 186, Entity.SpawnPacket); Writer.Write((uint)0, _UnionExploits, Entity.SpawnPacket); Writer.Write((uint)0, _UnionID, Entity.SpawnPacket); Writer.Write((uint)0, _UnionRank, Entity.SpawnPacket); Writer.Write((uint)0, _UnionType, Entity.SpawnPacket); Writer.Write((uint)0, _MyTitle, Entity.SpawnPacket); Writer.Write((uint)0, _MyTitleScore, Entity.SpawnPacket); Writer.Write((uint)0, _MyWing, Entity.SpawnPacket); Entity.MinAttack = MinAttack; Entity.MaxAttack = Entity.MagicAttack = Math.Max(MinAttack, MaxAttack); Entity.Appearance = Appearance; Entity.MapID = Owner.Map.ID; Entity.SendUpdates = true;
#endregion SpawnPacket(10014)
#region Pet(2035)
MsgPetInfo pet = new MsgPetInfo(); pet.UID = Entity.UID; pet.PetID = cloneid; pet.PetType = 2; pet.Mesh = Mesh; pet.AttackRange = (byte)AttackRange; pet.X = X; pet.Y = Y; pet.Name = "ShadowClone"; Owner.Send(pet);
#endregion Pet(2035)
MyClones.Add(Entity.UID, Entity); Owner.SendScreen(Entity.SpawnPacket, true); Owner.SendScreenSpawn(Entity, true);
#region Data(10010)
Data data = new Data(true); data.UID = Entity.UID; data.Facing = Entity.Facing; data.ID = Data.AddEntity; data.wParam1 = Entity.X; data.wParam2 = Entity.Y; Owner.Send(data);
#endregion Data(10010) }
في screen.cs
حط ده
كود PHP:
#region Other Pet & Clones if (pClient.Entity.MyClones.Count > 0) { foreach (var clone in pClient.Entity.MyClones.Values) { if (clone == null) continue; if (Kernel.GetDistance(clone.X, clone.Y, Owner.Entity.X, Owner.Entity.Y) <= 18 && !Contains(clone.UID)) { if (!clone.Dead) clone.SendSpawn(Owner); } } } if (pClient.Pet.Pets.Count > 0) { foreach (var pet in pClient.Pet.Pets.Values) { if (pet == null) continue; if (pet.Entity == null) continue; if (Kernel.GetDistance(pet.Entity.X, pet.Entity.Y, Owner.Entity.X, Owner.Entity.Y) <= 18 && !Contains(pet.Entity.UID)) { if (!pet.Entity.Dead) pet.Entity.SendSpawn(Owner); } } } #endregion
في packethandler.cs
سيرش علي لقيته بدله ملقتهوش ضيفه
كود PHP:
#region Clone Attack case 2812: { var attackd = BitConverter.ReadUint(packet, 4); var clonecount = packet[8]; for (int i = 0; i < clonecount; i++) { var attackr = BitConverter.ReadUint(packet, 9 + (i * 4)); if (client.Entity.MyClones.Count < clonecount) return; var attack = client.Entity.AttackPacket; if (attack == null) attack = new GamePackets.Attack(true); attack.Attacker = attackr; attack.Attacked = attackd;
if (client.Entity.MyClones.Count == 0) return; if (attackd == client.Entity.UID || client.Entity.MyClones.ContainsKey(attackd)) return; KhaledMohamed.Database.SpellInformation MySpell = null; try { MySpell = Database.SpellTable.GetSpell(client.Spells[12090].ID, client.Spells[12090].Level); } catch { MySpell = Database.SpellTable.GetSpell(12090, 4); } Entity Clone = null; if (client.Entity.MyClones.TryGetValue(attackr, out Clone)) { Entity attacked = null; SobNpcSpawn attackedsob = null; if (client.Screen.TryGetValue(attackd, out attacked)) { uint damage = 0; var spell = Database.SpellTable.GetSpell(attack.MagicType, (byte)attack.MagicLevel); if (spell == null) spell = Database.SpellTable.GetSpell(12080, 0); if (attack.AttackType == GamePackets.Attack.Melee) { if (Game.Attacking.Handle.CanAttack(client.Entity, attacked, spell, true)) { damage = Game.Attacking.Calculate.Melee(client.Entity, attacked, spell, ref attack); double power = (0.5); damage = (uint)((double)damage * power / 8); Game.Attacking.Handle.ReceiveAttack(Clone, attacked, attack, ref damage, spell); attack.Damage = damage; client.SendScreen(attack); } } else { if (Game.Attacking.Handle.CanAttack(client.Entity, attacked, spell, false)) { damage = Game.Attacking.Calculate.Magic(client.Entity, attacked, spell, ref attack); double power = (0.5); damage = (uint)((double)damage * power / 8); Game.Attacking.Handle.ReceiveAttack(Clone, attacked, attack, ref damage, spell); attack.Damage = damage; client.SendScreen(attack); } } SpellUse suse = new SpellUse(true); suse.Attacker = Clone.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; suse.X = attacked.X; suse.Y = attacked.Y; suse.Effect1 = attack.Effect1; suse.AddTarget(attacked, damage, attack); client.SendScreen(suse, true); if (client.Account.State == KhaledMohamed.Database.AccountTable.AccountState.ProjectManager) client.Send(new Message("Clone Attack With Skill: " + spell.Name, System.Drawing.Color.CadetBlue, Message.Talk));
} else if (client.Screen.TryGetSob(attackd, out attackedsob)) { uint damage = 0; var spell = Database.SpellTable.GetSpell(attack.MagicType, (byte)attack.MagicLevel); if (spell == null) spell = Database.SpellTable.GetSpell(12080, 0); if (attack.AttackType == GamePackets.Attack.Melee) { if (Game.Attacking.Handle.CanAttack(client.Entity, attackedsob, null)) { damage = Game.Attacking.Calculate.Melee(client.Entity, attackedsob, ref attack); double power = ((MySpell.Power / 100.0) / 100.0); damage = (uint)((double)damage * power); Game.Attacking.Handle.ReceiveAttack(Clone, attackedsob, attack, damage, null); attack.Damage = damage; client.SendScreen(attack); } } else { if (Game.Attacking.Handle.CanAttack(client.Entity, attackedsob, spell)) { damage = Game.Attacking.Calculate.Magic(client.Entity, attackedsob, spell, ref attack); double power = ((MySpell.Power / 100.0) / 100.0); damage = (uint)((double)damage * power); Game.Attacking.Handle.ReceiveAttack(Clone, attackedsob, attack, damage, spell); attack.Damage = damage; client.SendScreen(attack); } } SpellUse suse = new SpellUse(true); suse.Attacker = Clone.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; suse.X = attackedsob.X; suse.Y = attackedsob.Y; suse.Effect1 = attack.Effect1; suse.AddTarget(attackedsob, damage, attack); client.SendScreen(suse, true); if (client.Account.State == KhaledMohamed.Database.AccountTable.AccountState.ProjectManager) client.Send(new Message("Clone Attack With Skill: " + spell.Name, System.Drawing.Color.CadetBlue, Message.Talk));
} } } break; } #endregion
|