コード例 #1
0
 protected override void FillTab()
 {
     ReligionCardUtility.DrawReligionCard(new Rect(0.0f, 0.0f, this.size.x, this.size.y), PawnToShowInfoAbout);
     LessonAutoActivator.TeachOpportunity(MiscDefOf.PawnReligionTab, OpportunityType.GoodToKnow);
     LessonAutoActivator.TeachOpportunity(MiscDefOf.RoRReligion, OpportunityType.GoodToKnow);
     LessonAutoActivator.TeachOpportunity(MiscDefOf.RoRPiety, OpportunityType.GoodToKnow);
 }
コード例 #2
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map         map        = (Map)parms.target;
            PawnKindDef bossKind   = def.pawnKind;
            PawnKindDef animalKind = GetAnimalKind(parms.points, map.Tile);

            if (bossKind == null || animalKind == null || ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, (parms.points * PointsFactor) - bossKind.combatPower) <= 0)
            {
                return(false);
            }
            IntVec3 result = parms.spawnCenter;

            if (!result.IsValid && !RCellFinder.TryFindRandomPawnEntryCell(out result, map, CellFinder.EdgeRoadChance_Animal))
            {
                return(false);
            }

            List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(bossKind, map.Tile, bossKind.combatPower, 1);

            list.AddRange(ManhunterPackIncidentUtility.GenerateAnimals(animalKind, map.Tile, (parms.points * PointsFactor) - bossKind.combatPower, parms.pawnCount));
            Rot4 rot = Rot4.FromAngleFlat((map.Center - result).AngleFlat);

            for (int i = 0; i < list.Count; i++)
            {
                Pawn    pawn = list[i];
                IntVec3 loc  = CellFinder.RandomClosewalkCellNear(result, map, 10);
                QuestUtility.AddQuestTag(GenSpawn.Spawn(pawn, loc, map, rot), parms.questTag);
                pawn.health.AddHediff(HediffDefOf.Scaria);
                pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent);
                pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(AnimalsStayDurationMin, AnimalsStayDurationMax);
            }

            TaggedString labelString = null;

            if (def.letterLabel != null)
            {
                labelString = def.letterLabel;
            }
            else
            {
                labelString = "LetterLabelManhunterPackArrived".Translate();
            }

            TaggedString textString = null;

            if (def.letterText != null)
            {
                textString = def.letterText;
            }
            else
            {
                textString = "ManhunterPackArrived".Translate(animalKind.GetLabelPlural());
            }

            SendStandardLetter(labelString, textString, LetterDefOf.ThreatBig, parms, list[0]);
            Find.TickManager.slower.SignalForceNormalSpeedShort();
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical);
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important);
            return(true);
        }
コード例 #3
0
ファイル: CompAmmoUser.cs プロジェクト: Tostov/CombatExtended
        public override IEnumerable <Gizmo> CompGetGizmosExtra()
        {
            GizmoAmmoStatus ammoStatusGizmo = new GizmoAmmoStatus {
                compAmmo = this
            };

            yield return(ammoStatusGizmo);

            var mannableComp = turret?.GetMannable();

            if ((IsEquippedGun && Wielder.Faction == Faction.OfPlayer) || (turret != null && turret.Faction == Faction.OfPlayer && (mannableComp != null || UseAmmo)))
            {
                Action action = null;
                if (IsEquippedGun)
                {
                    action = TryStartReload;
                }
                else if (mannableComp != null)
                {
                    action = turret.TryForceReload;
                }

                // Check for teaching opportunities
                string tag;
                if (turret == null)
                {
                    if (HasMagazine)
                    {
                        tag = "CE_Reload";              // Teach reloading weapons with magazines
                    }
                    else
                    {
                        tag = "CE_ReloadNoMag";     // Teach about mag-less weapons
                    }
                }
                else
                {
                    if (mannableComp == null)
                    {
                        tag = "CE_ReloadAuto";                        // Teach about auto-turrets
                    }
                    else
                    {
                        tag = "CE_ReloadManned";     // Teach about reloading manned turrets
                    }
                }
                LessonAutoActivator.TeachOpportunity(ConceptDef.Named(tag), turret, OpportunityType.GoodToKnow);

                Command_Reload reloadCommandGizmo = new Command_Reload
                {
                    compAmmo     = this,
                    action       = action,
                    defaultLabel = HasMagazine ? (string)"CE_ReloadLabel".Translate() : "",
                    defaultDesc  = "CE_ReloadDesc".Translate(),
                    icon         = CurrentAmmo == null ? ContentFinder <Texture2D> .Get("UI/Buttons/Reload", true) : selectedAmmo.IconTexture(),
                    tutorTag     = tag
                };
                yield return(reloadCommandGizmo);
            }
        }
コード例 #4
0
    protected override bool TryExecuteWorker(IncidentParms parms)
    {
        var map = (Map)parms.target;

        if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out var pawnKindDef))
        {
            return(false);
        }

        if (!RCellFinder.TryFindRandomPawnEntryCell(out var intVec, map, CellFinder.EdgeRoadChance_Animal))
        {
            return(false);
        }

        var list = ManhunterPackIncidentUtility.GenerateAnimals(pawnKindDef, map.Tile, parms.points * 0.2f);
        var rot  = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat);

        for (var i = 0; i < list.Count; i++)
        {
            var deviljho = PawnKindDefOf.Deviljho;
            var pawn     = PawnGenerator.GeneratePawn(deviljho);
            var loc      = CellFinder.RandomClosewalkCellNear(intVec, map, 10);
            GenSpawn.Spawn(pawn, loc, map, rot);
            pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 135000);
        }

        Find.LetterStack.ReceiveLetter("LetterLabelDeviljho".Translate(),
                                       "Deviljholetter".Translate(pawnKindDef.GetLabelPlural()), LetterDefOf.ThreatBig, list[0]);
        Find.TickManager.slower.SignalForceNormalSpeedShort();
        LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical);
        LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important);
        return(true);
    }
コード例 #5
0
        public override string GetInspectString()
        {
            LessonAutoActivator.TeachOpportunity(ConceptDef.Named("FD_CoilTemperature"), OpportunityType.Important);
            var stringBuilder = new StringBuilder();

            switch (Status)
            {
            case ShieldStatus.NO_POWER_NET:
                return("shield.status.offline".Translate() + " - " + "shield.status.no_power".Translate());

            case ShieldStatus.UNPOWERED:
                stringBuilder.AppendLine("shield.status.offline".Translate() + " - " + "shield.status.no_power".Translate());
                break;

            case ShieldStatus.BATTERY_POWER_TOO_LOW:
                stringBuilder.AppendLine("shield.status.offline".Translate() + " - " + "shield.status.battery_too_low".Translate() + " " + Mod.Settings.MinimumOnlinePower + " Wd");
                break;

            case ShieldStatus.INTERNAL_BATTERY_DISCHARGED:
                stringBuilder.AppendLine("shield.status.offline".Translate() + " - " + "shield.status.internal_battery_discharged".Translate());
                break;

            case ShieldStatus.THERMAL_SHUTDOWN:
                stringBuilder.AppendLine("shield.status.offline".Translate() + " - " + "shield.status.thermal_safety".Translate());
                break;

            case ShieldStatus.ONLINE:
                stringBuilder.AppendLine("shield.status.online".Translate());
                break;
            }
            stringBuilder.Append(base.GetInspectString());
            return(stringBuilder.ToString());
        }
コード例 #6
0
        public void MakeInvisible()
        {
            oldGraphics = pawn.Drawer.renderer.graphics;
            oldShadow   = GetShadowGraphic(pawn.Drawer.renderer);
            pawn.Drawer.renderer.graphics = new PawnGraphicSet_Invisible(pawn);
            ShadowData shadowData = new ShadowData
            {
                volume = new Vector3(0, 0, 0),
                offset = new Vector3(0, 0, 0)
            };

            SetShadowGraphic(pawn.Drawer.renderer, new Graphic_Shadow(shadowData));
            pawn.stances.CancelBusyStanceHard();
            if (lastCarried != null && lastCarried == pawn.carryTracker.CarriedThing)
            {
                lastCarriedGraphic = pawn.carryTracker.CarriedThing.Graphic;
                SetGraphicInt(pawn.carryTracker.CarriedThing, new Graphic_Invisible());
            }
            if (Find.Selector.SelectedObjects.Contains(pawn))
            {
                Find.Selector.SelectedObjects.Remove(pawn);
            }
            if (!PlayerKnowledgeDatabase.IsComplete(XenomorphConceptDefOf.RRY_Concept_Chestbursters))
            {
                LessonAutoActivator.TeachOpportunity(XenomorphConceptDefOf.RRY_Concept_Chestbursters, OpportunityType.Important);
            }
        }
コード例 #7
0
        public IEnumerable <Command> GenerateGizmos()
        {
            Command_Action toggleFireModeGizmo = new Command_Action
            {
                action       = ToggleFireMode,
                defaultLabel = ("CE_" + currentFireModeInt.ToString() + "Label").Translate(),
                defaultDesc  = "CE_ToggleFireModeDesc".Translate(),
                icon         = ContentFinder <Texture2D> .Get(("UI/Buttons/" + currentFireModeInt.ToString()), true),
                tutorTag     = availableFireModes.Count > 1 ? "CE_FireModeToggle" : null
            };

            if (availableFireModes.Count > 1)
            {
                // Teach about fire modes
                toggleFireModeGizmo.tutorTag = "CE_FireModeToggle";
                LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_FireModes, parent, OpportunityType.GoodToKnow);
            }
            yield return(toggleFireModeGizmo);

            Command_Action toggleAimModeGizmo = new Command_Action
            {
                action       = ToggleAimMode,
                defaultLabel = ("CE_" + currentAimModeInt.ToString() + "Label").Translate(),
                defaultDesc  = "CE_ToggleAimModeDesc".Translate(),
                icon         = ContentFinder <Texture2D> .Get(("UI/Buttons/" + currentAimModeInt.ToString()), true),
            };

            if (availableAimModes.Count > 1)
            {
                // Teach about aim modes
                toggleAimModeGizmo.tutorTag = "CE_AimModeToggle";
                LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_AimModes, parent, OpportunityType.GoodToKnow);
            }
            yield return(toggleAimModeGizmo);
        }
コード例 #8
0
        private void Arrive()
        {
            //Log.Message("Init State_VisitPoint "+brain.ownedPawns.Count + " - "+brain.faction.name);
            foreach (var pawn in lord.ownedPawns)
            {
                if (pawn.needs?.mood == null)
                {
                    Data.visitorMoods.Add(pawn.thingIDNumber, 0.5f);
                }
                else
                {
                    Data.visitorMoods.Add(pawn.thingIDNumber, pawn.needs.mood.CurInstantLevel);
                }
                //Log.Message("Added "+pawn.NameStringShort+": "+pawn.needs.mood.CurLevel);

                var tweak      = 0; // -0.1f;
                var regularity = Mathf.Lerp(-0.5f, 0.25f, Mathf.InverseLerp(-100, 100, lord.faction.PlayerGoodwill));
                // negative factions have lower expectations
                float expectations = tweak + regularity;
                Data.visitorMoods[pawn.thingIDNumber] += expectations;

                pawn.Arrive();
            }

            GuestUtility.OnLordArrived(lord);

            // Lessons
            LessonAutoActivator.TeachOpportunity(ConceptDef.Named("GuestBeds"), lord.ownedPawns.FirstOrDefault(), OpportunityType.Important);
            if (PlayerHasSkilledNegotiator)
            {
                LessonAutoActivator.TeachOpportunity(ConceptDef.Named("RecruitGuest"), lord.ownedPawns.FirstOrDefault(), OpportunityType.GoodToKnow);
            }
        }
コード例 #9
0
 public override void WorldLoaded()
 {
     _extendedDataStorage = UtilityWorldObjectManager.GetUtilityWorldObject <ExtendedDataStorage>();
     _extendedDataStorage.Cleanup();
     base.WorldLoaded();
     LessonAutoActivator.TeachOpportunity(GUC_ConceptDefOf.GUC_Animal_Handling, OpportunityType.GoodToKnow);
 }
コード例 #10
0
 public override void CompPostPostAdd(DamageInfo?dinfo)
 {
     base.CompPostPostAdd(dinfo);
     if (Pawn.CurrentBed() == null && MyPos != null && MyMap != null && Pawn.Spawned)
     {
         //    Log.Message(string.Format("(Pawn.CurrentBed() == null && MyPos != null && MyMap != null && Pawn.Spawned) == {0}", (Pawn.CurrentBed() == null && MyPos != null && MyMap != null && Pawn.Spawned)));
         Rot4  rot   = Rotlist.RandomElement();
         Thing thing = ThingMaker.MakeThing(MyCocoonDef);
         GenSpawn.Spawn(thing, MyPos, MyMap, rot, WipeMode.Vanish, false);
         Building_XenomorphCocoon thing2 = ((Building_XenomorphCocoon)thing);
         if (thing2 == null)
         {
             return;
         }
         if (this.Pawn.IsPrisoner)
         {
             thing2.ForPrisoners = true;
         }
         this.Pawn.jobs.Notify_TuckedIntoBed(thing2);
     }
     if (!PlayerKnowledgeDatabase.IsComplete(XenomorphConceptDefOf.RRY_Concept_Cocoons) && Pawn.IsColonist)
     {
         LessonAutoActivator.TeachOpportunity(XenomorphConceptDefOf.RRY_Concept_Cocoons, OpportunityType.Critical);
     }
 }
コード例 #11
0
        protected override void PostSuccessfulApply(Pawn pawn, BodyPartRecord part, Pawn billDoer, List <Thing> ingredients, Bill bill)
        {
            pawn.health.AddHediff(WTH_DefOf.WTH_BackupBattery, pawn.TryGetReactor());
            pawn.SetFaction(Faction.OfPlayer);
            if (pawn.relations == null)
            {
                pawn.relations = new Pawn_RelationsTracker(pawn);
            }

            if (pawn.story == null)
            {
                pawn.story = new Pawn_StoryTracker(pawn);
            }
            if (pawn.ownership == null)
            {
                pawn.ownership = new Pawn_Ownership(pawn);
            }
            ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn);

            Utilities.InitWorkTypesAndSkills(pawn, pawnData);

            pawn.Name = PawnBioAndNameGenerator.GeneratePawnName(pawn, NameStyle.Full);
            Find.LetterStack.ReceiveLetter("WTH_Letter_Success_Label".Translate(), "WTH_Letter_Success_Label_Description".Translate(new object[] { billDoer.Name.ToStringShort, pawn.Name }), LetterDefOf.PositiveEvent, pawn);
            billDoer.jobs.jobQueue.EnqueueFirst(new Job(WTH_DefOf.WTH_ClearHackingTable, pawn, pawn.CurrentBed())
            {
                count = 1
            });
            LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Power, OpportunityType.Important);
            LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Maintenance, OpportunityType.Important);
            LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Concept_MechanoidParts, OpportunityType.Important);
        }
コード例 #12
0
        public override void Init()
        {
            // Set duration to 1 less than "Permenant" because this will end when visitors despawned
            this.originalDuration = this.duration;
            this.duration         = 999999999;

            var introDef = DefDatabase <ConceptDef> .GetNamed("MTW_AncestorVisit");

            LessonAutoActivator.TeachOpportunity(introDef, OpportunityType.Important);

            var spawnController = AncestorUtils.GetMapComponent();

            for (int i = 0; i < AncestorConstants.ANCESTORS_PER_VISIT; i++)
            {
                var spawned = spawnController.TrySpawnRandomVisitor();
                if (spawned != null)
                {
                    this.visitors.Add(spawned);
                    this.visitInfoMap.Add(spawned.thingIDNumber, new PawnVisitInfo(spawned, this.EstDurationDays));
                }
            }

            var loiterPoint = spawnController.CurrentSpawner.Position;
            var lordJob     = new LordJob_HauntColony(loiterPoint, this.duration);
            var lord        = LordMaker.MakeNewLord(spawnController.AncestorFaction, lordJob, this.visitors);
        }
コード例 #13
0
        // Token: 0x0600000E RID: 14 RVA: 0x0000221C File Offset: 0x0000041C
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map         map   = (Map)parms.target;
            PawnKindDef named = DefDatabase <PawnKindDef> .GetNamed("KillerRabbit", true);

            IntVec3 intVec;
            bool    flag = !RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null);
            bool    result;

            if (flag)
            {
                result = false;
            }
            else
            {
                List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(named, map.Tile, parms.points * 1f);
                Rot4        rot  = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat);
                for (int i = 0; i < list.Count; i++)
                {
                    Pawn    pawn = list[i];
                    IntVec3 loc  = CellFinder.RandomClosewalkCellNear(intVec, map, 10, null);
                    GenSpawn.Spawn(pawn, loc, map, rot, WipeMode.Vanish, false);
                    pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false);
                    pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 120000);
                }
                Find.LetterStack.ReceiveLetter(Translator.Translate("LetterLabelManhunterPackArrived"), TranslatorFormattedStringExtensions.Translate("ManhunterPackArrived", named.GetLabelPlural(-1)), LetterDefOf.ThreatBig, list[0], null, null);
                Find.TickManager.slower.SignalForceNormalSpeedShort();
                LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical);
                LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important);
                result = true;
            }
            return(result);
        }
コード例 #14
0
 public void Notify_ReceivedThing(Thing newItem)
 {
     if (newItem.def.storedConceptLearnOpportunity != null)
     {
         LessonAutoActivator.TeachOpportunity(newItem.def.storedConceptLearnOpportunity, OpportunityType.GoodToKnow);
     }
 }
コード例 #15
0
        public static IEnumerable <Pawn> MountAnimals(PawnGroupMakerParms groupParms, bool warnOnZeroResults, IncidentParms parms)
        {
            List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(groupParms, true).ToList();

            if (list.Count == 0)
            {
                return(list);
            }
            parms.raidArrivalMode.Worker.Arrive(list, parms);
            if (!(parms.raidArrivalMode == null || parms.raidArrivalMode == PawnsArrivalModeDefOf.EdgeWalkIn) || (parms.raidStrategy != null && parms.raidStrategy.workerClass == typeof(RaidStrategyWorker_Siege)))
            {
                return(list);
            }
            NPCMountUtility.generateMounts(ref list, parms, Base.inBiomeWeight, Base.outBiomeWeight, Base.nonWildWeight, Base.enemyMountChance, Base.enemyMountChanceTribal);

            foreach (Pawn pawn in list)
            {
                if (pawn.equipment == null)
                {
                    pawn.equipment = new Pawn_EquipmentTracker(pawn);
                }
            }
            foreach (Pawn pawn in list)//Moved this code here so we can check if the pawn actually has apparel.
            {
                if (pawn.apparel != null && pawn.apparel.WornApparel != null && pawn.apparel.WornApparel.Any((Apparel ap) => ap is ShieldBelt))
                {
                    LessonAutoActivator.TeachOpportunity(ConceptDefOf.ShieldBelts, OpportunityType.Critical);
                    break;
                }
            }
            return(list);
        }
コード例 #16
0
 private void TryTeachAdrenalineConcept(Pawn pawn)
 {
     if (pawn.Faction == Faction.OfPlayer && !PlayerKnowledgeDatabase.IsComplete(A_ConceptDefOf.Adrenaline))
     {
         LessonAutoActivator.TeachOpportunity(A_ConceptDefOf.Adrenaline, OpportunityType.Important);
     }
 }
コード例 #17
0
        public override IEnumerable <Gizmo> GetGizmos()
        {
            foreach (Gizmo gizmo in base.GetGizmos())
            {
                yield return(gizmo);
            }

            if (Faction == Faction.OfPlayer)
            {
                yield return(new Command_Action
                {
                    defaultLabel = "ReligiousBuilgingAssigner_AssignBuildings".Translate(),
                    icon = ContentFinder <Texture2D> .Get("Things/Symbols/AssignReligion", true),
                    defaultDesc = "ReligiousBuilgingAssigner_AssignBuildingsDesc".Translate(),
                    action = delegate
                    {
                        if (AvaliableToAssign)
                        {
                            ReligiousBuildingAssignerUtility.SelectChild(this);
                            LessonAutoActivator.TeachOpportunity(MiscDefOf.HolyBuildingBinding, OpportunityType.GoodToKnow);
                        }
                        else
                        {
                            Messages.Message("ReligiousBuilgingAssigner_BuildingIsNotCompleteToAssign".Translate(), MessageTypeDefOf.NeutralEvent);
                        }
                    },
                    hotKey = KeyBindingDefOf.Misc4
                });
            }
        }
コード例 #18
0
 public void DropAllNearPawn(IntVec3 pos, bool forbid = false, bool unforbid = false)
 {
     if (pawn.MapHeld == null)
     {
         Log.Error("Tried to drop all inventory near pawn but the pawn is unspawned. pawn=" + pawn);
     }
     else
     {
         tmpThingList.Clear();
         tmpThingList.AddRange(innerContainer);
         for (int i = 0; i < tmpThingList.Count; i++)
         {
             innerContainer.TryDrop(tmpThingList[i], pos, pawn.MapHeld, ThingPlaceMode.Near, out Thing _, delegate(Thing t, int unused)
             {
                 if (forbid)
                 {
                     t.SetForbiddenIfOutsideHomeArea();
                 }
                 if (unforbid)
                 {
                     t.SetForbidden(value: false, warnOnFail: false);
                 }
                 if (t.def.IsPleasureDrug)
                 {
                     LessonAutoActivator.TeachOpportunity(ConceptDefOf.DrugBurning, OpportunityType.Important);
                 }
             });
         }
     }
 }
コード例 #19
0
 public void AlertThief(Pawn pawn, Thing observer)
 {
     pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
     if (!pawn.Dead)
     {
         List <Pawn> thisPawn = new List <Pawn>
         {
             pawn
         };
         IncidentParms parms = new IncidentParms
         {
             faction      = pawn.Faction,
             spawnCenter  = pawn.Position,
             raidStrategy = RaidStrategyDefOf.ImmediateAttack
         };
         parms.raidStrategy.Worker.MakeLords(parms, thisPawn);
         pawn.Map.avoidGrid.Regenerate();
         LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical);
     }
     if (observer != null)
     {
         //   Find.LetterStack.ReceiveLetter("LetterLabelThief".Translate(), "ThiefRevealed".Translate(observer.LabelShort, pawn.Faction.Name, pawn.Named("PAWN")), LetterDefOf.ThreatSmall, pawn, null);
     }
     else
     {
         //    Find.LetterStack.ReceiveLetter("LetterLabelThief".Translate(), "ThiefInjured".Translate(pawn.Faction.Name, pawn.Named("PAWN")), LetterDefOf.NegativeEvent, pawn, null);
     }
 }
コード例 #20
0
ファイル: GenSpawn.cs プロジェクト: rheirman/WhatTheHack
 static void Postfix(ref Thing newThing, bool respawningAfterLoad)
 {
     AddBatteryHediffIfNeeded(newThing);
     RemoveConditionalComps(newThing);
     if (respawningAfterLoad)
     {
         NameUnnamedMechs(newThing);
         AddOwnershipIfNeeded(newThing);
         //Log.Message("aa");
         if (newThing is Pawn p && p.IsHacked() && p.Faction == Faction.OfPlayer)
         {
             var storage = Base.Instance.GetExtendedDataStorage();
             if (storage != null)
             {
                 Utilities.InitWorkTypesAndSkills(p, storage.GetExtendedDataFor(p));
             }
         }
     }
     if (newThing.def == WTH_DefOf.WTH_TableMechanoidWorkshop)
     {
         LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Modification, OpportunityType.Important);
     }
     //disable mechs on map arrival
     if (!respawningAfterLoad && newThing is Pawn pawn && pawn.IsHacked() && pawn.Faction == Faction.OfPlayer && Base.Instance.GetExtendedDataStorage() is ExtendedDataStorage store)
     {
         ExtendedPawnData extendedPawnData = store.GetExtendedDataFor(pawn);
         extendedPawnData.isActive = false;
     }
 }
コード例 #21
0
 public override void VerbTickCE()
 {
     if (CasterPawn != null && CasterPawn.IsColonistPlayerControlled)
     {
         LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_Spotting, OpportunityType.GoodToKnow);
     }
 }
コード例 #22
0
ファイル: ProSLS.cs プロジェクト: keenkrozzy/Prophecy
 public override void PostOpen()
 {
     base.PostOpen();
     Find.GameInitData.ChooseRandomStartingTile();
     LessonAutoActivator.TeachOpportunity(ConceptDefOf.WorldCameraMovement, OpportunityType.Important);
     TutorSystem.Notify_Event("PageStart-SelectLandingSite");
 }
コード例 #23
0
ファイル: Building_Quarry.cs プロジェクト: Proxyer/Quarry
        public override void Destroy(DestroyMode mode = DestroyMode.Vanish)
        {
            RemoveAllOwners();

            CellRect rect = this.OccupiedRect();
            // Remove this area from the quarry grid. Quarries can never be built here again
            //     Map.GetComponent<QuarryGrid>().RemoveFromGrid(rect);

            //    Log.Message("Quarry at "+ QuarryPercent+ " "+ (int)(rect.Count() * (QuarryPercent / 100)) + " of " + rect.Count()+" cells should retain their quarrability");
            List <IntVec3> cells = GenAdj.CellsOccupiedBy(this).ToList();

            for (int i = 0; i < cells.Count; i++)
            {
                IntVec3 c = cells[i];
                if (rect.Count() * (QuarryPercent / 100) == 0 || rect.Count() * (QuarryPercent / 100) < i)
                {
                    Map.GetComponent <QuarryGrid>().RemoveFromGrid(c);
                }
                // Change the terrain here back to quarried stone, removing the walls
                Map.terrainGrid.SetTerrain(c, QuarryDefOf.QRY_QuarriedGround);
            }
            if (!QuarrySettings.letterSent && !TutorSystem.AdaptiveTrainingEnabled)
            {
                Find.LetterStack.ReceiveLetter(Static.LetterLabel, Static.LetterText, QuarryDefOf.CuproLetter, new RimWorld.Planet.GlobalTargetInfo(Position, Map));
                QuarrySettings.letterSent = true;
            }
            if (TutorSystem.AdaptiveTrainingEnabled)
            {
                LessonAutoActivator.TeachOpportunity(QuarryDefOf.QRY_ReclaimingSoil, OpportunityType.GoodToKnow);
            }
            base.Destroy(mode);
        }
コード例 #24
0
        private static void TryOpenComms(Pawn actor)
        {
            var curJobCommTarget = actor.jobs.curJob.commTarget;

            if (curJobCommTarget is Faction f)
            {
                var dialog_Negotiation = new Dialog_Negotiation(actor, f,
                                                                JecsToolsFactionDialogMaker.FactionDialogFor(actor, f), true);
                dialog_Negotiation.soundAmbient = SoundDefOf.RadioComms_Ambience;
                Find.WindowStack.Add(dialog_Negotiation);
                return;
            }
            if (!(curJobCommTarget is TradeShip ts))
            {
                return;
            }
            if (!ts.CanTradeNow)
            {
                return;
            }
            Find.WindowStack.Add(new Dialog_Trade(actor, ts));
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.BuildOrbitalTradeBeacon, OpportunityType.Critical);
            var empty  = string.Empty;
            var empty2 = string.Empty;

            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(
                ts.Goods.OfType <Pawn>(), ref empty, ref empty2, "LetterRelatedPawnsTradeShip".Translate());
            if (!empty2.NullOrEmpty())
            {
                Find.LetterStack.ReceiveLetter(empty, empty2, LetterDefOf.PositiveEvent, null);
            }
            TutorUtility.DoModalDialogIfNotKnown(ConceptDefOf.TradeGoodsMustBeNearBeacon);
        }
コード例 #25
0
ファイル: RecipeUtility.cs プロジェクト: yangbum7/WhatTheHack
        public static void HackPoorly(Pawn pawn, BodyPartRecord part, RecipeDef recipe)
        {
            pawn.health.AddHediff(WTH_DefOf.WTH_TargetingHackedPoorly, part, null);
            if (recipe.GetModExtension <DefModExtension_Recipe>() is DefModExtension_Recipe extension && extension.addsAdditionalHediff != null)
            {
                BodyPartRecord additionalHediffBodyPart = null;
                if (extension.additionalHediffBodyPart != null)
                {
                    additionalHediffBodyPart = pawn.health.hediffSet.GetNotMissingParts().FirstOrDefault((BodyPartRecord bpr) => bpr.def == extension.additionalHediffBodyPart);
                }
                pawn.health.AddHediff(extension.addsAdditionalHediff, additionalHediffBodyPart);
            }

            if (pawn.health.hediffSet.HasHediff(WTH_DefOf.WTH_RepairModule) && pawn.GetComp <CompRefuelable>() == null)
            {
                pawn.InitializeComps();
            }

            pawn.SetFaction(Faction.OfPlayer);
            if (pawn.jobs.curDriver != null)
            {
                pawn.jobs.posture = PawnPosture.LayingOnGroundNormal;
            }
            if (pawn.story == null)
            {
                pawn.story = new Pawn_StoryTracker(pawn);
            }
            Find.LetterStack.ReceiveLetter("WTH_Letter_HackedPoorly_Label".Translate(), "WTH_Letter_HackedPoorly_Description".Translate(), LetterDefOf.NegativeEvent, pawn);
            LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Power, OpportunityType.Important);
            LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Maintenance, OpportunityType.Important);
        }
コード例 #26
0
 // Token: 0x06005182 RID: 20866 RVA: 0x001B7A75 File Offset: 0x001B5C75
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     this.RecalcPathsOnAndAroundMe(map);
     LessonAutoActivator.TeachOpportunity(ConceptDefOf.HomeArea, this, OpportunityType.Important);
     this.ticksSinceSpread = (int)(this.SpreadInterval * Rand.Value);
 }
コード例 #27
0
 public virtual void Notify_ReceivedThing(Thing newItem)
 {
     if (base.Faction == Faction.OfPlayer && !(newItem.def.storedConceptLearnOpportunity is null))
     {
         LessonAutoActivator.TeachOpportunity(newItem.def.storedConceptLearnOpportunity, OpportunityType.GoodToKnow);
     }
 }
コード例 #28
0
 public void DropAllNearPawn(IntVec3 pos, bool forbid = false, bool unforbid = false)
 {
     if (this.pawn.MapHeld == null)
     {
         Log.Error("Tried to drop all inventory near pawn but the pawn is unspawned. pawn=" + this.pawn);
     }
     else
     {
         Pawn_InventoryTracker.tmpThingList.Clear();
         Pawn_InventoryTracker.tmpThingList.AddRange(this.innerContainer);
         for (int i = 0; i < Pawn_InventoryTracker.tmpThingList.Count; i++)
         {
             Thing thing = default(Thing);
             this.innerContainer.TryDrop(Pawn_InventoryTracker.tmpThingList[i], pos, this.pawn.MapHeld, ThingPlaceMode.Near, out thing, (Action <Thing, int>) delegate(Thing t, int unused)
             {
                 if (forbid)
                 {
                     t.SetForbiddenIfOutsideHomeArea();
                 }
                 if (unforbid)
                 {
                     t.SetForbidden(false, false);
                 }
                 if (t.def.IsPleasureDrug)
                 {
                     LessonAutoActivator.TeachOpportunity(ConceptDefOf.DrugBurning, OpportunityType.Important);
                 }
             });
         }
     }
 }
コード例 #29
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     this.refuelableComp = base.GetComp <CompRefuelable>();
     this.powerComp      = base.GetComp <CompPowerTrader>();
     LessonAutoActivator.TeachOpportunity(WTH_DefOf.WTH_Platform, OpportunityType.Important);
 }
コード例 #30
0
        protected override Job TryGiveJob(Pawn pawn)
        {
            var comp = pawn.TryGetComp <CompSuppressable>();

            if (comp == null)
            {
                return(null);
            }

            Job reactJob = SuppressionUtility.GetRunForCoverJob(pawn);

            // Hunker down
            if (reactJob == null && comp.IsHunkering)
            {
                LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_Hunkering, pawn, OpportunityType.Critical);
                return(new Job(CE_JobDefOf.HunkerDown, pawn)
                {
                    checkOverrideOnExpire = true
                });
            }

            // Run for cover
            LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_SuppressionReaction, pawn, OpportunityType.Critical);
            return(reactJob);
        }