Beispiel #1
0
    public bool Insert_Export(Resource resource)
    {
        if (Cheap_Exports.Contains(resource) || Exports.Contains(resource) || Expensive_Exports.Contains(resource))
        {
            return(false);
        }
        bool possible = false;

        foreach (Resource.ResourceTag tag in resource.Tags)
        {
            if (impossible_exports.Contains(tag))
            {
                return(false);
            }
            if (possible_exports.Contains(tag))
            {
                possible = true;
            }
        }
        if (!possible)
        {
            return(false);
        }
        int random = RNG.Instance.Next(0, 100);

        if (random < 35)
        {
            Cheap_Exports.Add(resource);
        }
        else if (random >= 35 && random < 65)
        {
            Exports.Add(resource);
        }
        else
        {
            Expensive_Exports.Add(resource);
        }
        return(true);
    }
Beispiel #2
0
    public float Get_Export_Price(Resource resource)
    {
        float multiplier = 1.0f;

        if (Exports.Contains(resource))
        {
            multiplier = EXPORT_BASE_PRICE_MULTIPLIER;
        }
        else if (Expensive_Exports.Contains(resource))
        {
            multiplier = EXPORT_EXPENSIVE_PRICE_MULTIPLIER;
        }
        else if (Cheap_Exports.Contains(resource))
        {
            multiplier = EXPORT_CHEAP_PRICE_MULTIPLIER;
        }
        else
        {
            return(0.0f);
        }
        return(Discount.HasValue ? resource.Value * (multiplier - Discount.Value) : resource.Value *multiplier);
    }
Beispiel #3
0
    private void Initialize_Exports(List <Resource.ResourceTag> main_exports, List <Resource.ResourceTag> rare_exports, List <Resource.ResourceTag> never_export)
    {
        Dictionary <Resource.ResourceRarity, int> base_export_chance = new Dictionary <Resource.ResourceRarity, int>()
        {
            { Resource.ResourceRarity.Common, 50 },
            { Resource.ResourceRarity.Uncommon, 35 },
            { Resource.ResourceRarity.Rare, 10 },
            { Resource.ResourceRarity.Very_Rare, 5 }
        };

        foreach (Resource resource in Resource.All)
        {
            if (Exports.Contains(resource) || Cheap_Exports.Contains(resource) || Expensive_Exports.Contains(resource) || resource.Rarity == Resource.ResourceRarity.Non_Tradeable)
            {
                continue;
            }
            int  export_chance   = base_export_chance[resource.Rarity];
            bool is_main_export  = false;
            bool is_rare_export  = false;
            bool is_never_export = false;
            foreach (Resource.ResourceTag tag in resource.Tags)
            {
                if (never_export.Contains(tag))
                {
                    is_never_export = true;
                }
                if (main_exports.Contains(tag))
                {
                    is_main_export = true;
                }
                if (rare_exports.Contains(tag))
                {
                    is_rare_export = true;
                }
            }
            if (is_never_export)
            {
                is_main_export = false;
                is_rare_export = false;
            }
            if (is_main_export)
            {
                is_rare_export = false;
            }
            if (is_main_export || is_rare_export)
            {
                if (is_rare_export)
                {
                    export_chance /= 5;
                }
                if (RNG.Instance.Next(0, 100) <= export_chance)
                {
                    if (is_rare_export)
                    {
                        if (RNG.Instance.Next(0, 100) <= 75)
                        {
                            Expensive_Exports.Add(resource);
                        }
                        else
                        {
                            Exports.Add(resource);
                        }
                    }
                    else
                    {
                        int random = RNG.Instance.Next(0, 100);
                        if (random <= 25)
                        {
                            Expensive_Exports.Add(resource);
                        }
                        else if (random >= 75)
                        {
                            Cheap_Exports.Add(resource);
                        }
                        else
                        {
                            Exports.Add(resource);
                        }
                    }
                }
            }
        }
    }