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); }
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); }
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); } }
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); }
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()); }
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); } }
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); }
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); } }
public override void WorldLoaded() { _extendedDataStorage = UtilityWorldObjectManager.GetUtilityWorldObject <ExtendedDataStorage>(); _extendedDataStorage.Cleanup(); base.WorldLoaded(); LessonAutoActivator.TeachOpportunity(GUC_ConceptDefOf.GUC_Animal_Handling, OpportunityType.GoodToKnow); }
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); } }
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); }
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); }
// 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); }
public void Notify_ReceivedThing(Thing newItem) { if (newItem.def.storedConceptLearnOpportunity != null) { LessonAutoActivator.TeachOpportunity(newItem.def.storedConceptLearnOpportunity, OpportunityType.GoodToKnow); } }
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); }
private void TryTeachAdrenalineConcept(Pawn pawn) { if (pawn.Faction == Faction.OfPlayer && !PlayerKnowledgeDatabase.IsComplete(A_ConceptDefOf.Adrenaline)) { LessonAutoActivator.TeachOpportunity(A_ConceptDefOf.Adrenaline, OpportunityType.Important); } }
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 }); } }
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); } }); } } }
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); } }
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; } }
public override void VerbTickCE() { if (CasterPawn != null && CasterPawn.IsColonistPlayerControlled) { LessonAutoActivator.TeachOpportunity(CE_ConceptDefOf.CE_Spotting, OpportunityType.GoodToKnow); } }
public override void PostOpen() { base.PostOpen(); Find.GameInitData.ChooseRandomStartingTile(); LessonAutoActivator.TeachOpportunity(ConceptDefOf.WorldCameraMovement, OpportunityType.Important); TutorSystem.Notify_Event("PageStart-SelectLandingSite"); }
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); }
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); }
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); }
// 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); }
public virtual void Notify_ReceivedThing(Thing newItem) { if (base.Faction == Faction.OfPlayer && !(newItem.def.storedConceptLearnOpportunity is null)) { LessonAutoActivator.TeachOpportunity(newItem.def.storedConceptLearnOpportunity, OpportunityType.GoodToKnow); } }
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); } }); } } }
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); }
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); }