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); }
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; } }