Example #1
0
 public void ImportData()
 {
     BrakeParts.Import();
     BrakeControllerParts.Import();
     SteerParts.Import();
     ChassisParts.Import();
     LightweightParts.Import();
     RacingModifyParts.Import();
     EngineParts.Import();
     PortPolishParts.Import();
     EngineBalanceParts.Import();
     DisplacementParts.Import();
     ComputerParts.Import();
     NATuneParts.Import();
     TurbineKitParts.Import();
     DrivetrainParts.Import();
     FlywheelParts.Import();
     ClutchParts.Import();
     PropellerShaftParts.Import();
     GearParts.Import();
     SuspensionParts.Import();
     IntercoolerParts.Import();
     MufflerParts.Import();
     LSDParts.Import();
     TiresFrontParts.Import();
     TiresRearParts.Import();
     Unknown1.Import();
     Unknown2.Import();
     Unknown3.Import();
     Unknown4.Import();
     Unknown5.Import();
     Unknown6.Import();
     Unknown7.Import();
     Cars.Import();
 }
Example #2
0
 public void ImportData()
 {
     BrakeParts.Import();
     BrakeControllerParts.Import();
     SteerParts.Import();
     ChassisParts.Import();
     LightweightParts.Import();
     RacingModifyParts.Import();
     EngineParts.Import();
     PortPolishParts.Import();
     EngineBalanceParts.Import();
     DisplacementParts.Import();
     ComputerParts.Import();
     NATuneParts.Import();
     TurbineKitParts.Import();
     DrivetrainParts.Import();
     FlywheelParts.Import();
     ClutchParts.Import();
     PropellerShaftParts.Import();
     GearParts.Import();
     SuspensionParts.Import();
     IntercoolerParts.Import();
     MufflerParts.Import();
     LSDParts.Import();
     TireSizes.Import();
     TireCompounds.Import();
     TireForceVols.Import();
     TiresFrontParts.Import();
     TiresRearParts.Import();
     ActiveStabilityControlParts.Import();
     TractionControlSystemParts.Import();
     Unknown.Import();
     Cars.Import();
 }
Example #3
0
        public void ReadData(string filename)
        {
            using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                var blocks = new List <DataBlock>();

                for (int i = 1; i <= 34; i++)
                {
                    file.Position = 8 * i;
                    uint blockStart = file.ReadUInt();
                    uint blockSize  = file.ReadUInt();
                    blocks.Add(new DataBlock {
                        BlockStart = blockStart, BlockSize = blockSize
                    });
                }

                BrakeParts.Read(file, blocks[0].BlockStart, blocks[0].BlockSize);
                BrakeControllerParts.Read(file, blocks[1].BlockStart, blocks[1].BlockSize);
                SteerParts.Read(file, blocks[2].BlockStart, blocks[2].BlockSize);
                ChassisParts.Read(file, blocks[3].BlockStart, blocks[3].BlockSize);
                LightweightParts.Read(file, blocks[4].BlockStart, blocks[4].BlockSize);
                RacingModifyParts.Read(file, blocks[5].BlockStart, blocks[5].BlockSize);
                EngineParts.Read(file, blocks[6].BlockStart, blocks[6].BlockSize);
                PortPolishParts.Read(file, blocks[7].BlockStart, blocks[7].BlockSize);
                EngineBalanceParts.Read(file, blocks[8].BlockStart, blocks[8].BlockSize);
                DisplacementParts.Read(file, blocks[9].BlockStart, blocks[9].BlockSize);
                ComputerParts.Read(file, blocks[10].BlockStart, blocks[10].BlockSize);
                NATuneParts.Read(file, blocks[11].BlockStart, blocks[11].BlockSize);
                TurbineKitParts.Read(file, blocks[12].BlockStart, blocks[12].BlockSize);
                DrivetrainParts.Read(file, blocks[13].BlockStart, blocks[13].BlockSize);
                FlywheelParts.Read(file, blocks[14].BlockStart, blocks[14].BlockSize);
                ClutchParts.Read(file, blocks[15].BlockStart, blocks[15].BlockSize);
                PropellerShaftParts.Read(file, blocks[16].BlockStart, blocks[16].BlockSize);
                GearParts.Read(file, blocks[17].BlockStart, blocks[17].BlockSize);
                SuspensionParts.Read(file, blocks[18].BlockStart, blocks[18].BlockSize);
                IntercoolerParts.Read(file, blocks[19].BlockStart, blocks[19].BlockSize);
                MufflerParts.Read(file, blocks[20].BlockStart, blocks[20].BlockSize);
                LSDParts.Read(file, blocks[21].BlockStart, blocks[21].BlockSize);
                TiresFrontParts.Read(file, blocks[22].BlockStart, blocks[22].BlockSize);
                TiresRearParts.Read(file, blocks[23].BlockStart, blocks[23].BlockSize);
                Unknown1.Read(file, blocks[24].BlockStart, blocks[24].BlockSize);
                Unknown2.Read(file, blocks[25].BlockStart, blocks[25].BlockSize);
                Unknown3.Read(file, blocks[26].BlockStart, blocks[26].BlockSize);
                Unknown4.Read(file, blocks[27].BlockStart, blocks[27].BlockSize);
                Unknown5.Read(file, blocks[28].BlockStart, blocks[28].BlockSize);
                Unknown6.Read(file, blocks[29].BlockStart, blocks[29].BlockSize);
                Events.Read(file, blocks[30].BlockStart, blocks[30].BlockSize);
                EnemyCars.Read(file, blocks[31].BlockStart, blocks[31].BlockSize);
                Cars.Read(file, blocks[32].BlockStart, blocks[32].BlockSize);
                CarsSports.Read(file, blocks[33].BlockStart, blocks[33].BlockSize);

                uint stringTableStart = blocks[33].BlockStart + blocks[33].BlockSize;
                RaceStringTable.Read(file, stringTableStart, (uint)file.Length - stringTableStart);
            }
        }
Example #4
0
        public void WriteData()
        {
            using (FileStream file = new FileStream("paramdb_gtc_eu.db", FileMode.Create, FileAccess.ReadWrite))
            {
                const uint DataTableCount = 0x24;
                file.WriteCharacters("GTAR");
                file.WriteUInt(DataTableCount);
                uint dataStart = ((DataTableCount + 2) * 4) + 16;
                file.WriteUInt(dataStart);
                file.WriteUInt(0x07);
                file.Position = dataStart;
                ushort tableNumber = 0;
                BrakeParts.Write(file, dataStart, tableNumber++);
                BrakeBalanceControllerParts.Write(file, dataStart, tableNumber++);
                SteeringParts.Write(file, dataStart, tableNumber++);
                ChassisParts.Write(file, dataStart, tableNumber++);
                WeightReductionParts.Write(file, dataStart, tableNumber++);
                BodyParts.Write(file, dataStart, tableNumber++);
                EngineParts.Write(file, dataStart, tableNumber++);
                PortPolishingParts.Write(file, dataStart, tableNumber++);
                EngineBalancingParts.Write(file, dataStart, tableNumber++);
                DisplacementIncreaseParts.Write(file, dataStart, tableNumber++);
                ComputerParts.Write(file, dataStart, tableNumber++);
                NATuneParts.Write(file, dataStart, tableNumber++);
                TurboKitParts.Write(file, dataStart, tableNumber++);
                DrivetrainParts.Write(file, dataStart, tableNumber++);
                FlywheelParts.Write(file, dataStart, tableNumber++);
                ClutchParts.Write(file, dataStart, tableNumber++);
                PropellerShaftParts.Write(file, dataStart, tableNumber++);
                GearboxParts.Write(file, dataStart, tableNumber++);
                SuspensionParts.Write(file, dataStart, tableNumber++);
                IntercoolerParts.Write(file, dataStart, tableNumber++);
                MufflerParts.Write(file, dataStart, tableNumber++);
                LSDParts.Write(file, dataStart, tableNumber++);
                TCSCParts.Write(file, dataStart, tableNumber++);
                ASCCParts.Write(file, dataStart, tableNumber++);
                WheelsParts.Write(file, dataStart, tableNumber++);
                TyreSizeParts.Write(file, dataStart, tableNumber++);
                TyreForceVolParts.Write(file, dataStart, tableNumber++);
                TyreCompounds.Write(file, dataStart, tableNumber++);
                TyresFrontParts.Write(file, dataStart, tableNumber++);
                TyresRearParts.Write(file, dataStart, tableNumber++);
                Opponents.Write(file, dataStart, tableNumber++);
                Events.Write(file, dataStart, tableNumber++);
                Regulations.Write(file, dataStart, tableNumber++);
                Courses.Write(file, dataStart, tableNumber++);
                ArcadeCars.Write(file, dataStart, tableNumber++);
                Cars.Write(file, dataStart, tableNumber++);

                file.Position = dataStart - 8;
                file.WriteUInt((uint)file.Length - dataStart);
            }
        }
Example #5
0
        public void WriteData(string filename)
        {
            using (FileStream file = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
            {
                file.Write(new byte[] { 0x47, 0x54, 0x44, 0x54, 0x6C, 0x00, 0x3E, 0x00 }, 0, 8); // The 0x3E is the number of indices

                file.Position = (0x3E * 8) + 7;
                file.WriteByte(0x00); // Data starts at 0x1F8 so position EOF

                uint i = 1;
                BrakeParts.Write(file, 8 * i++);
                BrakeControllerParts.Write(file, 8 * i++);
                SteerParts.Write(file, 8 * i++);
                ChassisParts.Write(file, 8 * i++);
                LightweightParts.Write(file, 8 * i++);
                RacingModifyParts.Write(file, 8 * i++);
                EngineParts.Write(file, 8 * i++);
                PortPolishParts.Write(file, 8 * i++);
                EngineBalanceParts.Write(file, 8 * i++);
                DisplacementParts.Write(file, 8 * i++);
                ComputerParts.Write(file, 8 * i++);
                NATuneParts.Write(file, 8 * i++);
                TurbineKitParts.Write(file, 8 * i++);
                DrivetrainParts.Write(file, 8 * i++);
                FlywheelParts.Write(file, 8 * i++);
                ClutchParts.Write(file, 8 * i++);
                PropellerShaftParts.Write(file, 8 * i++);
                GearParts.Write(file, 8 * i++);
                SuspensionParts.Write(file, 8 * i++);
                IntercoolerParts.Write(file, 8 * i++);
                MufflerParts.Write(file, 8 * i++);
                LSDParts.Write(file, 8 * i++);
                TiresFrontParts.Write(file, 8 * i++);
                TiresRearParts.Write(file, 8 * i++);
                Unknown1.Write(file, 8 * i++);
                Unknown2.Write(file, 8 * i++);
                Unknown3.Write(file, 8 * i++);
                Unknown4.Write(file, 8 * i++);
                Unknown5.Write(file, 8 * i++);
                Unknown6.Write(file, 8 * i++);
                Unknown7.Write(file, 8 * i++);
                Cars.Write(file, 8 * i++);

                file.Position = 0;
                using (FileStream zipFile = new FileStream(filename + ".gz", FileMode.Create, FileAccess.Write))
                {
                    using (GZipStream zip = new GZipStream(zipFile, CompressionMode.Compress))
                    {
                        file.CopyTo(zip);
                    }
                }
            }
        }
Example #6
0
        public void ReadData(string filename)
        {
            using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                var blocks = new List <DataBlock>();

                for (int i = 1; i <= 31; i++)
                {
                    file.Position = 8 * i;
                    uint blockStart = file.ReadUInt();
                    uint blockSize  = file.ReadUInt();
                    blocks.Add(new DataBlock {
                        BlockStart = blockStart, BlockSize = blockSize
                    });
                }

                BrakeParts.Read(file, blocks[0].BlockStart, blocks[0].BlockSize);
                BrakeControllerParts.Read(file, blocks[1].BlockStart, blocks[1].BlockSize);
                SteerParts.Read(file, blocks[2].BlockStart, blocks[2].BlockSize);
                ChassisParts.Read(file, blocks[3].BlockStart, blocks[3].BlockSize);
                LightweightParts.Read(file, blocks[4].BlockStart, blocks[4].BlockSize);
                RacingModifyParts.Read(file, blocks[5].BlockStart, blocks[5].BlockSize);
                EngineParts.Read(file, blocks[6].BlockStart, blocks[6].BlockSize);
                PortPolishParts.Read(file, blocks[7].BlockStart, blocks[7].BlockSize);
                EngineBalanceParts.Read(file, blocks[8].BlockStart, blocks[8].BlockSize);
                DisplacementParts.Read(file, blocks[9].BlockStart, blocks[9].BlockSize);
                ComputerParts.Read(file, blocks[10].BlockStart, blocks[10].BlockSize);
                NATuneParts.Read(file, blocks[11].BlockStart, blocks[11].BlockSize);
                TurbineKitParts.Read(file, blocks[12].BlockStart, blocks[12].BlockSize);
                DrivetrainParts.Read(file, blocks[13].BlockStart, blocks[13].BlockSize);
                FlywheelParts.Read(file, blocks[14].BlockStart, blocks[14].BlockSize);
                ClutchParts.Read(file, blocks[15].BlockStart, blocks[15].BlockSize);
                PropellerShaftParts.Read(file, blocks[16].BlockStart, blocks[16].BlockSize);
                GearParts.Read(file, blocks[17].BlockStart, blocks[17].BlockSize);
                SuspensionParts.Read(file, blocks[18].BlockStart, blocks[18].BlockSize);
                IntercoolerParts.Read(file, blocks[19].BlockStart, blocks[19].BlockSize);
                MufflerParts.Read(file, blocks[20].BlockStart, blocks[20].BlockSize);
                LSDParts.Read(file, blocks[21].BlockStart, blocks[21].BlockSize);
                TiresFrontParts.Read(file, blocks[22].BlockStart, blocks[22].BlockSize);
                TiresRearParts.Read(file, blocks[23].BlockStart, blocks[23].BlockSize);
                TireSizes.Read(file, blocks[24].BlockStart, blocks[24].BlockSize);
                TireCompounds.Read(file, blocks[25].BlockStart, blocks[25].BlockSize);
                TireForceVols.Read(file, blocks[26].BlockStart, blocks[26].BlockSize);
                ActiveStabilityControlParts.Read(file, blocks[27].BlockStart, blocks[27].BlockSize);
                TractionControlSystemParts.Read(file, blocks[28].BlockStart, blocks[28].BlockSize);
                Unknown.Read(file, blocks[29].BlockStart, blocks[29].BlockSize);
                Cars.Read(file, blocks[30].BlockStart, blocks[30].BlockSize);
            }
        }
Example #7
0
 public void ImportData()
 {
     BrakeParts.Import();
     BrakeBalanceControllerParts.Import();
     SteeringParts.Import();
     ChassisParts.Import();
     WeightReductionParts.Import();
     BodyParts.Import();
     EngineParts.Import();
     PortPolishingParts.Import();
     EngineBalancingParts.Import();
     DisplacementIncreaseParts.Import();
     ComputerParts.Import();
     NATuneParts.Import();
     TurboKitParts.Import();
     DrivetrainParts.Import();
     FlywheelParts.Import();
     ClutchParts.Import();
     PropellerShaftParts.Import();
     GearboxParts.Import();
     SuspensionParts.Import();
     IntercoolerParts.Import();
     MufflerParts.Import();
     LSDParts.Import();
     TCSCParts.Import();
     ASCCParts.Import();
     WheelsParts.Import();
     TyreSizeParts.Import();
     TyreForceVolParts.Import();
     TyreCompounds.Import();
     TyresFrontParts.Import();
     TyresRearParts.Import();
     Opponents.Import();
     Events.Import();
     Regulations.Import();
     Courses.Import();
     ArcadeCars.Import();
     Cars.Import();
 }
Example #8
0
        public void PropertyBuyItem(Client sender, params object[] arguments)
        {
            Character character = sender.GetCharacter();
            var       prop      = PropertyManager.IsAtPropertyInteraction(sender);

            if (prop == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(sender, "You aren't at a property or you moved away.");
                return;
            }

            var itemName = (string)arguments[0];

            string name  = "";
            int    price = prop.ItemPrices.SingleOrDefault(x => x.Key == itemName).Value;

            //Make sure has enough money.
            if (Money.GetCharacterMoney(sender.GetCharacter()) < price)
            {
                NAPI.Chat.SendChatMessageToPlayer(sender, "Not Enough Money");
                return;
            }

            if (prop.HasGarbagePoint)
            {
                prop.GarbageBags += 1;
                prop.UpdateMarkers();
                if (prop.GarbageBags >= 10)
                {
                    job_manager.garbageman.Garbageman.SendNotificationToGarbagemen("A business is overflowing with garbage. We need garbagemen on the streets right now!");
                }
            }

            if (prop.Supplies <= 0)
            {
                NAPI.Chat.SendChatMessageToPlayer(sender, "The business is out of supplies.");
                return;
            }

            IInventoryItem item = null;

            if (prop.Type == PropertyManager.PropertyTypes.TwentyFourSeven)
            {
                name = ItemManager.TwentyFourSevenItems.Single(x => x[0] == itemName)[1];
                switch (itemName)
                {
                case "sprunk":
                    item = new SprunkItem();
                    break;

                case "rope":
                    item = new RopeItem();
                    break;

                case "rags":
                    item = new RagsItem();
                    break;
                }
            }
            else if (prop.Type == PropertyManager.PropertyTypes.Hardware)
            {
                name = ItemManager.HardwareItems.Single(x => x[0] == itemName)[1];
                switch (itemName)
                {
                case "phone":
                    var number = PhoneManager.GetNewNumber();
                    var phone  = new Phone()
                    {
                        PhoneNumber = number,
                        PhoneName   = "default"
                    };
                    item = phone;
                    break;

                case "rope":
                    item = new RopeItem();
                    break;

                case "rags":
                    item = new RagsItem();
                    break;

                case "axe":
                    if (InventoryManager
                        .DoesInventoryHaveItem <Weapon>(character, x => x.WeaponHash == WeaponHash.Hatchet)
                        .Length > 0)
                    {
                        NAPI.Chat.SendChatMessageToPlayer(sender, "You already have that weapon.");
                        return;
                    }

                    WeaponManager.CreateWeapon(sender, WeaponHash.Hatchet, WeaponTint.Normal, true);
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    prop.Supplies--;
                    NAPI.Chat.SendChatMessageToPlayer(sender,
                                                      $"[BUSINESS] You have sucessfully bought an ~g~Axe~w~ for ~g~${price}.");
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought an Axe for {price} from property ID {prop.Id}.");
                    return;

                case "scuba":
                    item = new ScubaItem();
                    break;

                case "engineparts":
                    item = new EngineParts();
                    break;

                case "spraypaint":
                    item = new SprayPaint();
                    break;

                case "crowbar":
                    item = new Crowbar();
                    break;
                }
            }
            else if (prop.Type == PropertyManager.PropertyTypes.Restaurant)
            {
                prop.Supplies--;
                switch (itemName)
                {
                case "sprunk":
                    name = "Sprunk";
                    item = new SprunkItem();
                    break;

                case "custom1":
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    sender.Health += 15;
                    if (sender.Health > 100)
                    {
                        sender.Health = 100;
                    }
                    NAPI.Chat.SendChatMessageToPlayer(sender, $"[BUSINESS] You have sucessfully bought a ~g~{prop.RestaurantItems[0]}~w~ for ~g~${price}.");
                    InventoryManager.GiveInventoryItem(prop, new Money(), price);
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {prop.RestaurantItems[0]} for {price} from property ID {prop.Id}.");
                    return;

                case "custom2":
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    sender.Health += 25;
                    if (sender.Health > 100)
                    {
                        sender.Health = 100;
                    }
                    NAPI.Chat.SendChatMessageToPlayer(sender, $"[BUSINESS] You have sucessfully bought a ~g~{prop.RestaurantItems[1]}~w~ for ~g~${price}.");
                    InventoryManager.GiveInventoryItem(prop, new Money(), price);
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {prop.RestaurantItems[1]} for {price} from property ID {prop.Id}.");
                    return;

                case "custom3":
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    sender.Health += 25;
                    if (sender.Health > 100)
                    {
                        sender.Health = 100;
                    }
                    NAPI.Chat.SendChatMessageToPlayer(sender, $"[BUSINESS] You have sucessfully bought a ~g~{prop.RestaurantItems[2]}~w~ for ~g~${price}.");
                    InventoryManager.GiveInventoryItem(prop, new Money(), price);
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {prop.RestaurantItems[2]} for {price} from property ID {prop.Id}.");
                    return;

                case "custom4":
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    sender.Health += 25;
                    if (sender.Health > 100)
                    {
                        sender.Health = 100;
                    }
                    NAPI.Chat.SendChatMessageToPlayer(sender, $"[BUSINESS] You have sucessfully bought a ~g~{prop.RestaurantItems[3]}~w~ for ~g~${price}.");
                    InventoryManager.GiveInventoryItem(prop, new Money(), price);
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {prop.RestaurantItems[3]} for {price} from property ID {prop.Id}.");
                    return;
                }
            }
            else if (prop.Type == PropertyManager.PropertyTypes.VIPLounge)
            {
                prop.Supplies--;

                if (NAPI.Player.GetPlayerCurrentWeapon(sender) == WeaponHash.Unarmed)
                {
                    sender.SendChatMessage("You must be holding the weapon you want to tint.");
                    return;
                }

                switch (itemName)
                {
                case "pink_tint":
                    WeaponManager.SetWeaponTint(sender, NAPI.Player.GetPlayerCurrentWeapon(sender), WeaponTint.Pink);
                    break;

                case "gold_tint":
                    if (sender.GetAccount().VipLevel < 3)
                    {
                        sender.SendChatMessage("You must be a gold VIP to buy a gold tint.");
                        return;
                    }
                    WeaponManager.SetWeaponTint(sender, NAPI.Player.GetPlayerCurrentWeapon(sender), WeaponTint.Gold);
                    break;

                case "green_tint":
                    WeaponManager.SetWeaponTint(sender, NAPI.Player.GetPlayerCurrentWeapon(sender), WeaponTint.Green);
                    break;

                case "orange_tint":
                    WeaponManager.SetWeaponTint(sender, NAPI.Player.GetPlayerCurrentWeapon(sender), WeaponTint.Orange);
                    break;

                case "platinum_tint":
                    WeaponManager.SetWeaponTint(sender, NAPI.Player.GetPlayerCurrentWeapon(sender), WeaponTint.Platinum);
                    break;
                }
                name = ItemManager.VIPItems.Single(x => x[0] == itemName)[1];

                NAPI.Chat.SendChatMessageToPlayer(sender, "[BUSINESSES] You have successfully bought a ~g~" + name + "~w~ weapon tint for ~g~" + price + "~w~.");
                LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {name} for {price} from property ID {prop.Id}.");
                return;
            }
            else if (prop.Type == PropertyManager.PropertyTypes.LSNN)
            {
                switch (itemName)
                {
                case "lotto_ticket":
                    foreach (var i in GroupManager.Groups)
                    {
                        if (i.CommandType == Group.CommandTypeLsnn)
                        {
                            i.LottoSafe += price;
                        }
                    }
                    InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                    InventoryManager.GiveInventoryItem(prop, new Money(), price);
                    character.HasLottoTicket = true;
                    NAPI.Chat.SendChatMessageToPlayer(sender, "You purchased a lottery ticket. Good luck!");
                    LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a lottery ticket for {price} from property ID {prop.Id}.");
                    return;
                }
                return;
            }
            else if (prop.Type == PropertyManager.PropertyTypes.HuntingStation)
            {
                HuntingTag boughtTag = null;

                switch (itemName)
                {
                case "deer_tag":
                {
                    if (sender.GetCharacter().LastRedeemedDeerTag == DateTime.Today.Date)
                    {
                        NAPI.Chat.SendChatMessageToPlayer(sender, Color.White,
                                                          "~r~[ERROR]~w~ You have already redeemed a deer tag today.");
                        return;
                    }

                    var tags = InventoryManager.DoesInventoryHaveItem(character, typeof(HuntingTag));
                    if (tags.Cast <HuntingTag>().Any(i => i.Type == HuntingManager.AnimalTypes.Deer))
                    {
                        NAPI.Chat.SendChatMessageToPlayer(sender, Color.White,
                                                          "~r~[ERROR]~w~ You have already purchased a deer tag. Please drop any old ones before buying a new one.");
                        return;
                    }

                    boughtTag = new HuntingTag
                    {
                        Type      = HuntingManager.AnimalTypes.Deer,
                        ValidDate = DateTime.Today
                    };
                    name = "Deer Tag";
                    WeaponManager.CreateWeapon(sender, WeaponHash.SniperRifle, WeaponTint.Normal, true);
                    break;
                }

                case "boar_tag":
                {
                    if (sender.GetCharacter().LastRedeemedBoarTag == DateTime.Today.Date)
                    {
                        NAPI.Chat.SendChatMessageToPlayer(sender, Color.White,
                                                          "~r~[ERROR]~w~ You have already redeemed a boar tag today.");
                        return;
                    }

                    var tags = InventoryManager.DoesInventoryHaveItem(character, typeof(HuntingTag));
                    if (tags.Cast <HuntingTag>().Any(i => i.Type == HuntingManager.AnimalTypes.Boar))
                    {
                        NAPI.Chat.SendChatMessageToPlayer(sender, Color.White,
                                                          "~r~[ERROR]~w~ You have already purchased a boar tag. Please drop any old ones before buying a new one.");
                        return;
                    }

                    boughtTag = new HuntingTag
                    {
                        Type      = HuntingManager.AnimalTypes.Boar,
                        ValidDate = DateTime.Today
                    };
                    name = "Boar Tag";
                    WeaponManager.CreateWeapon(sender, WeaponHash.SniperRifle, WeaponTint.Normal, true);
                    break;
                }

                case "ammo":
                {
                    switch (InventoryManager.GiveInventoryItem(sender.GetCharacter(), new AmmoItem()))
                    {
                    case InventoryManager.GiveItemErrors.Success:
                        InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                        prop.Supplies--;
                        WeaponManager.CreateWeapon(sender, WeaponHash.SniperRifle, WeaponTint.Normal, true);
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You have sucessfully bought a ~g~ 5.56 Bullet ~w~ for ~g~${price}.");
                        LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a 5.56 Bullet for {price} from property ID {prop.Id}.");
                        break;

                    case InventoryManager.GiveItemErrors.NotEnoughSpace:
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You dont have enough space for that item. Need {new AmmoItem().AmountOfSlots} Slots.");
                        break;

                    case InventoryManager.GiveItemErrors.MaxAmountReached:
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You have reached the maximum allowed ammount of that item.");
                        break;
                    }
                    break;
                }
                }
                if (boughtTag != null)
                {
                    switch (InventoryManager.GiveInventoryItem(sender.GetCharacter(), boughtTag))
                    {
                    case InventoryManager.GiveItemErrors.Success:
                        InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                        InventoryManager.GiveInventoryItem(sender.GetCharacter(), new AmmoItem());
                        prop.Supplies--;
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You have sucessfully bought a ~g~{name}~w~ for ~g~${price}.");
                        LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {name} for {price} from property ID {prop.Id}.");
                        break;

                    case InventoryManager.GiveItemErrors.NotEnoughSpace:
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You dont have enough space for that item. Need {boughtTag.AmountOfSlots} Slots.");
                        break;

                    case InventoryManager.GiveItemErrors.MaxAmountReached:
                        NAPI.Chat.SendChatMessageToPlayer(sender,
                                                          $"[BUSINESS] You have reached the maximum allowed amount of that item.");
                        break;
                    }
                    return;
                }
                else
                {
                    return;
                }
            }
            else if (prop.Type == PropertyManager.PropertyTypes.Government)
            {
                name = ItemManager.GovItems.Single(x => x[0] == itemName)[1];
                switch (itemName)
                {
                case "id":
                    item = new IdentificationItem();
                    break;
                }
            }

            if (item == null)
            {
                NAPI.Chat.SendChatMessageToPlayer(sender,
                                                  "Error finding the item you bought, report this as a bug report.");
                return;
            }

            //Send message.
            switch (InventoryManager.GiveInventoryItem(sender.GetCharacter(), item))
            {
            case InventoryManager.GiveItemErrors.Success:
                InventoryManager.DeleteInventoryItem(sender.GetCharacter(), typeof(Money), price);
                InventoryManager.GiveInventoryItem(prop, new Money(), price);

                if (item.GetType() == typeof(Phone))
                {
                    ((Phone)item).InsertNumber();
                    NAPI.Chat.SendChatMessageToPlayer(sender, "Your phone number is: ~g~" + ((Phone)item).PhoneNumber);
                }
                prop.Supplies--;
                NAPI.Chat.SendChatMessageToPlayer(sender,
                                                  $"[BUSINESS] You have sucessfully bought a ~g~{name}~w~ for ~g~${price}.");

                LogManager.Log(LogManager.LogTypes.Stats, $"[Business] {sender.GetCharacter().CharacterName}[{sender.GetAccount().AccountName}] has bought a {name} for {price} from property ID {prop.Id}.");
                break;

            case InventoryManager.GiveItemErrors.NotEnoughSpace:
                NAPI.Chat.SendChatMessageToPlayer(sender,
                                                  $"[BUSINESS] You dont have enough space for that item. Need {item.AmountOfSlots} Slots.");
                break;

            case InventoryManager.GiveItemErrors.MaxAmountReached:
                NAPI.Chat.SendChatMessageToPlayer(sender,
                                                  $"[BUSINESS] You have reached the maximum allowed amount of that item.");
                break;

            case InventoryManager.GiveItemErrors.HasSimilarItem:
                NAPI.Chat.SendChatMessageToPlayer(sender,
                                                  $"[BUSINESS] You already have a similar item.");
                break;
            }
        }
Example #9
0
        public void ReadData(string filename)
        {
            using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                byte[] magic = new byte[4];
                file.Read(magic);
                if (Encoding.ASCII.GetString(magic) != "GTAR")
                {
                    Console.WriteLine("Not a GTAR archive.");
                    return;
                }

                uint tableCount       = file.ReadUInt();
                uint dataStart        = file.ReadUInt();
                uint unknown          = file.ReadUInt();
                var  dataTableStreams = new MemoryStream[tableCount];

                for (int i = 0; i < tableCount; i++)
                {
                    file.Position = (i * 4) + 0x10;
                    uint start  = file.ReadUInt();
                    uint end    = file.ReadUInt();
                    uint length = end - start;

                    file.Position = start + dataStart;
                    byte[] buffer = new byte[length];
                    file.Read(buffer);
                    dataTableStreams[i] = new MemoryStream(buffer);
                }

                BrakeParts.Read(dataTableStreams[0]);
                BrakeBalanceControllerParts.Read(dataTableStreams[1]);
                SteeringParts.Read(dataTableStreams[2]);
                ChassisParts.Read(dataTableStreams[3]);
                WeightReductionParts.Read(dataTableStreams[4]);
                BodyParts.Read(dataTableStreams[5]);
                EngineParts.Read(dataTableStreams[6]);
                PortPolishingParts.Read(dataTableStreams[7]);
                EngineBalancingParts.Read(dataTableStreams[8]);
                DisplacementIncreaseParts.Read(dataTableStreams[9]);
                ComputerParts.Read(dataTableStreams[10]);
                NATuneParts.Read(dataTableStreams[11]);
                TurboKitParts.Read(dataTableStreams[12]);
                DrivetrainParts.Read(dataTableStreams[13]);
                FlywheelParts.Read(dataTableStreams[14]);
                ClutchParts.Read(dataTableStreams[15]);
                PropellerShaftParts.Read(dataTableStreams[16]);
                GearboxParts.Read(dataTableStreams[17]);
                SuspensionParts.Read(dataTableStreams[18]);
                IntercoolerParts.Read(dataTableStreams[19]);
                MufflerParts.Read(dataTableStreams[20]);
                LSDParts.Read(dataTableStreams[21]);
                TCSCParts.Read(dataTableStreams[22]);
                ASCCParts.Read(dataTableStreams[23]);
                WheelsParts.Read(dataTableStreams[24]);
                TyreSizeParts.Read(dataTableStreams[25]);
                TyreForceVolParts.Read(dataTableStreams[26]);
                TyreCompounds.Read(dataTableStreams[27]);
                TyresFrontParts.Read(dataTableStreams[28]);
                TyresRearParts.Read(dataTableStreams[29]);
                Opponents.Read(dataTableStreams[30]);
                Events.Read(dataTableStreams[31]);
                Regulations.Read(dataTableStreams[32]);
                Courses.Read(dataTableStreams[33]);
                ArcadeCars.Read(dataTableStreams[34]);
                Cars.Read(dataTableStreams[35]);

                foreach (var stream in dataTableStreams)
                {
                    stream.Dispose();
                }
            }
        }