static Scene BuildScenes(GameManager gameManager)
        {
            Scene          controlRoom = new StaticScene("Control Room", "The radio sits silently at the front. The grand window stares out into the darkness of space. To the south is the Lab.");
            ConcourseScene concourse   = new ConcourseScene();
            StadiumScene   stadium     = new StadiumScene(gameManager);
            DynamicScene   storage     = new DynamicScene("Storage", "Contains a rope hung by a hook from its wall. The Lab is to the east.");
            RopeItem       ropeItem    = new RopeItem(storage, concourse, stadium);
            LabScene       lab         = new LabScene("Lab", "Four capsules made of glass sit at the side.", "A lectern with buttons stands at the center. To the north is the Control Room.", ropeItem);
            Scene          hall        = new StaticScene("Hall", "East leads to the Concourse. South leads to the Lab.");

            concourse.SetDescription("A large room with multiple tables like a banquet hall. One wall scorched by the bright lights displays space across its massive window. The Hall is to the west.");

            #region Episodes

            #endregion

            #region Directions
            controlRoom.AddWork(new RoamWork(new string[] { RoamWork.South, "LAB" }, lab));
            lab.AddWork(new RoamWork(new string[] { RoamWork.North, "CONTROL", "CONTROL ROOM" }, controlRoom));
            lab.AddWork(new RoamWork(new string[] { RoamWork.East, "HALL" }, hall));
            lab.AddWork(new RoamWork(new string[] { RoamWork.West, "STORAGE" }, storage));
            storage.AddWork(new RoamWork(new string[] { RoamWork.East, "LAB" }, lab));
            hall.AddWork(new RoamWork(new string[] { RoamWork.West, "LAB" }, lab));
            hall.AddWork(new RoamWork(new string[] { RoamWork.East, "CONCOURSE" }, concourse));
            concourse.AddWork(new RoamWork(new string[] { RoamWork.West, "HALL" }, hall));

            // TEST
            //controlRoom.AddWork(new RoamWork(new string[] { "TEST" }, stadium));
            #endregion

            #region Items
            controlRoom.AddItem(new RadioItem());
            controlRoom.AddItem(new WindowItem {
                Description = "The window stares out into the vastness of space. The stars glitter in their reds, blues, and whites."
            });

            {
                CapsuleItem capsuleItem = new CapsuleItem {
                    Description = "Four empty capsules sit against the wall."
                };
                WindowItem windowItem = new WindowItem {
                    Description = "The stars from here are barely visible to the naked eye because of the sharp lights within the Concourse."
                };
                lab.AddItem(capsuleItem);
                lab.AddItem(new LecternItem(lab, concourse, capsuleItem, windowItem));
                concourse.AddItem(windowItem);
            }

            storage.AddItem(new HookItem());
            storage.AddItem(ropeItem);
            #endregion

            return(controlRoom);
        }
Beispiel #2
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;
            }
        }