Exemple #1
0
 public override void GameConditionTick()
 {
     if (Find.TickManager.TicksGame % 37 == 0)
     {
         Pawn p = this.SingleMap.mapPawns.AllPawnsSpawned.RandomElement();
         if (p.def != TorannMagicDefOf.TM_GiantSkeletonR && p.def != TorannMagicDefOf.TM_SkeletonLichR && p.def != TorannMagicDefOf.TM_SkeletonR && p.def != TorannMagicDefOf.TM_DemonR && p.def != TorannMagicDefOf.TM_LesserDemonR && p.health != null && !p.Downed && p.health.hediffSet != null && !TM_Calc.IsUndead(p))
         {
             HealthUtility.AdjustSeverity(p, TorannMagicDefOf.TM_DeathMarkCurse, Rand.Range(6, 10));
             TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Disease, p.DrawPos, p.Map, 1.4f, .7f, .1f, 1f, Rand.Range(-20, 20), .2f, Rand.Range(-20, 20), Rand.Range(0, 360));
             TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Disease, p.DrawPos, p.Map, 1f, .5f, .1f, .5f, Rand.Range(-20, 20), .3f, Rand.Range(-30, 30), Rand.Range(0, 360));
         }
     }
     base.GameConditionTick();
 }
        private void DoSummoningCircle()
        {
            if (Find.TickManager.TicksGame % 2 == 0)
            {
                IntVec3 randomCircleCell = this.summoningCircle.RandomElement();
                TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Demon_Flame"), randomCircleCell.ToVector3Shifted(), this.SingleMap, Rand.Range(.5f, .9f), Rand.Range(.2f, .3f), .05f, Rand.Range(.2f, .4f), Rand.Range(-400, 400), Rand.Range(.8f, 1.2f) * (randomCircleCell - this.centerLocation.ToIntVec3).LengthHorizontal, (Quaternion.AngleAxis(90, Vector3.up) * TM_Calc.GetVector(randomCircleCell.ToVector3Shifted(), this.centerLocation.ToIntVec3.ToVector3Shifted())).ToAngleFlat(), Rand.Range(0, 359));
            }

            if (this.nextBlackLightning > this.summoningDuration)
            {
                DoLightningStrike();
                this.nextBlackLightning = this.summoningDuration - Rand.Range(25, 50);
            }
        }
        public override void GameConditionTick()
        {
            base.GameConditionTick();
            if (!initialized)
            {
                initialized = true;
                TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_SummoningCircle"), this.summoningCircle[0].ToVector3Shifted(), this.SingleMap, 3f, 2f, 1f, 2f, 0, 0, 0, Rand.Range(0, 360));
            }
            if (summoningDuration > 0)
            {
                summoningDuration--;
                DoSummoningCircle();
                if (summoningDuration == 0)
                {
                    SpawnDemons();
                }
            }

            if (Find.TickManager.TicksGame % 60 == 0)
            {
                if (spawnedThings != null)
                {
                    bool anySpawnedThingsRemaining = false;
                    if (spawnedThings.Any(p => (!p.DestroyedOrNull() && !p.Dead && !p.Downed)))
                    {
                        anySpawnedThingsRemaining = true;
                    }
                    if (!anySpawnedThingsRemaining)
                    {
                        this.End();
                    }
                }

                if (this.nextEventTick <= Find.TickManager.TicksGame)
                {
                    this.nextEventTick = Find.TickManager.TicksGame + this.ticksBetweenEvents;
                }
            }

            if (doEventAction && Find.TickManager.TicksGame % 10 == 0 && Find.TickManager.TicksGame > nextEventTick)
            {
                nextEventTick = Find.TickManager.TicksGame + ticksBetweenEvents;
                DoEvent();
            }
        }
Exemple #4
0
        private static void DoBlink(Pawn caster, IntVec3 targetCell, Thing carriedThing)
        {
            JobDef          retainJobDef  = caster.CurJobDef;
            int             retainCount   = 1;
            LocalTargetInfo retainTargetA = caster.CurJob.targetA;

            if (retainTargetA.Thing != null && retainTargetA.Thing.stackCount != 1)
            {
                retainCount = retainTargetA.Thing.stackCount;
            }
            LocalTargetInfo retainTargetB = caster.CurJob.targetB;
            LocalTargetInfo retainTargetC = caster.CurJob.targetC;
            Pawn            p             = caster;
            Thing           cT            = carriedThing;

            if (cT != null && cT.stackCount != 1)
            {
                retainCount = cT.stackCount;
            }
            Map     map          = caster.Map;
            IntVec3 casterCell   = caster.Position;
            bool    selectCaster = false;

            if (Find.Selector.FirstSelectedObject == caster)
            {
                selectCaster = true;
            }
            try
            {
                ThingDef moteThrown = null;
                Vector3  moteVector = TM_Calc.GetVector(casterCell, targetCell);
                float    angle      = moteVector.ToAngleFlat();
                if (angle >= -135 && angle < -45) //north
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_North");
                }
                else if (angle >= 45 && angle < 135) //south
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_South");
                }
                else if (angle >= -45 && angle < 45) //east
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_East");
                }
                else //west
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_West");
                }
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .2f, .1f, .5f, 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                }
                TM_MoteMaker.ThrowGenericMote(moteThrown, caster.DrawPos, caster.Map, 1.4f, .1f, 0f, .4f, 0, 5f, (Quaternion.AngleAxis(90, Vector3.up) * moteVector).ToAngleFlat(), 0);
                bool drafted = caster.drafter.Drafted;
                caster.DeSpawn();
                GenSpawn.Spawn(p, targetCell, map);
                if (carriedThing != null)
                {
                    carriedThing.DeSpawn();
                    GenPlace.TryPlaceThing(cT, targetCell, map, ThingPlaceMode.Near);
                    //GenSpawn.Spawn(cT, targetCell, map);
                }
                if (selectCaster)
                {
                    Find.Selector.Select(caster, false, true);
                }
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .4f, .1f, Rand.Range(.8f, 1.2f), 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                    //TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Casting, caster.DrawPos, caster.Map, Rand.Range(1.4f, 2f), .2f, .05f, Rand.Range(.4f, .6f), Rand.Range(-200, 200), 0, 0, 0);
                }
                Vector3 drawPos = caster.DrawPos + (-2 * moteVector);
                TM_MoteMaker.ThrowGenericMote(moteThrown, drawPos, caster.Map, 1.4f, .1f, .3f, 0f, 0, 8f, (Quaternion.AngleAxis(90, Vector3.up) * moteVector).ToAngleFlat(), 0);
                if (caster.drafter == null)
                {
                    caster.drafter = new Pawn_DraftController(caster);
                }

                if (drafted)
                {
                    caster.drafter.Drafted = true;
                }

                Job job = new Job(retainJobDef, retainTargetA, retainTargetB, retainTargetC)
                {
                    count = retainCount
                };
                //caster.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                caster.jobs.StartJob(job);
            }
            catch
            {
                if (!caster.Spawned)
                {
                    GenSpawn.Spawn(p, casterCell, map);
                }
            }
        }
Exemple #5
0
        private static void DoPhase(Pawn caster, IntVec3 targetCell, PawnAbility ability, Thing carriedThing)
        {
            JobDef          retainJobDef  = caster.CurJobDef;
            LocalTargetInfo retainTargetA = caster.CurJob.targetA;
            int             retainCount   = 1;

            if (retainTargetA.Thing != null && retainTargetA.Thing.stackCount != 1)
            {
                retainCount = retainTargetA.Thing.stackCount;
            }
            LocalTargetInfo retainTargetB = caster.CurJob.targetB;
            LocalTargetInfo retainTargetC = caster.CurJob.targetC;
            Pawn            p             = caster;
            Thing           cT            = carriedThing;

            if (cT != null && cT.stackCount != 1)
            {
                retainCount = cT.stackCount;
            }
            Map     map          = caster.Map;
            IntVec3 casterCell   = caster.Position;
            bool    selectCaster = false;

            if (Find.Selector.FirstSelectedObject == caster)
            {
                selectCaster = true;
            }
            try
            {
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .4f, .1f, Rand.Range(.8f, 1.2f), 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                    TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Enchanting, caster.DrawPos, caster.Map, Rand.Range(1.4f, 2f), .2f, .05f, Rand.Range(.4f, .6f), Rand.Range(-200, 200), 0, 0, 0);
                }

                caster.DeSpawn();
                GenSpawn.Spawn(p, targetCell, map);
                if (carriedThing != null)
                {
                    carriedThing.DeSpawn();
                    GenPlace.TryPlaceThing(cT, targetCell, map, ThingPlaceMode.Near);
                    //GenSpawn.Spawn(cT, targetCell, map);
                }

                caster.GetComp <CompAbilityUserMight>().MightUserXP -= 50;
                ability.PostAbilityAttempt();
                if (selectCaster)
                {
                    Find.Selector.Select(caster, false, true);
                }
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .4f, .1f, Rand.Range(.8f, 1.2f), 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                    TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Enchanting, caster.DrawPos, caster.Map, Rand.Range(1.4f, 2f), .2f, .05f, Rand.Range(.4f, .6f), Rand.Range(-200, 200), 0, 0, 0);
                }

                Job job = new Job(retainJobDef, retainTargetA, retainTargetB, retainTargetC)
                {
                    count        = retainCount,
                    playerForced = false
                };
                //caster.jobs.TryTakeOrderedJob();

                caster.jobs.StartJob(job);
            }
            catch
            {
                if (!caster.Spawned)
                {
                    GenSpawn.Spawn(p, casterCell, map);
                }
            }
        }