public CharacterAbility(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement)
 {
     CharacterAbilityGroup = characterAbilityGroup;
     CharacterTalent       = characterAbilityGroup.CharacterTalent;
     Character             = CharacterTalent.Character;
     RequiresAlive         = abilityElement.GetAttributeBool("requiresalive", true);
 }
Exemple #2
0
 public CharacterAbilityApplyStatusEffects(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     statusEffects   = CharacterAbilityGroup.ParseStatusEffects(CharacterTalent, abilityElement.GetChildElement("statuseffects"));
     applyToSelected = abilityElement.GetAttributeBool("applytoselected", false);
     nearbyCharactersAppliesToSelf   = abilityElement.GetAttributeBool("nearbycharactersappliestoself", true);
     nearbyCharactersAppliesToAllies = abilityElement.GetAttributeBool("nearbycharactersappliestoallies", true);
 }
Exemple #3
0
 public CharacterAbilityAtmosMachine(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     addedValue       = abilityElement.GetAttributeFloat("addedvalue", 0f);
     multiplyValue    = abilityElement.GetAttributeFloat("multiplyvalue", 1f);
     tags             = abilityElement.GetAttributeStringArray("tags", Array.Empty <string>(), convertToLowerInvariant: true);
     maxMultiplyCount = abilityElement.GetAttributeInt("maxmultiplycount", int.MaxValue);
 }
Exemple #4
0
 public CharacterAbilityModifyStatToSkill(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     statType        = CharacterAbilityGroup.ParseStatType(abilityElement.GetAttributeString("stattype", ""), CharacterTalent.DebugIdentifier);
     maxValue        = abilityElement.GetAttributeFloat("maxvalue", 0f);
     skillIdentifier = abilityElement.GetAttributeString("skillidentifier", string.Empty);
     useAll          = skillIdentifier == "all";
 }
 public CharacterAbilityModifyAttackData(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     if (abilityElement.GetChildElement("afflictions") is XElement afflictionElements)
     {
         afflictions = CharacterAbilityGroup.ParseAfflictions(CharacterTalent, afflictionElements);
     }
     addedDamageMultiplier = abilityElement.GetAttributeFloat("addeddamagemultiplier", 0f);
     addedPenetration      = abilityElement.GetAttributeFloat("addedpenetration", 0f);
     implode = abilityElement.GetAttributeBool("implode", false);
 }
Exemple #6
0
        public CharacterAbilityGiveResistance(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            resistanceId = abilityElement.GetAttributeString("resistanceid", abilityElement.GetAttributeString("resistance", string.Empty));
            multiplier   = abilityElement.GetAttributeFloat("multiplier", 1f); // rename this to resistance for consistency

            if (string.IsNullOrEmpty(resistanceId))
            {
                DebugConsole.ThrowError("Error in CharacterAbilityGiveResistance - resistance identifier not set.");
            }
        }
Exemple #7
0
        // should probably be split to different classes
        public CharacterAbilityModifyResistance(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            resistanceId = abilityElement.GetAttributeString("resistanceid", "");
            resistance   = abilityElement.GetAttributeFloat("resistance", 1f);

            if (string.IsNullOrEmpty(resistanceId))
            {
                DebugConsole.ThrowError("Error in CharacterAbilityModifyResistance - resistance identifier not set.");
            }
        }
Exemple #8
0
        public AbilityConditionHasPermanentStat(CharacterTalent characterTalent, XElement conditionElement) : base(characterTalent, conditionElement)
        {
            statIdentifier = conditionElement.GetAttributeString("statidentifier", string.Empty);
            if (string.IsNullOrEmpty(statIdentifier))
            {
                DebugConsole.ThrowError($"No stat identifier defined for {this} in talent {characterTalent.DebugIdentifier}!");
            }
            string statTypeName = conditionElement.GetAttributeString("stattype", string.Empty);

            statType = string.IsNullOrEmpty(statTypeName) ? StatTypes.None : CharacterAbilityGroup.ParseStatType(statTypeName, characterTalent.DebugIdentifier);
            min      = conditionElement.GetAttributeFloat("min", 0f);
        }
        public CharacterAbilityGiveAffliction(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            afflictionId = abilityElement.GetAttributeString("afflictionid", abilityElement.GetAttributeString("affliction", string.Empty));
            strength = abilityElement.GetAttributeFloat("strength", 0f);
            multiplyStrengthBySkill = abilityElement.GetAttributeString("multiplystrengthbyskill", string.Empty);
            setValue = abilityElement.GetAttributeBool("setvalue", false);

            if (string.IsNullOrEmpty(afflictionId))
            {
                DebugConsole.ThrowError("Error in CharacterAbilityGiveAffliction - affliction identifier not set.");
            }
        }
Exemple #10
0
        public CharacterAbilityGivePermanentStat(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            statIdentifier = abilityElement.GetAttributeString("statidentifier", "").ToLowerInvariant();
            string statTypeName = abilityElement.GetAttributeString("stattype", string.Empty);

            statType              = string.IsNullOrEmpty(statTypeName) ? StatTypes.None : CharacterAbilityGroup.ParseStatType(statTypeName, CharacterTalent.DebugIdentifier);
            value                 = abilityElement.GetAttributeFloat("value", 0f);
            maxValue              = abilityElement.GetAttributeFloat("maxvalue", float.MaxValue);
            targetAllies          = abilityElement.GetAttributeBool("targetallies", false);
            removeOnDeath         = abilityElement.GetAttributeBool("removeondeath", true);
            giveOnAddingFirstTime = abilityElement.GetAttributeBool("giveonaddingfirsttime", characterAbilityGroup.AbilityEffectType == AbilityEffectType.None);
            setValue              = abilityElement.GetAttributeBool("setvalue", false);
        }
Exemple #11
0
        public CharacterAbilityIncreaseSkill(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            skillIdentifier = abilityElement.GetAttributeString("skillidentifier", "").ToLowerInvariant();
            skillIncrease   = abilityElement.GetAttributeFloat("skillincrease", 0f);

            if (string.IsNullOrEmpty(skillIdentifier))
            {
                DebugConsole.ThrowError($"Error in talent \"{characterAbilityGroup.CharacterTalent.DebugIdentifier}\" - skill identifier not defined in CharacterAbilityIncreaseSkill.");
            }
            if (MathUtils.NearlyEqual(skillIncrease, 0))
            {
                DebugConsole.AddWarning($"Possible error in talent \"{characterAbilityGroup.CharacterTalent.DebugIdentifier}\" - skill increase set to 0.");
            }
        }
Exemple #12
0
        public CharacterAbilityApplyForce(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
        {
            force                = abilityElement.GetAttributeFloat("force", 0f);
            maxVelocity          = abilityElement.GetAttributeFloat("maxvelocity", 10f);
            afflictionIdentifier = abilityElement.GetAttributeString("afflictionidentifier", "");

            string[] limbTypesStr = abilityElement.GetAttributeStringArray("limbtypes", new string[0]);
            foreach (string limbTypeStr in limbTypesStr)
            {
                if (Enum.TryParse(limbTypeStr, out LimbType limbType))
                {
                    limbTypes.Add(limbType);
                }
                else
                {
                    DebugConsole.ThrowError($"Error in talent \"{characterAbilityGroup.CharacterTalent.DebugIdentifier}\" - \"{limbTypeStr}\" is not a valid limb type.");
                }
            }
        }
        // XML
        public static CharacterAbility Load(XElement abilityElement, CharacterAbilityGroup characterAbilityGroup, bool errorMessages = true)
        {
            Type   abilityType;
            string type = abilityElement.Name.ToString().ToLowerInvariant();

            try
            {
                abilityType = Type.GetType("Barotrauma.Abilities." + type + "", false, true);
                if (abilityType == null)
                {
                    if (errorMessages)
                    {
                        DebugConsole.ThrowError("Could not find the CharacterAbility \"" + type + "\" (" + characterAbilityGroup.CharacterTalent.DebugIdentifier + ")");
                    }
                    return(null);
                }
            }
            catch (Exception e)
            {
                if (errorMessages)
                {
                    DebugConsole.ThrowError("Could not find the CharacterAbility \"" + type + "\" (" + characterAbilityGroup.CharacterTalent.DebugIdentifier + ")", e);
                }
                return(null);
            }

            object[]         args = { characterAbilityGroup, abilityElement };
            CharacterAbility characterAbility;

            try
            {
                characterAbility = (CharacterAbility)Activator.CreateInstance(abilityType, args);
            }
            catch (TargetInvocationException e)
            {
                DebugConsole.ThrowError("Error while creating an instance of a CharacterAbility of the type " + abilityType + ".", e.InnerException);
                return(null);
            }

            return(characterAbility);
        }
Exemple #14
0
 public CharacterAbilityApplyStatusEffectsToAllies(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     allowSelf   = abilityElement.GetAttributeBool("allowself", true);
     maxDistance = abilityElement.GetAttributeFloat("maxdistance", float.MaxValue);
 }
 public CharacterAbilityGiveTalentPoints(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     amount = abilityElement.GetAttributeInt("amount", 0);
 }
 public CharacterAbilityInsurancePolicy(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     moneyPerMission = abilityElement.GetAttributeInt("moneypermission", 0);
 }
 public CharacterAbilityGainSimultaneousSkill(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     skillIdentifier = abilityElement.GetAttributeString("skillidentifier", "").ToLowerInvariant();
 }
 public CharacterAbilityByTheBook(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     moneyAmount      = abilityElement.GetAttributeInt("moneyamount", 0);
     experienceAmount = abilityElement.GetAttributeInt("experienceamount", 0);
     max = abilityElement.GetAttributeInt("max", 0);
 }
 public CharacterAbilityApplyStatusEffectsToNearestAlly(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     squaredMaxDistance = MathF.Pow(abilityElement.GetAttributeFloat("maxdistance", float.MaxValue), 2);
 }
 public CharacterAbilityModifyStatToFlooding(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     statType = CharacterAbilityGroup.ParseStatType(abilityElement.GetAttributeString("stattype", ""), CharacterTalent.DebugIdentifier);
     maxValue = abilityElement.GetAttributeFloat("maxvalue", 0f);
 }
 public CharacterAbilityMultitasker(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
 }
 public CharacterAbilityModifyAffliction(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     afflictionIdentifiers = abilityElement.GetAttributeStringArray("afflictionidentifiers", new string[0], convertToLowerInvariant: true);
     addedMultiplier       = abilityElement.GetAttributeFloat("addedmultiplier", 0f);
 }
 public CharacterAbilityBountyHunter(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     vitalityPercentage = abilityElement.GetAttributeFloat("vitalitypercentage", 0f);
 }
 public CharacterAbilityModifyValue(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     addedValue    = abilityElement.GetAttributeFloat("addedvalue", 0f);
     multiplyValue = abilityElement.GetAttributeFloat("multiplyvalue", 1f);
 }
 public CharacterAbilityModifyFlag(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     abilityFlag = CharacterAbilityGroup.ParseFlagType(abilityElement.GetAttributeString("flagtype", ""), CharacterTalent.DebugIdentifier);
 }
Exemple #26
0
 public CharacterAbilityApprenticeship(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
 }
 public CharacterAbilityApplyStatusEffectsToLastOrderedCharacter(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
 }
Exemple #28
0
 public CharacterAbilityUnlockTree(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
 }
 public CharacterAbilitySpawnItemsToContainer(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     statusEffects    = CharacterAbilityGroup.ParseStatusEffects(CharacterTalent, abilityElement.GetChildElement("statuseffects"));
     randomChance     = abilityElement.GetAttributeFloat("randomchance", 1f);
     oncePerContainer = abilityElement.GetAttributeBool("oncepercontainer", false);
 }
Exemple #30
0
 public CharacterAbilityPsychoClown(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement)
 {
     statType             = CharacterAbilityGroup.ParseStatType(abilityElement.GetAttributeString("stattype", ""), CharacterTalent.DebugIdentifier);
     maxValue             = abilityElement.GetAttributeFloat("maxvalue", 0f);
     afflictionIdentifier = abilityElement.GetAttributeString("afflictionidentifier", "");
 }