Beispiel #1
0
 public AttackMelee(Models.Ability abilityModel)
 {
     this.damageDealt = new List <AbilityResult>();
     this.abilityType = Spells.AbilityType.attackmelee;
     //this.targetingType = TargetingType.OFFENSIVE_SINGLE;
     this.physicalDamageModifier = 100;
     this.momentumApplied        = 0;
 }
Beispiel #2
0
        public static Ability CreateAbility(Models.Ability ability)
        {
            switch (ability.Name.ToLower())
            {
            case "attackmelee":
                return(new AttackMelee(ability));

            case "ember":
                return(new Ember(ability));

            default:
                return(new CustomAbility(ability));
            }
        }
Beispiel #3
0
 public Ember(Models.Ability abilityModel)
 {
 }
Beispiel #4
0
        public static Models.Ability Load(Models.Ability abl, GomObject obj)
        {
            if (obj == null)
            {
                return(abl);
            }
            if (abl == null)
            {
                return(null);
            }

            abl.Fqn    = obj.Name;
            abl.NodeId = obj.Id;

            // Ability Info
            abl.IsPassive = obj.Data.ValueOrDefault <bool>("ablIsPassive", false);
            abl.IsHidden  = obj.Data.ValueOrDefault <bool>("ablIsHidden", false);
            abl.Icon      = obj.Data.ValueOrDefault <string>("ablIconSpec", null);
            TorLib.Icons.Add(abl.Icon);

            var textLookup = obj.Data.Get <Dictionary <object, object> >("locTextRetrieverMap");

            // Load Ability Name
            var nameLookupData = (GomObjectData)textLookup[NameLookupKey];

            abl.NameId = nameLookupData.Get <long>("strLocalizedTextRetrieverStringID");
            abl.Name   = StringTable.TryGetString(abl.Fqn, nameLookupData);

            // Load Ability Description
            var descLookupData = (GomObjectData)textLookup[DescLookupKey];

            abl.DescriptionId = descLookupData.Get <long>("strLocalizedTextRetrieverStringID");
            abl.Description   = StringTable.TryGetString(abl.Fqn, descLookupData);

            abl.Id = (ulong)(abl.NameId >> 32);

            List <object> abilityEffectList = obj.Data.Get <List <object> >("ablEffectIDs");

            // Load Talent Description Tokens
            if (obj.Data.ContainsKey("ablDescriptionTokens"))
            {
                var tokenList = new List <string>();
                foreach (GomObjectData tokDesc in obj.Data.Get <List <object> >("ablDescriptionTokens"))
                {
                    if (!tokDesc.ContainsKey("ablDescriptionTokenType"))
                    {
                        tokenList.Add(String.Format("rank,{0}", tokDesc.Get <object>("ablDescriptionTokenMultiplier")));
                    }
                    else
                    {
                        string tokType = tokDesc.Get <object>("ablDescriptionTokenType").ToString();
                        switch (tokType)
                        {
                        case "ablDescriptionTokenTypeRank":
                            tokenList.Add(String.Format("rank,{0}", tokDesc.Get <object>("ablDescriptionTokenMultiplier")));
                            break;

                        case "ablDescriptionTokenTypeDamage": {
                            tokenList.AddRange(LoadParamDamage(tokDesc, abilityEffectList));
                            //tokenList.Add("damage");
                            break;
                        }

                        case "ablDescriptionTokenTypeHealing":
                            tokenList.Add(LoadParamHealing(tokDesc, abilityEffectList));
                            //tokenList.Add("healing");
                            break;

                        case "ablDescriptionTokenTypeDuration":
                            tokenList.Add(LoadParamDuration(tokDesc, abilityEffectList));
                            break;

                        case "ablDescriptionTokenTypeBindpoint":
                            tokenList.Add("bindpoint");
                            break;
                        }
                    }
                }

                if (tokenList.Count > 0)
                {
                    abl.TalentTokens  = "'" + String.Join("','", tokenList.ToArray()) + "'";
                    abl.AbilityTokens = String.Join(";", tokenList.ToArray());
                }
                else
                {
                    abl.TalentTokens  = String.Empty;
                    abl.AbilityTokens = null;
                }
            }

            // Load active ability info (energy cost, range, casting time, etc)
            abl.MinRange       = obj.Data.ValueOrDefault <float>("ablMinRange", 0);
            abl.MaxRange       = obj.Data.ValueOrDefault <float>("ablMaxRange", 0);
            abl.ApCost         = obj.Data.ValueOrDefault <float>("ablActionPointCost", 0);
            abl.EnergyCost     = obj.Data.ValueOrDefault <float>("ablEnergyCost", 0);
            abl.ForceCost      = obj.Data.ValueOrDefault <float>("ablForceCost", 0);
            abl.ChannelingTime = obj.Data.ValueOrDefault <float>("ablChannelingTime", 0);
            abl.CastingTime    = obj.Data.ValueOrDefault <float>("ablCastingTime", 0);
            abl.Cooldown       = obj.Data.ValueOrDefault <float>("ablCooldownTime", 0);

            abl.Pushback = obj.Data.ValueOrDefault <bool>("ablUsesSpellPushback", true);
            // abl.ApType
            if (abl.ApCost > 0)
            {
                if (abl.Fqn.StartsWith("abl.jedi_knight"))
                {
                    abl.ApType = ApType.Focus;
                }
                else if (abl.Fqn.StartsWith("abl.trooper"))
                {
                    abl.ApType = ApType.Ammo;
                }
                else if (abl.Fqn.StartsWith("abl.sith_war"))
                {
                    abl.ApType = ApType.Rage;
                }
            }
            else if ((abl.ForceCost == 0) && (abl.EnergyCost == 0) && (abl.Fqn.StartsWith("abl.bounty_hunter.")))
            {
                // Find heat cost
                abl.ApCost = HeatGeneration(abilityEffectList);
                abl.ApType = (abl.ApCost > 0) ? ApType.Heat : ApType.None;
            }
            else
            {
                abl.ApType = ApType.None;
            }

            abl.IgnoreAlacrity   = obj.Data.ValueOrDefault <bool>("ablIgnoreAlacrity", false);
            abl.GCD              = obj.Data.ValueOrDefault <float>("ablGlobalCooldownTime", -1f);
            abl.GcdOverride      = abl.GCD > -0.5f;
            abl.LineOfSightCheck = obj.Data.ValueOrDefault <bool>("ablIsLineOfSightChecked", true);
            abl.ModalGroup       = obj.Data.ValueOrDefault <long>("ablModalGroup", 0);

            var sharedCooldowns = (List <object>)obj.Data.ValueOrDefault <List <object> >("ablCooldownTimerSpecs", null);

            if (sharedCooldowns != null)
            {
                if (sharedCooldowns.Count > 1)
                {
                    //Console.WriteLine("{0} has more than 1 shared cooldown? How does this work.", abl.Fqn);
                }
                if (sharedCooldowns.Count > 0)
                {
                    abl.SharedCooldown = (ulong)sharedCooldowns[0];
                }
            }

            abl.TargetArc       = obj.Data.ValueOrDefault <float>("ablTargetArc", 0);
            abl.TargetArcOffset = obj.Data.ValueOrDefault <float>("ablTargetArcOffset", 0);
            abl.TargetRule      = ((ScriptEnum)obj.Data.ValueOrDefault <ScriptEnum>("ablTargetRule", null)).ToTargetRule();


            return(abl);
        }
Beispiel #5
0
 protected override void DeleteItem(Models.Ability child)
 {
     (child.Parent as NodeContainer).Remove(child);
 }
Beispiel #6
0
 public CustomAbility(Models.Ability model)
 {
     this.model = model;
 }