elmzeny

Untitled

Sep 4th, 2020
1,040
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using ProtoBuf;
  2. using System;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using System.IO;
  6.  
  7. namespace ZConquer.Network.GamePackets
  8. {
  9.     public class MsgMagicEffect : Interfaces.IPacket
  10.     {
  11.         public class DamageClass
  12.         {
  13.             public uint Damage;
  14.             public bool Hit;
  15.             public ushort newX, newY;
  16.             public MsgInteract.InteractEffects Eff1;
  17.             public MsgInteract.InteractEffects2 Eff2;
  18.             public static implicit operator uint(DamageClass dmg)
  19.             {
  20.                 return dmg.Damage;
  21.             }
  22.             public static implicit operator DamageClass(uint dmg)
  23.             {
  24.                 return new DamageClass
  25.                 {
  26.                     Damage = dmg,
  27.                     Hit = true
  28.                 };
  29.             }
  30.         }
  31.         [ProtoContract]
  32.         public class CMsgMagicEffect
  33.         {
  34.             [ProtoMember(1, IsRequired = true)]
  35.             public uint Attacker;
  36.             [ProtoMember(2, IsRequired = false)]
  37.             public uint Attacker1;
  38.             [ProtoMember(3, IsRequired = true)]
  39.             public uint X;
  40.             [ProtoMember(4, IsRequired = true)]
  41.             public uint Y;
  42.             [ProtoMember(5, IsRequired = true)]
  43.             public uint SpellID;
  44.             [ProtoMember(6, IsRequired = true)]
  45.             public uint SpellLevel;
  46.             [ProtoMember(7, IsRequired = false)]
  47.             public uint LevelHu;
  48.             [ProtoMember(8, IsRequired = true)]
  49.             public uint SpellEffect;
  50.             [ProtoMember(9, IsRequired = true)]
  51.             public uint unkown;
  52.             [ProtoMember(10, IsRequired = true)]
  53.             public List<CMsgMagicattacked> Targets;
  54.         }
  55.         [ProtoContract]
  56.         public class CMsgMagicattacked
  57.         {
  58.             [ProtoMember(1, IsRequired = true)]
  59.             public uint UID;
  60.             [ProtoMember(2, IsRequired = true)]
  61.             public uint Damage;
  62.             [ProtoMember(3, IsRequired = true)]
  63.             public uint Hit;
  64.             [ProtoMember(4, IsRequired = true)]
  65.             public uint Effect;
  66.             [ProtoMember(5, IsRequired = true)]
  67.             public uint Effect2;
  68.             [ProtoMember(6, IsRequired = true)]
  69.             public uint SpellLevel;
  70.             [ProtoMember(7, IsRequired = false)]
  71.             public uint newX;
  72.             [ProtoMember(8, IsRequired = true)]
  73.             public uint newY;
  74.         }
  75.         CMsgMagicEffect Buffer;
  76.         public MsgMagicEffect(bool Create)
  77.         {
  78.             if (Create)
  79.             {
  80.                 Buffer = new CMsgMagicEffect();
  81.                 Buffer.Targets = new List<CMsgMagicattacked>();
  82.             }
  83.         }
  84.         public uint Attacker
  85.         {
  86.             get { return Buffer.Attacker; }
  87.             set { Buffer.Attacker = value; }
  88.         }
  89.         public uint Attacker1
  90.         {
  91.             get { return Buffer.Attacker1; }
  92.             set { Buffer.Attacker1 = value; }
  93.         }
  94.         public ushort X
  95.         {
  96.             get { return (ushort)Buffer.X; }
  97.             set { Buffer.X = value; }
  98.         }
  99.         public ushort Y
  100.         {
  101.             get { return (ushort)Buffer.Y; }
  102.             set { Buffer.Y = value; }
  103.         }
  104.         public ushort SpellID
  105.         {
  106.             get { return (ushort)Buffer.SpellID; }
  107.             set { Buffer.SpellID = value; }
  108.         }
  109.         public ushort SpellLevel
  110.         {
  111.             get { return (ushort)Buffer.SpellLevel; }
  112.             set { Buffer.SpellLevel = value; }
  113.         }
  114.         public byte LevelJH
  115.         {
  116.             get { return (byte)Buffer.LevelHu; }
  117.             set { Buffer.LevelHu = value; }
  118.         }
  119.         public ushort SpellEffect
  120.         {
  121.             get { return (byte)Buffer.unkown; }
  122.             set { Buffer.unkown = value; }
  123.         }
  124.         public MsgInteract.InteractEffects Effect
  125.         {
  126.             get;
  127.             set;
  128.         }
  129.         public SafeDictionary<uint, DamageClass> Targets = new SafeDictionary<uint, DamageClass>();
  130.         ushort PacketID = 1105;
  131.         public void Deserialize(byte[] buffer)
  132.         {
  133.             this.Buffer = buffer.ConvertToProto<CMsgMagicEffect>();
  134.         }
  135.         public void Send(Client.GameState client)
  136.         {
  137.             client.Send(Buffer.ToConquerPacket(PacketID));
  138.         }
  139.         const int TargetLimit = 30;
  140.         public byte[] ToArray()
  141.         {
  142.             Buffer.Targets.Clear();
  143.             if (Kernel.GamePool.ContainsKey(Attacker))
  144.                 if (Kernel.GamePool[Attacker].Spells != null)
  145.                     if (Kernel.GamePool[Attacker].Spells[SpellID] != null)
  146.                         Buffer.SpellEffect = Kernel.GamePool[Attacker].Spells[SpellID].LevelHu2;
  147.  
  148.             foreach (KeyValuePair<uint, DamageClass> target in Targets.Take(30))
  149.             {
  150.                 if (SpellID == 10490 || SpellID == 11140)
  151.                 {
  152.                     Buffer.Targets.Add(new CMsgMagicattacked() { UID = target.Key, Damage = target.Value.Damage / 3, Effect = (uint)target.Value.Eff1, SpellLevel = target.Value.newX, newX = target.Value.newY });
  153.                     Buffer.Targets.Add(new CMsgMagicattacked() { UID = target.Key, Damage = target.Value.Damage / 3, Effect = (uint)target.Value.Eff1, SpellLevel = target.Value.newX, newX = target.Value.newY });
  154.                     Buffer.Targets.Add(new CMsgMagicattacked() { UID = target.Key, Damage = target.Value.Damage / 3, Effect = (uint)target.Value.Eff1, SpellLevel = target.Value.newX, newX = target.Value.newY });
  155.                 }
  156.                 else
  157.                     Buffer.Targets.Add(new CMsgMagicattacked() { UID = target.Key, Damage = target.Value.Damage, Effect = (uint)target.Value.Eff1, SpellLevel = target.Value.newX, newX = target.Value.newY });
  158.             }
  159.             return Buffer.ToConquerPacket(PacketID);
  160.         }
  161.  
  162.  
  163.         internal MsgMagicEffect AddTarget(uint uid, DamageClass damage, MsgInteract attack)
  164.         {
  165.             if (attack != null)
  166.             {
  167.                 damage.Eff1 = attack.Effect;
  168.             }
  169.             Targets.Add(uid, damage);
  170.             return this;
  171.         }
  172.  
  173.     }
  174.  
  175. }
RAW Paste Data