Ejemplo n.º 1
0
        public IEnumerable <Status> CreateResources()
        {
            List <ResourceAmount> stashed = Agent.Blackboard.GetData <List <ResourceAmount> >("ResourcesStashed");

            ItemType.SelectedResources = stashed;
            if (ItemType.Name == ResourceLibrary.ResourceType.Trinket)
            {
                Resource craft = ResourceLibrary.GenerateTrinket(stashed.ElementAt(0).ResourceType.Type,
                                                                 (Agent.Stats.Dexterity + Agent.Stats.Intelligence) / 15.0f * MathFunctions.Rand(0.5f, 1.75f));
                ItemType.ResourceCreated = craft.Type;
            }
            else if (ItemType.Name == ResourceLibrary.ResourceType.Meal)
            {
                if (stashed.Count < 2)
                {
                    yield return(Act.Status.Fail);

                    yield break;
                }
                Resource craft = ResourceLibrary.CreateMeal(stashed.ElementAt(0).ResourceType, stashed.ElementAt(1).ResourceType);
                ItemType.ResourceCreated = craft.Type;
            }
            else if (ItemType.Name == ResourceLibrary.ResourceType.Ale)
            {
                Resource craft = ResourceLibrary.CreateAle(stashed.ElementAt(0).ResourceType);
                ItemType.ResourceCreated = craft.Type;
            }
            else if (ItemType.Name == ResourceLibrary.ResourceType.Bread)
            {
                Resource craft = ResourceLibrary.CreateBread(stashed.ElementAt(0).ResourceType);
                ItemType.ResourceCreated = craft.Type;
            }
            else if (ItemType.Name == ResourceLibrary.ResourceType.GemTrinket)
            {
                Resource gem     = null;
                Resource trinket = null;
                foreach (ResourceAmount stashedResource in stashed)
                {
                    if (stashedResource.ResourceType.Tags.Contains(Resource.ResourceTags.Craft))
                    {
                        trinket = stashedResource.ResourceType;
                    }

                    if (stashedResource.ResourceType.Tags.Contains(Resource.ResourceTags.Gem))
                    {
                        gem = stashedResource.ResourceType;
                    }
                }


                if (gem == null || trinket == null)
                {
                    yield return(Status.Fail);

                    yield break;
                }

                Resource craft = ResourceLibrary.EncrustTrinket(trinket, gem.Type);
                ItemType.ResourceCreated = craft.Type;
            }

            Resource resource = ResourceLibrary.Resources[ItemType.ResourceCreated];

            Creature.Inventory.Resources.AddResource(new ResourceAmount(resource, 1));
            yield return(Status.Success);
        }
Ejemplo n.º 2
0
        public IEnumerable <Status> CreateResources(List <ResourceAmount> stashed)
        {
            if (stashed == null || stashed.Count == 0)
            {
                yield return(Act.Status.Fail);

                yield break;
            }

            Item.SelectedResources = stashed;
            ResourceType ResourceCreated = Item.ItemType.ResourceCreated;

            switch (Item.ItemType.CraftActBehavior)
            {
            case CraftItem.CraftActBehaviors.Object:
            {
                Resource craft = Item.ItemType.ToResource(Creature.World, stashed);
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.Trinket:
            {
                Resource craft = ResourceLibrary.GenerateTrinket(stashed.ElementAt(0).ResourceType,
                                                                 (Agent.Stats.Dexterity + Agent.Stats.Intelligence) / 15.0f * MathFunctions.Rand(0.5f, 1.75f));
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.Meal:
            {
                if (stashed.Count < 2)
                {
                    yield return(Act.Status.Fail);

                    yield break;
                }
                Resource craft = ResourceLibrary.CreateMeal(stashed.ElementAt(0).ResourceType, stashed.ElementAt(1).ResourceType);
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.Ale:
            {
                Resource craft = ResourceLibrary.CreateAle(stashed.ElementAt(0).ResourceType);
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.Bread:
            {
                Resource craft = ResourceLibrary.CreateBread(stashed.ElementAt(0).ResourceType);
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.GemTrinket:
            {
                Resource gem     = null;
                Resource trinket = null;
                foreach (ResourceAmount stashedResource in stashed)
                {
                    if (ResourceLibrary.GetResourceByName(stashedResource.ResourceType).Tags.Contains(Resource.ResourceTags.Craft))
                    {
                        trinket = ResourceLibrary.GetResourceByName(stashedResource.ResourceType);
                    }

                    if (ResourceLibrary.GetResourceByName(stashedResource.ResourceType).Tags.Contains(Resource.ResourceTags.Gem))
                    {
                        gem = ResourceLibrary.GetResourceByName(stashedResource.ResourceType);
                    }
                }


                if (gem == null || trinket == null)
                {
                    yield return(Status.Fail);

                    yield break;
                }

                Resource craft = ResourceLibrary.EncrustTrinket(trinket.Name, gem.Name);
                ResourceCreated = craft.Name;
            }
            break;

            case CraftItem.CraftActBehaviors.Normal:
            default:
                break;
            }

            Resource resource = ResourceLibrary.Resources[ResourceCreated];

            Creature.Inventory.AddResource(new ResourceAmount(resource, Item.ItemType.CraftedResultsCount));
            Creature.AI.AddXP((int)Item.ItemType.BaseCraftTime);
            yield return(Status.Success);
        }