コード例 #1
0
            public static void Postfix(SGBarracksSkillPip __instance, string type, int index, bool hasPassives, AbilityDef ability)
            {
                if (!hasPassives)
                {
                    return;
                }

                SimGameState simGameState = LazySingletonBehavior <UnityGameInstance> .Instance.Game.Simulation;

                if (simGameState == null)
                {
                    return;
                }

                // Get the abilities that are not primary
                List <AbilityDef> abilities = simGameState.GetAbilityDefFromTree(type, index).Where(x => !x.IsPrimaryAbility).ToList();

                // Gets the first ability that has a tooltip
                AbilityDef passiveAbility = abilities.Find(x => x.DisplayParams == AbilityDef.DisplayParameters.ShowInPilotToolTip && !(string.IsNullOrEmpty(x.Description.Name) || string.IsNullOrEmpty(x.Description.Details)));

                // Clear the dot on tooltip-less dots
                if (passiveAbility == null)
                {
                    Traverse.Create(__instance).Field("skillPassiveTraitDot").GetValue <SVGImage>().gameObject.SetActive(false);
                }
                if (passiveAbility != null)
                {
                    __instance.gameObject.FindFirstChildNamed("obj-pip").GetComponent <HBSTooltip>().SetDefaultStateData(TooltipUtilities.GetStateDataFromObject(passiveAbility.Description));
                }
            }
コード例 #2
0
        public override void PostAbilityAttempt(Pawn caster, AbilityDef ability)
        {
            ForceAbilityDef forceDef = ability as ForceAbilityDef;

            if (forceDef != null)
            {
                if (forceDef.changedAlignmentType != ForceAlignmentType.None)
                {
                    //Log.Message("Alignment: " + AlignmentValue.ToStringPercent());
                    //Log.Message("Alignment Change: " + forceDef.changedAlignmentRate.ToStringPercent());
                    AlignmentValue += forceDef.changedAlignmentRate;
                    //Log.Message("New Alignment: " + AlignmentValue.ToStringPercent());
                    UpdateAlignment();
                }

                if (ForcePool != null)
                {
                    float poolCost = 0f;
                    //Log.Message("PC" + forceDef.forcePoolCost.ToString());
                    poolCost = forceDef.forcePoolCost - (forceDef.forcePoolCost * (0.15f * (float)ForceSkillLevel("PJ_ForcePool")));
                    //Log.Message("PC" + poolCost.ToString());
                    ForcePool.UseForcePower(poolCost);
                }
            }
        }
コード例 #3
0
        private string GetTitle()
        {
            if (thing != null)
            {
                return(thing.LabelCapNoCount);
            }
            if (worldObject != null)
            {
                return(worldObject.LabelCap);
            }
            ThingDef thingDef = Def as ThingDef;

            if (thingDef != null)
            {
                return(GenLabel.ThingLabel(thingDef, stuff).CapitalizeFirst());
            }
            AbilityDef abilityDef = Def as AbilityDef;

            if (abilityDef != null)
            {
                return(abilityDef.LabelCap);
            }
            if (titleDef != null)
            {
                return(titleDef.GetLabelCapForBothGenders());
            }
            if (faction != null)
            {
                return(faction.Name);
            }
            return(Def.LabelCap);
        }
コード例 #4
0
        public AbilityDef GetAbilityDef(int index)
        {
            try
            {
                return(this.TMabilityDefs[index]);
            }
            catch
            {
                return(this.TMabilityDefs[0]);
            }
            //
            AbilityDef result = null;
            bool       flag   = this.TMabilityDefs != null && this.TMabilityDefs.Count > 0;

            if (flag)
            {
                result = this.TMabilityDefs[0];
                bool flag2 = index > -1 && index < this.TMabilityDefs.Count;
                if (flag2)
                {
                    result = this.TMabilityDefs[index];
                }
                else
                {
                    bool flag3 = index >= this.TMabilityDefs.Count;
                    if (flag3)
                    {
                        result = this.TMabilityDefs[this.TMabilityDefs.Count - 1];
                    }
                }
            }
            return(result);
        }
コード例 #5
0
		public override void DoSettingsWindowContents(Rect inRect)
		{
			base.DoSettingsWindowContents(inRect);
			var psycasts = DefDatabase<AbilityDef>.AllDefsListForReading;
			foreach (var psycast in psycasts)
			{
				if (settings.psycastStates == null) settings.psycastStates = new Dictionary<string, bool>();
				if (!settings.psycastStates.ContainsKey(psycast.defName))
				{
					settings.psycastStates[psycast.defName] = true;
				}
			}
			var morePsycasts_psycasts = typeof(PsycastDefOf).GetFields();
			foreach (var psycast in morePsycasts_psycasts)
			{
				if (settings.psycastStats == null) settings.psycastStats = new Dictionary<string, List<float>>();
				AbilityDef current = DefDatabase<AbilityDef>.GetNamed(psycast.Name);
				if (!settings.psycastStats.ContainsKey(current.defName))
				{
					List<float> currentList = new List<float>();
					currentList.Add(current.statBases.GetStatValueFromList(StatDefOf.Ability_EntropyGain, 0));
					currentList.Add(current.statBases.GetStatValueFromList(StatDefOf.Ability_PsyfocusCost, 0));
					currentList.Add(current.statBases.GetStatValueFromList(StatDefOf.Ability_Duration, 0));
					settings.psycastStats[current.defName] = currentList;
				}
			}
			settings.DoSettingsWindowContents(inRect);
		}
コード例 #6
0
        public override bool Sucess(AbilityDef ability, Saveable_Caster pawn)
        {
            Brain brain = pawn.pawn.GetSquadBrain();

            if (brain == null)
            {
                return(false);
            }

            MapComponent_Ability mapComponent = MapComponent_Ability.GetOrCreate();

            foreach (Pawn p in brain.ownedPawns)
            {
                if (p.def.defName == "Ant_Queen")
                {
                    return(false);
                }

                Saveable_Caster save;
                if (mapComponent.TryGetPawnHability(p, out save))
                {
                    if ((save.currentAbility != null) &&
                        (save.currentAbility.defName == "AlienEvolveToPrincessAbility"))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
コード例 #7
0
ファイル: abilityMenu.cs プロジェクト: stephwang/itsagame
    void PopulateAbilityMenuPanes()
    {
        // Populate abilities
        GameObject abilityPane  = GameObject.Find("Abilities Pane");
        int        numAbilities = abilityConstants.ABILITYLIST.Count;

        for (int i = 0; i < numAbilities; i++)
        {
            AbilityDef ability       = abilityConstants.ABILITYLIST[i];
            GameObject abilityButton = Instantiate(abilityButtonPrefab, abilityPane.transform);
            abilityButton.name = ability.aName;
            abilityButton.GetComponent <Image>().sprite      = ability.aSprite;
            abilityButton.GetComponent <ButtonProps>().index = i;
        }

        // Populate modifiers
        GameObject modifierPane = GameObject.Find("Modifiers Pane");
        int        numModifiers = abilityConstants.MODIFIERLIST.Count;

        for (int i = 0; i < numModifiers; i++)
        {
            ModifierDef modifier       = abilityConstants.MODIFIERLIST[i];
            GameObject  modifierButton = Instantiate(modifierButtonPrefab, modifierPane.transform);
            modifierButton.name = modifier.mName;
            Image buttonImage = modifierButton.GetComponent <Image>();
            buttonImage.sprite = modifier.mSprite;
            buttonImage.color  = modifier.mColor;
            modifierButton.GetComponent <ButtonProps>().index = i;
        }
    }
コード例 #8
0
 /// <summary>
 /// Gets the mutagenic entropy gain from this ability def.
 /// </summary>
 /// <param name="def">The definition.</param>
 /// <returns></returns>
 public static float GetMutagenicEntropyGain([NotNull] this AbilityDef def)
 {
     if (def == null)
     {
         throw new ArgumentNullException(nameof(def));
     }
     return(def.statBases?.GetStatValueFromList(PCStatDefOf.Ability_MutagenicEntropyGain, 0) ?? 0);
 }
コード例 #9
0
ファイル: Patches.cs プロジェクト: ajkroeg/Abilifier
 public static void Prefix(int index, ref AbilityDef ability)
 {
     // prevent Ability icons appearing at non-tier locations
     // the actual AbilityDef is going to be provided later anyway
     if (index != 4 && index != 7 && ability != null)
     {
         Trace($"nulling {ability.ReqSkill}|{index}");
         ability = null;
     }
 }
コード例 #10
0
        //        internal static readonly List<AbilityDef> ModAbilities = new List<AbilityDef>();

        //        internal static void PopulateAbilities()
        //        {
        //            var jsonFiles = new DirectoryInfo(
        //                Path.Combine(modSettings.modDirectory, "Abilities")).GetFiles().ToList();
        //            foreach (var file in jsonFiles)
        //            {
        //                var abilityDef = new AbilityDef();
        //                abilityDef.FromJSON(File.ReadAllText(file.FullName));
        //                if (!ModAbilities.Contains(abilityDef))
        //                {
        //                    ModAbilities.Add(abilityDef);
        //                }
        //                else
        //                {
        //                    Log("Duplicate AbilityDef, id is " + abilityDef.Id);
        //                }
        //            }
        //        }

        // modified copy from assembly
        private static bool HasExistingAbilityAtTier(PilotDef pilotDef, AbilityDef abilityToUse)
        {
            var result = pilotDef.AbilityDefs.Any(x =>
                                                  x.IsPrimaryAbility == true &&
                                                  //x.ReqSkill != SkillType.NotSet &&
                                                  x.ReqSkill == abilityToUse.ReqSkill &&
                                                  x.ReqSkillLevel == abilityToUse.ReqSkillLevel);

            return(result);
        }
コード例 #11
0
		public static void RemoveDef(AbilityDef def)
		{
			try
			{
				if (DefDatabase<AbilityDef>.AllDefsListForReading.Contains(def))
				{
					DefDatabase<AbilityDef>.AllDefsListForReading.Remove(def);
				}
			}
			catch { };
		}
コード例 #12
0
 public static void Post_GetTooltip(AbilityDef __instance, Pawn pawn, ref string __result)
 {
     if (pawn != null)
     {
         bool silenced = pawn.health.hediffSet.hediffs.Any(x => x.def.HasModExtension <PsySilencerExt>());
         if (silenced)
         {
             __result = __instance.LabelCap + ((__instance.level > 0) ? ("\n" + "Level".Translate() + " " + __instance.level) : "") + "\n\n" + __instance.description + "\n\n" + __instance.StatSummary.ToLineList(null, false);
         }
     }
 }
コード例 #13
0
 public static void GainAbility(this Pawn_AbilityTracker tracker, AbilityDef def, Thing source)
 {
     if (!tracker.abilities.Any((Ability a) => a.def == def))
     {
         tracker.abilities.Add(Activator.CreateInstance(def.abilityClass, new object[]
         {
             tracker.pawn,
             def,
             source
         }) as Ability);
     }
 }
コード例 #14
0
        protected override Texture2D GetIconFor(Pawn pawn)
        {
            AbilityDef abilityDef = def.Ext().ability;

            foreach (Ability a in pawn.abilities.abilities)
            {
                if (a.def == abilityDef)
                {
                    return(abilityDef.uiIcon);
                }
            }
            return(null);
        }
コード例 #15
0
 public virtual IEnumerable <string> ConfigErrors(AbilityDef parentDef)
 {
     if (compClass == null)
     {
         yield return("compClass is null");
     }
     for (int i = 0; i < parentDef.comps.Count; i++)
     {
         if (parentDef.comps[i] != this && parentDef.comps[i].compClass == compClass)
         {
             yield return("two comps with same compClass: " + compClass);
         }
     }
 }
コード例 #16
0
        public static void PrefixAbility(MethodBase __originalMethod, AbilityDef def, StatDef stat, ref Profiler __state)
        {
            if (Active && !GetValDetour)
            {
                string state = string.Empty;
                if (ByDef)
                {
                    state = $"{stat.defName} abstract for {def.defName}";
                }
                else
                {
                    state = $"{stat.defName} abstract";
                }

                __state = ProfileController.Start(state, null, null, __originalMethod);
            }
        }
コード例 #17
0
        public static bool PrefixAbility(AbilityDef def, StatDef stat, ref string __state)
        {
            if (Active && !GetValDetour)
            {
                if (ByDef)
                {
                    __state = $"{stat.defName} abstract for {def.defName}";
                }
                else
                {
                    __state = $"{stat.defName} abstract";
                }

                Analyzer.Start(__state);
            }
            return(true);
        }
コード例 #18
0
ファイル: Hediff_Psylink.cs プロジェクト: KraigXu/GameProject
        public void TryGiveAbilityOfLevel(int abilityLevel)
        {
            string str  = "LetterLabelPsylinkLevelGained".Translate() + ": " + pawn.LabelShortCap;
            string text = ((abilityLevel == 1) ? "LetterPsylinkLevelGained_First" : "LetterPsylinkLevelGained_NotFirst").Translate(pawn.Named("USER"));

            if (!pawn.abilities.abilities.Any((Ability a) => a.def.level == abilityLevel))
            {
                AbilityDef abilityDef = DefDatabase <AbilityDef> .AllDefs.Where((AbilityDef a) => a.level == abilityLevel).RandomElement();

                pawn.abilities.GainAbility(abilityDef);
                text += "\n\n" + "LetterPsylinkLevelGained_PsycastLearned".Translate(pawn.Named("USER"), abilityLevel, abilityDef.LabelCap);
            }
            if (PawnUtility.ShouldSendNotificationAbout(pawn))
            {
                Find.LetterStack.ReceiveLetter(str, text, LetterDefOf.PositiveEvent, pawn);
            }
        }
コード例 #19
0
        public void CastPsycast(Pawn hitPawn, Pawn sourcePawn)
        {
            if (Rand.Value < Props.psycastChance)
            {
                if (hitPawn != null & hitPawn.health != null)
                {
                    if (sourcePawn.psychicEntropy == null)
                    {
                        sourcePawn.psychicEntropy = new Pawn_PsychicEntropyTracker(sourcePawn);
                    }
                    string     psycastName = Props.psycastsToUse[Rand.Range(0, Props.psycastsToUse.Count)];
                    AbilityDef psycastDef  = DefDatabase <AbilityDef> .GetNamed(psycastName);

                    Psycast psycast = new Psycast(sourcePawn, psycastDef);
                    psycast.Activate(hitPawn, sourcePawn);
                }
            }
        }
コード例 #20
0
        // Token: 0x06002189 RID: 8585 RVA: 0x000CB488 File Offset: 0x000C9688
        public override void DrawHighlight(LocalTargetInfo target)
        {
            AbilityDef def = this.ability.def;

            this.DrawRadius();
            if (this.CanHitTarget(target) && this.IsApplicableTo(target, false))
            {
                if (def.HasAreaOfEffect)
                {
                    if (target.IsValid)
                    {
                        GenDraw.DrawTargetHighlight(target);
                        GenDraw.DrawRadiusRing(target.Cell, def.EffectRadius, Verb_CastAbility.RadiusHighlightColor, null);
                    }
                }
                else
                {
                    GenDraw.DrawTargetHighlight(target);
                }
            }
            if (target.IsValid)
            {
                this.ability.DrawEffectPreviews(target);
            }
            this.verbProps.DrawRadiusRing(this.caster.Position);
            if (target.IsValid)
            {
                GenDraw.DrawTargetHighlight(target);
                bool      flag;
                float     num = this.HighlightFieldRadiusAroundTarget(out flag);
                ShootLine shootLine;
                if (num > 0.2f && this.TryFindShootLineFromTo(this.caster.Position, target, out shootLine))
                {
                    if (flag)
                    {
                        GenExplosion.RenderPredictedAreaOfEffect(shootLine.Dest, num);
                        return;
                    }
                    GenDraw.DrawFieldEdges((from x in GenRadial.RadialCellsAround(shootLine.Dest, num, true)
                                            where x.InBounds(Find.CurrentMap)
                                            select x).ToList <IntVec3>());
                }
            }
        }
コード例 #21
0
ファイル: Helpers.cs プロジェクト: gnivler/Abilifier
        internal static void PopulateAbilities()
        {
            var jsonFiles = new DirectoryInfo(
                Path.Combine(modSettings.modDirectory, "Abilities")).GetFiles().ToList();

            foreach (var file in jsonFiles)
            {
                var abilityDef = new AbilityDef();
                abilityDef.FromJSON(File.ReadAllText(file.FullName));
                if (!ModAbilities.Contains(abilityDef))
                {
                    ModAbilities.Add(abilityDef);
                }
                else
                {
                    Log("Duplicate AbilityDef, id is " + abilityDef.Id);
                }
            }
        }
コード例 #22
0
        public AbilityDef GetAbilityDef(int index)
        {
            AbilityDef result = null;

            if (abilityDefs != null && abilityDefs.Count > 0)
            {
                result = abilityDefs[0];

                if (index > -1 && index < abilityDefs.Count)
                {
                    result = abilityDefs[index];
                }
                else if (index >= abilityDefs.Count)
                {
                    result = abilityDefs[abilityDefs.Count - 1];
                }
            }
            return(result);
        }
コード例 #23
0
 public static void TryExecute(CompAbilityUser casterComp, AbilityDef abilitydef, PawnAbility ability, LocalTargetInfo target, int minRange, out bool success)
 {
     success = false;
     if (ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster           = casterComp.Pawn;
         LocalTargetInfo jobTarget        = target;
         float           distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
         if (distanceToTarget > minRange && distanceToTarget < (abilitydef.MainVerb.range * .9f) && jobTarget != null && jobTarget.Thing != null && Functions.Eval.HasLoSFromTo(caster.Position, jobTarget, caster, 0, abilitydef.MainVerb.range))
         {
             Log.Message("ability is " + ability.Def.defName + " target is " + jobTarget.Thing.LabelShort + " caster job is " + caster.CurJob);
             Job job = ability.GetJob(AbilityContext.AI, jobTarget);
             Log.Message("job is " + job);
             job.endIfCantShootTargetFromCurPos = true;
             caster.jobs.TryTakeOrderedJob(job);
             success = true;
         }
         //a small change to test a push
     }
 }
コード例 #24
0
        public void TryGiveAbilityOfLevel_NewTemp(int abilityLevel, bool sendLetter = true)
        {
            string str  = "LetterLabelPsylinkLevelGained".Translate() + ": " + pawn.LabelShortCap;
            string text = null;

            if (!pawn.abilities.abilities.Any((Ability a) => a.def.level == abilityLevel))
            {
                AbilityDef abilityDef = DefDatabase <AbilityDef> .AllDefs.Where((AbilityDef a) => a.level == abilityLevel).RandomElement();

                pawn.abilities.GainAbility(abilityDef);
                text = MakeLetterTextNewPsylinkLevel(pawn, abilityLevel, Gen.YieldSingle(abilityDef));
            }
            else
            {
                text = MakeLetterTextNewPsylinkLevel(pawn, abilityLevel);
            }
            if (sendLetter && PawnUtility.ShouldSendNotificationAbout(pawn))
            {
                Find.LetterStack.ReceiveLetter(str, text, LetterDefOf.PositiveEvent, pawn);
            }
        }
コード例 #25
0
ファイル: PilotEffects.cs プロジェクト: vengefire/IRTweaks
        static void Postfix(Pilot __instance, ref List <Ability> __result)
        {
            Mod.Log.Trace($"AA:AA:G - entered.");

            if (__instance == null || __instance.ParentActor == null)
            {
                return;
            }

            if (__instance.ParentActor.StatCollection.GetStatistic(ModStats.EnableMultiTarget).Value <bool>())
            {
                Mod.Log.Debug($"Pilot: {__instance} needs multi-target ability");

                bool hasMultiTarget = false;
                foreach (Ability ability in __result)
                {
                    if (ability.Def.Targeting == AbilityDef.TargetingType.MultiFire)
                    {
                        hasMultiTarget = true;
                    }
                }

                if (!hasMultiTarget)
                {
                    Traverse        combatT = Traverse.Create(__instance).Property("Combat");
                    CombatGameState combat  = combatT.GetValue <CombatGameState>();

                    if (combat == null)
                    {
                        return;
                    }

                    Mod.Log.Debug("  -- Adding multi-target ability to pilot.");
                    AbilityDef abilityDef = combat.DataManager.AbilityDefs.Get(Mod.Config.Abilities.MultiTargetId);
                    Ability    ability    = new Ability(abilityDef);
                    ability.Init(combat);
                    __result.Add(ability);
                }
            }
        }
コード例 #26
0
        static void Postfix(UnitSpawnPointGameLogic __instance, AbstractActor actor, Team team, Lance lance)
        {
            if (actor == null || actor.GetPilot() == null)
            {
                Mod.Log.Info?.Write("Actor or pilot is null, cannot check for multi-targeting, skipping.");
                return;
            }

            Statistic multiTargetStat = actor.StatCollection.GetStatistic(ModStats.EnableMultiTarget);

            if (multiTargetStat != null && multiTargetStat.Value <bool>())
            {
                bool hasMultiTargetAbility = false;
                foreach (Ability ability in actor.GetPilot().Abilities)
                {
                    if (ability.Def.Targeting == AbilityDef.TargetingType.MultiFire)
                    {
                        Mod.Log.Debug?.Write(" -- unit already has MultiFire ability, skipping.");
                        hasMultiTargetAbility = true;
                        break;
                    }
                }

                if (!hasMultiTargetAbility)
                {
                    Mod.Log.Debug?.Write("  -- adding multi-target ability to pilot.");
                    AbilityDef abilityDef = SharedState.Combat.DataManager.AbilityDefs.Get(Mod.Config.Abilities.MultiTargetId);
                    Ability    ability    = new Ability(abilityDef);
                    ability.Init(SharedState.Combat);

                    Pilot pilot = actor.GetPilot();
                    pilot.Abilities.Add(ability);
                    pilot.ActiveAbilities.Add(ability);
                    pilot.StatCollection.ModifyStat("", -1, ModStats.HBS_MaxTargets, StatCollection.StatOperation.Set, 3);
                    Mod.Log.Debug?.Write("  -- done.");
                }
            }
        }
コード例 #27
0
        public static bool PawnAbility_GetJob_Prefix(PawnAbility __instance, AbilityContext context, LocalTargetInfo target, ref Job __result)
        {
            Job job;

            Log.Message("target is " + target.Thing.LabelShort);
            AbilityDef abilityDef = Traverse.Create(root: __instance).Field(name: "powerdef").GetValue <AbilityDef>();

            Log.Message("ability def is " + abilityDef.defName);
            Verb_UseAbility verb = Traverse.Create(root: __instance).Field(name: "verb").GetValue <Verb_UseAbility>();

            Log.Message("verb is " + verb);
            if (verb == null)
            {
                Verb_UseAbility verb_UseAbility = (Verb_UseAbility)Activator.CreateInstance(abilityDef.MainVerb.verbClass);
                verb_UseAbility.caster    = __instance.Pawn;
                verb_UseAbility.Ability   = __instance;
                verb_UseAbility.verbProps = abilityDef.MainVerb;
                verb = verb_UseAbility;
            }
            if (verb != null)
            {
                Log.Message("verb is no longer null");
            }
            job = abilityDef.GetJob(verb.UseAbilityProps.AbilityTargetCategory, target);
            job.playerForced = true;
            job.verbToUse    = verb;
            job.count        = context == AbilityContext.Player ? 1 : 0; //Count 1 for Player : 0 for AI
            if (target != null)
            {
                if (target.Thing is Pawn pawn2)
                {
                    job.killIncappedTarget = pawn2.Downed;
                }
            }
            __result = job;
            return(false);
        }
コード例 #28
0
        public override void CompTick()
        {
            base.CompTick();

            tickCounter++;
            if (tickCounter > Props.psycastFrequency)
            {
                tickCounter = 0;
                if (this.parent is Pawn sourcePawn && sourcePawn != null)
                {
                    bool isAwake = !sourcePawn.Dead && !sourcePawn.Downed && sourcePawn.Map != null && !sourcePawn.stances.stunner.Stunned && sourcePawn.TryGetComp <CompCanBeDormant>().Awake;
                    if (sourcePawn.psychicEntropy == null)
                    {
                        sourcePawn.psychicEntropy = new Pawn_PsychicEntropyTracker(sourcePawn);
                    }
                    if (isAwake)
                    {
                        string psycastName = Props.psycastsToUse[Rand.Range(0, Props.psycastsToUse.Count)];
                        foreach (Thing thing in GenRadial.RadialDistinctThingsAround(sourcePawn.Position, sourcePawn.Map, Props.psycastRange, true))
                        {
                            if (thing != null && thing is Pawn targetPawn && targetPawn != sourcePawn && targetPawn.health != null)
                            {
                                if (targetPawn.RaceProps.IsMechanoid && targetPawn.Faction == Faction.OfMechanoids)
                                {
                                    AbilityDef psycastDef = DefDatabase <AbilityDef> .GetNamed(psycastName);

                                    Psycast psycast = new Psycast(sourcePawn, psycastDef);
                                    psycast.Activate(targetPawn, sourcePawn);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #29
0
        public AbilityDef GetAttributeDef(int index)
        {
            AbilityDef result = null;
            bool       flag   = this.TMattributeDefs != null && this.TMattributeDefs.Count > 0;

            if (flag)
            {
                result = this.TMattributeDefs[0];
                bool flag2 = index > -1 && index < this.TMattributeDefs.Count;
                if (flag2)
                {
                    result = this.TMattributeDefs[index];
                }
                else
                {
                    bool flag3 = index >= this.TMattributeDefs.Count;
                    if (flag3)
                    {
                        result = this.TMattributeDefs[this.TMattributeDefs.Count - 1];
                    }
                }
            }
            return(result);
        }
コード例 #30
0
 private static Type GetBestFallbackType <T>(XmlNode node)
 {
     if (typeof(Thing).IsAssignableFrom(typeof(T)))
     {
         ThingDef thingDef = TryFindDef <ThingDef>(node, "def");
         if (thingDef != null)
         {
             return(thingDef.thingClass);
         }
     }
     else if (typeof(Hediff).IsAssignableFrom(typeof(T)))
     {
         HediffDef hediffDef = TryFindDef <HediffDef>(node, "def");
         if (hediffDef != null)
         {
             return(hediffDef.hediffClass);
         }
     }
     else if (typeof(Ability).IsAssignableFrom(typeof(T)))
     {
         AbilityDef abilityDef = TryFindDef <AbilityDef>(node, "def");
         if (abilityDef != null)
         {
             return(abilityDef.abilityClass);
         }
     }
     else if (typeof(Thought).IsAssignableFrom(typeof(T)))
     {
         ThoughtDef thoughtDef = TryFindDef <ThoughtDef>(node, "def");
         if (thoughtDef != null)
         {
             return(thoughtDef.thoughtClass);
         }
     }
     return(typeof(T));
 }
コード例 #31
0
 public override bool Sucess(AbilityDef ability, Saveable_Caster pawn)
 {
     return pawn.pawn.Dead;
 }
コード例 #32
0
 public override bool Sucess(AbilityDef ability, Saveable_Caster pawn)
 {
     return !(pawn.pawn.Dead || pawn.pawn.Downed);
 }