public void Restack(IStackableBase stackableBase, int totalQuantity) { Inventory.RemoveAll(item => item.Base == (ItemBase)stackableBase); if (stackableBase.MaxStack == 0) { Debug.LogError("Max Stack is 0"); return; } while (totalQuantity > 0) { var instance = ItemInstanceBuilder.BuildInstance(stackableBase.ItemBase); var stackable = instance as IStackable; if (totalQuantity > stackableBase.MaxStack) { stackable.Quantity = stackableBase.MaxStack; totalQuantity -= stackableBase.MaxStack; } else { stackable.Quantity = totalQuantity; totalQuantity = 0; } Inventory.Add(instance); } }
public Character(CharacterSave save) { try { var baseExists = GameSettings.Instance.CharacterDatabase.Content.TryGetValue(save.baseUid, out var characterBase); if (!baseExists) { Debug.LogError("Missing character base"); throw new Exception(); } Base = characterBase; MasteryInstances = Base.masteryGroup.Deserialize(save.serializedTechInstances); Weapon = ItemInstanceBuilder.BuildInstance(save.Equipment[0]) as Equippable; Head = ItemInstanceBuilder.BuildInstance(save.Equipment[1]) as Equippable; Body = ItemInstanceBuilder.BuildInstance(save.Equipment[2]) as Equippable; Hand = ItemInstanceBuilder.BuildInstance(save.Equipment[3]) as Equippable; Feet = ItemInstanceBuilder.BuildInstance(save.Equipment[4]) as Equippable; Accessory = ItemInstanceBuilder.BuildInstance(save.Equipment[5]) as Equippable; Regenerate(); currentHp = save.currentHp; MasteryPoints = save.masteryPoints; } catch (Exception e) { throw new DeserializationFailureException(typeof(Character)); } }
public void Roll(ref List <Item> items) { var rng = GameController.Instance.Random.NextDouble(); if (rng <= chance) { var item = ItemInstanceBuilder.BuildInstance(ItemBase); items.Add(item); } }
public void AddItemBaseToInventory(ItemBase itemBase) { if (itemBase is IStackableBase iStackable) { AddStackableBaseToInventory(iStackable, 1); return; } var itemInstance = ItemInstanceBuilder.BuildInstance(itemBase); Inventory.Add(itemInstance); }
public void Roll(ref List <Item> items) { var rng = GameController.Instance.Random.NextDouble(); if (rng <= chance) { var consumable = ItemInstanceBuilder.BuildInstance(ConsumableBase) as Consumable; var quantity = GameController.Instance.Random.Next(this.quantity.x, this.quantity.y + 1); consumable.Quantity = quantity; items.Add(consumable); } }
public void AddStackableBaseToInventory(IStackableBase stackableBase, int quantity) { if (quantity == 0) { return; } if (stackableBase.MaxStack == 0) { Debug.LogError("Max Stack is 0"); return; } var instancesOfStackable = Inventory.Where(item => item.Base == stackableBase.ItemBase); if (!instancesOfStackable.Any()) { while (quantity > 0) { var instance = ItemInstanceBuilder.BuildInstance(stackableBase.ItemBase); var stackable = instance as IStackable; if (quantity > stackableBase.MaxStack) { stackable.Quantity = stackableBase.MaxStack; quantity -= stackableBase.MaxStack; } else { stackable.Quantity = quantity; quantity = 0; } Inventory.Add(instance); } } else { //Restack int totalQuantity = quantity; foreach (var instanceOfStackable in instancesOfStackable) { var stackable = instanceOfStackable as IStackable; totalQuantity += stackable.Quantity; } Inventory.RemoveAll(item => instancesOfStackable.Contains(item)); Debug.Log("Total Quantity = " + totalQuantity); Restack(stackableBase, totalQuantity); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var Inventory = new List <Item>(); var jtoken = JToken.Load(reader); var items = jtoken.ToObject <List <SerializedItem> >(); foreach (var item in items) { ItemSave parsedSave; var saveObject = item.ItemSave as JObject; switch (item.SaveType) { case "Equippable": { parsedSave = saveObject.ToObject <EquippableSave>(); break; } case "Consumable": { parsedSave = saveObject.ToObject <ConsumableSave>(); break; } case "MiscItem": { parsedSave = saveObject.ToObject <MiscItemSave>(); break; } default: throw new DeserializationFailureException(typeof(Item)); } if (parsedSave.baseUid == -1) { continue; } var builtItem = ItemInstanceBuilder.BuildInstance(parsedSave); if (builtItem != null) { Inventory.Add(builtItem); } } return(Inventory); }
private void Start() { //#if UNITY_EDITOR Party = PartyBases.EachDo(characterBase => new Character(characterBase)); Inventory = InventoryBase.EachDo(iB => ItemInstanceBuilder.BuildInstance(iB, true)); foreach (var character in Party) { var glc = (Equippable)ItemInstanceBuilder.BuildInstance(GameSettings.Instance.GoodLuckCharm); character.Equip(glc); } //#endif GameController.Instance.OnBeginEncounter.AddListener(PauseGame); GameController.Instance.OnEndEncounter.AddListener(UnpauseGame); BuildOverworldCharacter(); }
public Item[] GetItemReward() { if (overrideItemDrops != null && overrideItemDrops.Any()) { return(overrideItemDrops.Select(iB => ItemInstanceBuilder.BuildInstance(iB)).ToArray()); } var list = new List <Item>(); foreach (var encounterMonster in EncounterMonsters) { var monsterDrop = encounterMonster.Monster.RollItems(); list.AddRange(monsterDrop); } return(list.ToArray()); }
public override string GivePlayer() { var instance = ItemInstanceBuilder.BuildInstance(Item); if (instance is IStackable stackable) { stackable.Quantity = Quantity; PlayerController.Instance.AddItemToInventory(instance); return($"You found {stackable.Quantity}x <color={GameSettings.Instance.DefaultItemTextColor.ToHex()}>{instance}</color>!"); } else if (instance is Equippable equippable) { PlayerController.Instance.AddItemToInventory(instance); return($"You found {equippable.TierQualifiedName}!"); } else { PlayerController.Instance.AddItemToInventory(instance); return($"You found <color={GameSettings.Instance.DefaultItemTextColor.ToHex()}>{instance.Base.itemName}</color>!"); } }
public void BuyItem() { if (Item == null) { return; } var item = Item; var player = PlayerController.Instance; if (player.CurrentGold >= item.Price) { player.CurrentGold -= item.Price; var builtItem = ItemInstanceBuilder.BuildInstance(item.Item, ShopMenu.Shop.forceDefaults); player.AddItemToInventory(builtItem); ShopMenu.UpdateGoldText(); } else { Debug.LogError("Insufficient Gold"); } }
public Character(CharacterBase characterBase) { Base = characterBase; Weapon = ItemInstanceBuilder.BuildInstance(Base.Weapon, true) as Equippable; Head = ItemInstanceBuilder.BuildInstance(Base.Head, true) as Equippable; Body = ItemInstanceBuilder.BuildInstance(Base.Body, true) as Equippable; Hand = ItemInstanceBuilder.BuildInstance(Base.Hand, true) as Equippable; Feet = ItemInstanceBuilder.BuildInstance(Base.Feet, true) as Equippable; Accessory = ItemInstanceBuilder.BuildInstance(Base.Accessory, true) as Equippable; if (Base.masteryGroup) { MasteryInstances = Base.masteryGroup.Initialize(); } else { MasteryInstances = new MasteryInstance[0]; } Regenerate(); CurrentHp = Stats.MaxHp; }
public void InspectItem(ShopItem shopItem) { if (shopItem == null) { Item = null; ItemName.text = ""; ItemDescription.text = ""; ItemPrice.text = ""; ItemImage.enabled = false; BuyButton.interactable = false; return; } var item = shopItem.Item; Item = shopItem; ItemImage.enabled = true; ItemImage.sprite = item.itemIcon; ItemName.text = item.name; ItemDescription.text = item.itemText; if (item is EquippableBase equippable) { var sample = ItemInstanceBuilder.BuildInstance(equippable, true) as Equippable; ItemDescription.text += $"\n{sample.StatsDescription}"; } ItemPrice.text = $"{shopItem.Price}g"; if (shopItem.Price > PlayerController.Instance.CurrentGold) { BuyButton.interactable = false; } else { BuyButton.interactable = true; } }
public Item Copy() { return(ItemInstanceBuilder.BuildInstance(Serialize())); }