/// <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}!"); }
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 }
protected Weapon(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner) { Arm = arm; WeaponSet = weaponSet; }
public Fist(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner, arm, weaponSet) { }
public WeaponSkill(PartRecord partRecord, Unit owner) : base(partRecord, owner) { }
public Gun(PartRecord partRecord, Unit owner, ArmIndex arm, WeaponSetIndex weaponSet) : base(partRecord, owner, arm, weaponSet) { Target = new WeakReference <Unit>(null); }
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 } }
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)); }
public Part(PartRecord partRecord, Unit owner) : base(partRecord, owner) { }
protected Skill(PartRecord partRecord, Unit owner) : base(partRecord, owner) { }
protected AttackSkill(PartRecord partRecord, Unit owner) : base(partRecord, owner) { AttackStats = PooReader.AttackSkill.First(a => a.TemplateId == Stats.AttackSkill); }