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));
        }
    }
Example #3
0
        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);
    }
Example #5
0
        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);
        }
    }
Example #7
0
    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());
    }
Example #10
0
    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>!");
        }
    }
Example #11
0
    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;
    }
Example #13
0
    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;
        }
    }
Example #14
0
 public Item Copy()
 {
     return(ItemInstanceBuilder.BuildInstance(Serialize()));
 }