Exemple #1
0
        bool IsMatchingAdvPair(string str1, string str2, SpecialAdvDis candidate, SpecialAdvDis incumbent)
        {
            if ((candidate.primaryString == str1 && incumbent.primaryString == str2 ||
                 candidate.primaryString == str2 && incumbent.primaryString == str1) &&
                candidate.secondaryString == incumbent.secondaryString)
            {
                return(true);
            }

            return(false);
        }
        bool IsDuplicateAdvantage(SpecialAdvDis advDis)
        {
            for (int i = 0; i < advDisList.Count; i++)
            {
                if (advDis.primaryString == advDisList[i].primaryString && advDis.secondaryString == advDisList[i].secondaryString)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #3
0
        bool CannotAddAdvantage(SpecialAdvDis advDis)
        {
            // Combine advantage and disadvantage lists
            List <SpecialAdvDis> adList = new List <SpecialAdvDis>();

            adList.AddRange(advDisList);
            adList.AddRange(otherList);
            for (int i = 0; i < adList.Count; i++)
            {
                // Duplicate
                if (advDis.primaryString == adList[i].primaryString && advDis.secondaryString == adList[i].secondaryString)
                {
                    return(true);
                }
                // Incompatible advantage/disadvantage pairs
                if (IsMatchingAdvPair(HardStrings.bonusToHit, HardStrings.phobia, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.expertiseIn, HardStrings.forbiddenWeaponry, advDis, adList[i]))
                {
                    return(true);
                }
                // No immunity, resistance, low tolerance, or critical weakness may co-exist
                if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.resistance, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.criticalWeakness, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.immunity, HardStrings.lowTolerance, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.resistance, HardStrings.lowTolerance, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.resistance, HardStrings.criticalWeakness, advDis, adList[i]))
                {
                    return(true);
                }
                if (IsMatchingAdvPair(HardStrings.lowTolerance, HardStrings.criticalWeakness, advDis, adList[i]))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #4
0
        void SecondaryPicker_OnItemPicked(int index, string itemString)
        {
            CloseWindow();
            string        primary = advDisList[advDisList.Count - 1].primaryString;
            SpecialAdvDis item    = new SpecialAdvDis {
                primaryString = primary, secondaryString = itemString, difficulty = GetAdvDisAdjustment(primary, itemString)
            };

            if (CannotAddAdvantage(item))
            {
                advDisList.RemoveAt(advDisList.Count - 1);
                return;
            }
            advDisList[advDisList.Count - 1] = item;
            UpdateLabels();
            UpdateDifficultyAdjustment();
        }
Exemple #5
0
        void AdvantagePicker_OnItemPicked(int index, string advantageName)
        {
            CloseWindow();

            SpecialAdvDis s = new SpecialAdvDis
            {
                primaryString     = advantageName
                , secondaryString = string.Empty
            };

            string[] secondaryList = null;
            // advantages/disadvantages with secondary options
            switch (advantageName)
            {
            case HardStrings.bonusToHit:
            case HardStrings.phobia:
                secondaryList = enemyTypeStrings;
                break;

            case HardStrings.expertiseIn:
            case HardStrings.forbiddenWeaponry:
                secondaryList = weaponTypeStrings;
                break;

            case HardStrings.immunity:
            case HardStrings.resistance:
            case HardStrings.criticalWeakness:
                secondaryList = effectTypeStrings;
                break;

            case HardStrings.increasedMagery:
                // limit to 1 magery increase advantage for the character
                bool alreadyAdded = false;
                foreach (SpecialAdvDis item in advDisList)
                {
                    if (item.primaryString == HardStrings.increasedMagery)
                    {
                        alreadyAdded = true;
                    }
                }
                if (alreadyAdded)
                {
                    return;
                }
                secondaryList = increasedMageryStrings;
                break;

            case HardStrings.rapidHealing:
            case HardStrings.spellAbsorption:
                secondaryList = effectEnvStrings;
                break;

            case HardStrings.regenerateHealth:
                secondaryList = regenHealthStrings;
                break;

            case HardStrings.damage:
                secondaryList = damageEnvStrings;
                break;

            case HardStrings.darknessPoweredMagery:
                secondaryList = darknessPoweredStrings;
                break;

            case HardStrings.forbiddenArmorType:
                secondaryList = armorTypeStrings;
                break;

            case HardStrings.forbiddenMaterial:
                secondaryList = materialStrings;
                break;

            case HardStrings.forbiddenShieldTypes:
                secondaryList = shieldTypeStrings;
                break;

            case HardStrings.lightPoweredMagery:
                secondaryList = lightPoweredStrings;
                break;

            case HardStrings.lowTolerance:
                secondaryList = effectTypeStrings;
                break;

            default:
                break;
            }
            if (secondaryList == null)
            {
                if (CannotAddAdvantage(s))
                {
                    return;
                }
                s = new SpecialAdvDis
                {
                    primaryString     = advantageName
                    , secondaryString = string.Empty
                    , difficulty      = GetAdvDisAdjustment(advantageName, string.Empty)
                };
                advDisList.Add(s);
                UpdateLabels();
                UpdateDifficultyAdjustment();
            }
            else
            {
                DaggerfallListPickerWindow secondaryPicker = new DaggerfallListPickerWindow(uiManager, this, DaggerfallUI.SmallFont, advPickerItemCount);
                secondaryPicker.ListBox.Font  = DaggerfallUI.SmallFont;
                secondaryPicker.OnItemPicked += SecondaryPicker_OnItemPicked;
                secondaryPicker.OnCancel     += SecondaryPicker_OnCancel;
                foreach (string secondaryString in secondaryList)
                {
                    secondaryPicker.ListBox.AddItem(secondaryString);
                }
                uiManager.PushWindow(secondaryPicker);
                advDisList.Add(s);
            }
        }
Exemple #6
0
        void PrimaryPicker_OnItemPicked(int index, string advantageName)
        {
            CloseWindow();

            string        primaryKey = primaryPicker.ListBox.GetItem(index).tag as string;
            SpecialAdvDis s          = new SpecialAdvDis
            {
                primaryStringKey   = primaryKey,
                secondaryStringKey = string.Empty
            };

            string[] secondaryList = null;
            // advantages/disadvantages with secondary options
            switch (primaryKey)
            {
            case HardStrings.bonusToHit:
            case HardStrings.phobia:
                secondaryList = enemyTypeStringKeys;
                break;

            case HardStrings.expertiseIn:
            case HardStrings.forbiddenWeaponry:
                secondaryList = weaponTypeStringKeys;
                break;

            case HardStrings.immunity:
            case HardStrings.resistance:
            case HardStrings.criticalWeakness:
                secondaryList = effectTypeStringKeys;
                break;

            case HardStrings.increasedMagery:
                // limit to 1 magery increase advantage for the character
                bool alreadyAdded = false;
                foreach (SpecialAdvDis item in advDisList)
                {
                    if (item.primaryStringKey == HardStrings.increasedMagery)
                    {
                        alreadyAdded = true;
                    }
                }
                if (alreadyAdded)
                {
                    return;
                }
                secondaryList = increasedMageryStringKeys;
                break;

            case HardStrings.rapidHealing:
            case HardStrings.spellAbsorption:
                secondaryList = effectEnvStringKeys;
                break;

            case HardStrings.regenerateHealth:
                secondaryList = regenHealthStringKeys;
                break;

            case HardStrings.damage:
                secondaryList = damageEnvStringKeys;
                break;

            case HardStrings.darknessPoweredMagery:
                secondaryList = darknessPoweredStringKeys;
                break;

            case HardStrings.forbiddenArmorType:
                secondaryList = armorTypeStringKeys;
                break;

            case HardStrings.forbiddenMaterial:
                secondaryList = materialStringKeys;
                break;

            case HardStrings.forbiddenShieldTypes:
                secondaryList = shieldTypeStringKeys;
                break;

            case HardStrings.lightPoweredMagery:
                secondaryList = lightPoweredStringKeys;
                break;

            case HardStrings.lowTolerance:
                secondaryList = effectTypeStringKeys;
                break;

            default:
                break;
            }
            if (secondaryList == null)
            {
                if (CannotAddAdvantage(s))
                {
                    return;
                }
                s = new SpecialAdvDis
                {
                    primaryStringKey   = primaryKey,
                    secondaryStringKey = string.Empty,
                    difficulty         = GetAdvDisAdjustment(primaryKey, string.Empty)
                };
                advDisList.Add(s);
                UpdateLabels();
                UpdateDifficultyAdjustment();
            }
            else
            {
                secondaryPicker.ListBox.ClearItems();
                foreach (string secondaryKey in secondaryList)
                {
                    secondaryPicker.ListBox.AddItem(TextManager.Instance.GetLocalizedText(secondaryKey), -1, secondaryKey);
                }
                uiManager.PushWindow(secondaryPicker);
                advDisList.Add(s);
            }
        }