Example #1
0
        /// <summary>
        /// Gets the part stats object for a part record
        /// </summary>
        /// <param name="part"></param>
        /// <returns></returns>
        public static StatsBase GetStatsForPart(PartRecord part)
        {
            if (part.IsUnitPart)
            {
                return(GetWeaponStats(part.TemplateId));
            }

            if (part.IsCode)
            {
                return(GetCodeStats(part.TemplateId));
            }

            throw new ArgumentOutOfRangeException(nameof(part), $"Invalid part template id: {part.TemplateId}!");
        }
Example #2
0
        protected PartBase(PartRecord partRecord, Unit owner)
        {
            // For null weapon
            if (partRecord == null)
            {
                return;
            }

            // Load stats for part
            Stats = PooReader.GetStatsByTemplateId(partRecord.TemplateId);

            // Set color
            Color = partRecord.Color;

            // Set owner
            Owner = owner;

            // Set the Id
            Id = partRecord.Id;

            // TODO: Any other info we need
        }
Example #3
0
 protected Weapon(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner)
 {
     Arm       = arm;
     WeaponSet = weaponSet;
 }
Example #4
0
 public Fist(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner, arm, weaponSet)
 {
 }
Example #5
0
 public WeaponSkill(PartRecord partRecord, Unit owner) : base(partRecord, owner)
 {
 }
Example #6
0
 public Gun(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner, arm, weaponSet)
 {
     Target = new WeakReference <Unit>(null);
 }
Example #7
0
 public Arms(PartRecord partRecord, Unit owner) : base(partRecord, owner)
 {
 }
        /// <summary>
        /// Writes a parts info into a packet
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="part"></param>
        public static void WritePartInfo(this ServerBasePacket packet, PartRecord part)
        {
            if (part != null)
            {
                packet.WriteInt(part.Id);
                packet.WriteUInt(part.TemplateId);

                packet.WriteUShort(0x86a0); // Parameter - Possibly for permanent / cannot delete items?
                packet.WriteUShort(0);      // Type? - Zero in packets

                packet.WriteByte(part.Color.R);
                packet.WriteByte(part.Color.G);
                packet.WriteByte(part.Color.B);

                // 0 - Head
                // 1 - Chest
                // 2 - Arm
                // 3 - Leg
                // 4 - Backpack
                // 5 - Fist
                // 6 - Gun
                // 7 - Shield

                // Quick and dirty, get first digit
                var partsType = part.TemplateId;
                while (partsType >= 10)
                {
                    partsType /= 10;
                }

                partsType--;

                packet.WriteByte((byte)partsType); // Looks like 0 indexed version of part type
                packet.WriteByte(0);               // Unknown

                packet.WriteInt(0);                // Unknown

                // FArray - Unknown
                packet.WriteInt(0); // Array size

                // Array contents would go here

                packet.WriteInt(-1);         // Expiry time / current durability
                packet.WriteInt(0x14997000); // Max Durability - Value from server packet capture
                packet.WriteInt(2);          // Contract type?
                packet.WriteInt(0);          // Unknown
            }
            else
            {
                packet.WriteInt(-1);
                packet.WriteUInt(0);

                packet.WriteUShort(0);
                packet.WriteUShort(0);

                packet.WriteByte(0);
                packet.WriteByte(0);
                packet.WriteByte(0);

                packet.WriteByte(0); // Unknown
                packet.WriteByte(0); // Unknown

                packet.WriteInt(0);  // Unknown

                // FArray - Unknown
                packet.WriteInt(0); // Array size

                // Array contents would go here

                packet.WriteInt(0); // Unknown
                packet.WriteInt(0); // Unknown
                packet.WriteInt(0); // If 1, durability, if 2, expired?
                packet.WriteInt(0); // Unknown
            }
        }
Example #9
0
        protected override void RunImpl()
        {
            var client = GetClient();

            using (var db = new ExteelContext())
            {
                // Get tracked entity
                var user = db.Users
                           .Include(u => u.Inventory)
                           .ThenInclude(i => i.Parts)
                           .Single(u => u.Id == client.User.Id);

                Console.WriteLine("Found user " + user.Id);

                // Lookup good
                var good = ShopDataReader.GetGoodById(_goodId);

                // Subtract money
                // TODO: Handle Coins
                user.Credits -= good.CreditPrice;

                // Create Parts
                foreach (var templateId in good.Templates)
                {
                    PartRecord partRecord;

                    var partsType = (int)templateId;
                    while (partsType >= 10)
                    {
                        partsType /= 10;
                    }

                    // Check if its a code
                    if (templateId < 300)
                    {
                        partRecord      = new Code();
                        partRecord.Type = (byte)9;
                    }
                    // Check for weapon
                    else if (partsType == 6 || partsType == 7 || partsType == 8)
                    {
                        partRecord      = new Weapon();
                        partRecord.Type = (byte)partsType;
                    }
                    else
                    {
                        partRecord      = new PartRecord();
                        partRecord.Type = (byte)partsType;
                    }

                    // Populate info

                    partRecord.TemplateId = templateId;
                    partRecord.Parameters = 1;
                    partRecord.Color      = Color.White;

                    // Add to inventory
                    user.Inventory.Parts.Add(partRecord);

                    //db.Parts.Add(part);
                }

                // Save to DB
                db.SaveChanges();
            }

            GetClient().UpdateUserFromDatabase();

            // Send result
            GetClient().SendPacket(new BuyListResult(GetClient().User));
        }
Example #10
0
 public Part(PartRecord partRecord, Unit owner) : base(partRecord, owner)
 {
 }
Example #11
0
 protected Skill(PartRecord partRecord, Unit owner) : base(partRecord, owner)
 {
 }
Example #12
0
 protected AttackSkill(PartRecord partRecord, Unit owner) : base(partRecord, owner)
 {
     AttackStats = PooReader.AttackSkill.First(a => a.TemplateId == Stats.AttackSkill);
 }