private static void DebugResetAllMobileUnits() { int resetCount = 0; List <WorldObject> woList = Find.WorldObjects.AllWorldObjects; if (woList != null && woList.Count > 0) { for (int i = 0; i < woList.Count; i++) { WarObject rwo = woList[i] as WarObject; if (rwo != null) { RimWarData rwd = WorldUtility.GetRimWarDataForFaction(rwo.Faction); if (rwd != null && rwd.WorldSettlements != null && rwd.WorldSettlements.Count > 0) { resetCount++; RimWorld.Planet.Settlement settlement = rwd.WorldSettlements.RandomElement(); if (settlement != null) { if (settlement.Destroyed) { Log.Warning("Detected destroyed settlement in Rim War data for " + rwd.RimWarFaction.Name); } else { RimWarSettlementComp rwsc = settlement.GetComponent <RimWarSettlementComp>(); if (rwsc != null) { rwsc.RimWarPoints += rwo.RimWarPoints; } else { Log.Warning("Found no Rim War component for settlement " + settlement.Label); Log.Warning("Settlement in faction " + settlement.Faction); Log.Warning("Settlement defname " + settlement.def.defName); } } } else { Log.Warning("Detected null settlement in Rim War data for " + rwd.RimWarFaction.Name); } if (!rwo.Destroyed) { rwo.Destroy(); } } else { Log.Warning("Tried to reset unit but no Faction data exists - cleaning up object."); if (!rwo.Destroyed) { rwo.Destroy(); } } } } Log.Message("Reset " + resetCount + " Rim War units."); } }
public static void CheckDefeated(Settlement factionBase) { if (factionBase.Faction == Faction.OfPlayer) { return; } Map map = factionBase.Map; if (map == null || !IsDefeated(map, factionBase.Faction)) { return; } DestroyedSettlement destroyedSettlement = (DestroyedSettlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.DestroyedSettlement); destroyedSettlement.Tile = factionBase.Tile; destroyedSettlement.SetFaction(factionBase.Faction); Find.WorldObjects.Add(destroyedSettlement); TimedDetectionRaids component = destroyedSettlement.GetComponent <TimedDetectionRaids>(); component.CopyFrom(factionBase.GetComponent <TimedDetectionRaids>()); component.SetNotifiedSilently(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterFactionBaseDefeated".Translate(factionBase.Label, component.DetectionCountdownTimeLeftString)); if (!HasAnyOtherBase(factionBase)) { factionBase.Faction.defeated = true; stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.Append("LetterFactionBaseDefeated_FactionDestroyed".Translate(factionBase.Faction.Name)); } foreach (Faction allFaction in Find.FactionManager.AllFactions) { if (!allFaction.Hidden && !allFaction.IsPlayer && allFaction != factionBase.Faction && allFaction.HostileTo(factionBase.Faction)) { FactionRelationKind playerRelationKind = allFaction.PlayerRelationKind; if (allFaction.TryAffectGoodwillWith(Faction.OfPlayer, 20, canSendMessage: false, canSendHostilityLetter: false)) { stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.Append("RelationsWith".Translate(allFaction.Name) + ": " + 20.ToStringWithSign()); allFaction.TryAppendRelationKindChangedInfo(stringBuilder, playerRelationKind, allFaction.PlayerRelationKind); } } } Find.LetterStack.ReceiveLetter("LetterLabelFactionBaseDefeated".Translate(), stringBuilder.ToString(), LetterDefOf.PositiveEvent, new GlobalTargetInfo(factionBase.Tile), factionBase.Faction); map.info.parent = destroyedSettlement; factionBase.Destroy(); TaleRecorder.RecordTale(TaleDefOf.CaravanAssaultSuccessful, map.mapPawns.FreeColonists.RandomElement()); }
public static void AttackNow_SettlementReinforcement_Postfix(RimWorld.Planet.SettlementUtility __instance, Caravan caravan, RimWorld.Planet.Settlement settlement) { RimWarSettlementComp rwsc = settlement.GetComponent <RimWarSettlementComp>(); if (rwsc != null && rwsc.ReinforcementPoints > 0) { //if(rwsc.parent.def.defName == "City_Faction" || rwsc.parent.def.defName == "City_Citadel") //{ // Warband b = WorldUtility.CreateWarband((rwsc.ReinforcementPoints), WorldUtility.GetRimWarDataForFaction(rwsc.parent.Faction), settlement, settlement.Tile, settlement, WorldObjectDefOf.Settlement); // b.launched = true; //} //else //{ WorldUtility.CreateWarband((rwsc.ReinforcementPoints), WorldUtility.GetRimWarDataForFaction(rwsc.parent.Faction), settlement, settlement.Tile, settlement, WorldObjectDefOf.Settlement); //} } }
//private static void DrawFactionRow_WithFactionPoints_Postfix(Faction faction, float rowY, Rect fillRect, ref float __result) //{ // if (!Prefs.DevMode) // { // Rect rect = new Rect(35f, rowY + __result, 250f, 80f); // StringBuilder stringBuilder = new StringBuilder(); // string text = stringBuilder.ToString(); // float width = fillRect.width - rect.xMax; // float num = Text.CalcHeight(text, width); // float num2 = Mathf.Max(80f, num); // Rect position = new Rect(10f, rowY + 10f, 15f, 15f); // Rect rect2 = new Rect(0f, rowY + __result, fillRect.width, num2); // if (Mouse.IsOver(rect2)) // { // GUI.DrawTexture(rect2, TexUI.HighlightTex); // } // Text.Font = GameFont.Small; // Text.Anchor = TextAnchor.UpperLeft; // Widgets.DrawRectFast(position, faction.Color); // string label = "RW_FactionPower".Translate(WorldUtility.GetRimWarDataForFaction(faction) == null ? 0 : WorldUtility.GetRimWarDataForFaction(faction).TotalFactionPoints); // label += "\n" + "RW_FactionBehavior".Translate(WorldUtility.GetRimWarDataForFaction(faction).behavior.ToString()); // Widgets.Label(rect, label); // if (!faction.IsPlayer) // { // } // __result += num2; // } //} private static void Settlement_InspectString_WithPoints_Postfix(RimWorld.Planet.Settlement __instance, ref string __result) { if (!__instance.Faction.def.hidden) { RimWarSettlementComp rwsc = __instance.GetComponent <RimWarSettlementComp>(); RimWarData rwd = WorldUtility.GetRimWarDataForFaction(__instance.Faction); if (rwsc != null && rwd != null) { string text = ""; if (!__result.NullOrEmpty()) { text += "\n"; } text += "RW_SettlementPoints".Translate(rwsc.RimWarPoints + "\n" + "RW_FactionBehavior".Translate(rwd.behavior.ToString())); __result += text; } } }
public static IEnumerable <FloatMenuOption> GetFloatMenuOptions(CompLaunchable representative, IEnumerable <IThingHolder> pods, Settlement settlement) { if (settlement.Faction == Faction.OfPlayer) { return(Enumerable.Empty <FloatMenuOption>()); } return(TransportPodsArrivalActionUtility.GetFloatMenuOptions(() => CanGiveGiftTo(pods, settlement), () => new TransportPodsArrivalAction_GiveGift(settlement), "GiveGiftViaTransportPods".Translate(settlement.Faction.Name, FactionGiftUtility.GetGoodwillChange(pods, settlement).ToStringWithSign()), representative, settlement.Tile, delegate(Action action) { TradeRequestComp tradeReqComp = settlement.GetComponent <TradeRequestComp>(); if (tradeReqComp.ActiveRequest && pods.Any((IThingHolder p) => p.GetDirectlyHeldThings().Contains(tradeReqComp.requestThingDef))) { Find.WindowStack.Add(new Dialog_MessageBox("GiveGiftViaTransportPodsTradeRequestWarning".Translate(), "Yes".Translate(), delegate { action(); }, "No".Translate())); } else { action(); } })); }
public static Command FulfillRequestCommand(Caravan caravan) { Func <Thing, bool> validator = (Thing thing) => thing.GetRotStage() == RotStage.Fresh; Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandFulfillTradeOffer".Translate(); command_Action.defaultDesc = "CommandFulfillTradeOfferDesc".Translate(); command_Action.icon = CaravanVisitUtility.TradeCommandTex; command_Action.action = delegate { Settlement settlement2 = CaravanVisitUtility.SettlementVisitedNow(caravan); CaravanRequestComp caravanRequest = (settlement2 == null) ? null : settlement2.GetComponent <CaravanRequestComp>(); if (caravanRequest != null) { if (!caravanRequest.ActiveRequest) { Log.Error("Attempted to fulfill an unavailable request"); return; } if (!CaravanInventoryUtility.HasThings(caravan, caravanRequest.requestThingDef, caravanRequest.requestCount, validator)) { Messages.Message("CommandFulfillTradeOfferFailInsufficient".Translate(new object[] { GenLabel.ThingLabel(caravanRequest.requestThingDef, null, caravanRequest.requestCount) }), MessageTypeDefOf.RejectInput); return; } Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("CommandFulfillTradeOfferConfirm".Translate(new object[] { GenLabel.ThingLabel(caravanRequest.requestThingDef, null, caravanRequest.requestCount), caravanRequest.rewards[0].Label }), delegate { int remaining = caravanRequest.requestCount; List <Thing> list = CaravanInventoryUtility.TakeThings(caravan, delegate(Thing thing) { if (caravanRequest.requestThingDef != thing.def) { return(0); } int num = Mathf.Min(remaining, thing.stackCount); remaining -= num; return(num); }); for (int i = 0; i < list.Count; i++) { list[i].Destroy(DestroyMode.Vanish); } while (caravanRequest.rewards.Count > 0) { Thing thing2 = caravanRequest.rewards[caravanRequest.rewards.Count - 1]; caravanRequest.rewards.Remove(thing2); CaravanInventoryUtility.GiveThing(caravan, thing2); } caravanRequest.Disable(); }, false, null)); } }; Settlement settlement = CaravanVisitUtility.SettlementVisitedNow(caravan); CaravanRequestComp caravanRequestComp = (settlement == null) ? null : settlement.GetComponent <CaravanRequestComp>(); if (!CaravanInventoryUtility.HasThings(caravan, caravanRequestComp.requestThingDef, caravanRequestComp.requestCount, validator)) { command_Action.Disable("CommandFulfillTradeOfferFailInsufficient".Translate(new object[] { GenLabel.ThingLabel(caravanRequestComp.requestThingDef, null, caravanRequestComp.requestCount) })); } return(command_Action); }