/// <summary> /// /// </summary> /// <param name="fractionColonist"></param> /// <param name="fractionPirate"></param> /// <returns>Истина, если это особый вид - пленник</returns> public bool SetFaction(string fractionColonist, string fractionPirate) { if (string.IsNullOrEmpty(Data) || !Data.Contains(" Class=\"Pawn\"")) { return(false); } if (MainHelper.DebugMode) { File.WriteAllText(Loger.PathLog + "MailPawnB" + (++nnnn).ToString() + ".xml", Data); } bool col = Data.Contains("<kindDef>Colonist</kindDef>"); bool isAnimal = Data.Contains("<lastJobGiverThinkTree>Animal</lastJobGiverThinkTree>"); //похоже, с 1.1 этого тэга нет if (!isAnimal) { isAnimal = !Data.Contains("<lastJobGiverThinkTree>Humanlike</lastJobGiverThinkTree>") && //похоже, с 1.1 этого тэга нет GameXMLUtils.GetByTag(Data, "def") == GameXMLUtils.GetByTag(Data, "kindDef"); } if (!isAnimal) { string fraction = fractionColonist; //col ? fractionColonist : fractionPirate; Data = GameXMLUtils.ReplaceByTag(Data, "faction", fraction); Data = GameXMLUtils.ReplaceByTag(Data, "kindDef", "Colonist"); //"Pirate" //if (MainHelper.DebugMode) Loger.Log(" Replace faction=>" + fraction); } //если это гости, то убираем у них это свойство - оно должно выставиться потом Data = GameXMLUtils.ReplaceByTag(Data, "guest", @" <hostFaction>null</hostFaction> <interactionMode>NoInteraction</interactionMode> <spotToWaitInsteadOfEscaping>(-1000, -1000, -1000)</spotToWaitInsteadOfEscaping> <lastPrisonBreakTicks>-1</lastPrisonBreakTicks> "); /* * Data = GameXMLUtils.ReplaceByTag(Data, "hostFaction", "null", "<guest>"); * Data = GameXMLUtils.ReplaceByTag(Data, "prisoner", "False", "<guest>");*/ /* попытка передавать заключенных не получилась * Data = GameXMLUtils.ReplaceByTag(Data, "hostFaction", * (val) => * { * if (MainHelper.DebugMode) Loger.Log(" Replace hostFaction "+ val + "=>" + fractionColonist); * return val == "null" ? null : fractionColonist; * * }); */ if (MainHelper.DebugMode) { File.WriteAllText(Loger.PathLog + "MailPawnA" + nnnn.ToString() + ".xml", Data); } return(!col && !isAnimal); }
protected void SetBaseInfo(Thing thing, int count) { Name = thing.LabelCapNoCount; Count = count; OriginalID = thing.thingIDNumber; var gx = new GameXMLUtils(); Data = gx.ToXml(thing); }
public virtual Thing CreateThing(bool useOriginalID = false, int stackCount = 0) { var gx = new GameXMLUtils(); Thing thing = gx.FromXml <Thing>(Data); thing.stackCount = stackCount == 0 ? Count : stackCount; if (OriginalID <= 0 || !useOriginalID) { thing.thingIDNumber = -1; ThingIDMaker.GiveIDTo(thing); } else { thing.thingIDNumber = OriginalID; } return(thing); }
public Thing CreateThing(bool useOriginalID, int stackCount = 0) { var gx = new GameXMLUtils(); Thing thing = gx.FromXml <Thing>(Data); thing.stackCount = stackCount == 0 ? Count : stackCount; if (OriginalID <= 0 || useOriginalID) { thing.thingIDNumber = -1; ThingIDMaker.GiveIDTo(thing); } else { thing.thingIDNumber = OriginalID; } return(thing); /* * var def = (ThingDef)GenDefDatabase.GetDef(typeof(ThingDef), DefName); * var stuffDef = !string.IsNullOrEmpty(StuffName) ? (ThingDef)GenDefDatabase.GetDef(typeof(ThingDef), StuffName) : GenStuff.DefaultStuffFor(def); * Thing thing = ThingMaker.MakeThing(def, stuffDef); * thing.stackCount = stackCount == 0 ? Count : stackCount; * * if (HitPoints > 0) thing.HitPoints = HitPoints; * * CompQuality compQuality = thing.TryGetComp<CompQuality>(); * if (compQuality != null) * { * compQuality.SetQuality((QualityCategory)(Quality + 3), ArtGenerationContext.Outsider); * } * * if (WornByCorpse) * { * Apparel thingA = thing as Apparel; * if (thingA != null) * { * typeof(Apparel) * .GetField("wornByCorpseInt", BindingFlags.Instance | BindingFlags.NonPublic) * .SetValue(thingA, true); * } * } * return thing; */ }
public virtual Thing CreateThing(bool useOriginalID = false, int stackCount = 0, bool needPirate = false) { var gx = new GameXMLUtils(); Thing thing = gx.FromXml <Thing>(Data); thing.stackCount = stackCount == 0 ? Count : stackCount; if (OriginalID <= 0 || !useOriginalID) { thing.thingIDNumber = -1; ThingIDMaker.GiveIDTo(thing); } else { thing.thingIDNumber = OriginalID; } SetFaction(thing, isColonist && !needPirate); return(thing); }
/* * /// <summary> * /// Тип вещи * /// </summary> * public string DefName { get; set; } * /// <summary> * /// Материал из чего изготовлено * /// </summary> * public string StuffName { get; set; } * /// <summary> * /// Текущая прочность, если 0 считается мсксимальной * /// </summary> * public int HitPoints { get; set; } * /// <summary> * /// Максимальная прочность (только информационно) * /// </summary> * public int MaxHitPoints { get; set; } * /// <summary> * /// Качество изготовления * /// </summary> * public int Quality { get; set; } * /// <summary> * /// Снято с трупа, применимо только к одежде * /// </summary> * public bool WornByCorpse { get; set; } */ public ThingEntry(Thing thing, int count) { Name = thing.LabelCapNoCount; Count = count; OriginalID = thing.thingIDNumber; var gx = new GameXMLUtils(); Data = gx.ToXml(thing); /* * DefName = thing.def.defName; * StuffName = thing.Stuff == null ? null : thing.Stuff.defName; * HitPoints = thing.HitPoints; * MaxHitPoints = thing.MaxHitPoints; * * QualityCategory qq; * if (QualityUtility.TryGetQuality(thing, out qq)) Quality = (int)qq - 3; * * Apparel thingA = thing as Apparel; * if (thingA != null) WornByCorpse = thingA.WornByCorpse; */ }
protected void SetData(Thing thing) { var gx = new GameXMLUtils(); Data = gx.ToXml(thing); }
/// <summary> /// Меняет у людей (всех пешек не животных) фракцию на фракцию игрока (иначе посе спавна без косяков не получается поменять у пешек фракцию на фракцию игрока). /// Возвращает истину, когда это был пират или пленник /// </summary> /// <param name="fractionColonist"></param> /// <returns>Истина, если это особый вид - пленник</returns> public bool SetFaction(string fractionColonist) { if (string.IsNullOrEmpty(Data) || !Data.Contains(" Class=\"Pawn\"")) { return(false); } if (MainHelper.DebugMode) { File.WriteAllText(Loger.PathLog + "MailPawnB" + (++nnnn).ToString() + ".xml", Data); } //логика коррекции основывается на 3х группыах: //колонист, человек не колонист (пират или пленник), животное bool col = Data.Contains("<kindDef>Colonist</kindDef>"); if (!col) { col = Data.Contains("ColonistGeneral</kindDef>"); //для мода с андроидами } bool isAnimal = GameXMLUtils.GetByTag(Data, "def") == GameXMLUtils.GetByTag(Data, "kindDef"); //для всех людей устанавливаем фракцию игрока (у животных не меняем) if (!isAnimal) { string fraction = fractionColonist; //col ? fractionColonist : fractionPirate; Data = GameXMLUtils.ReplaceByTag(Data, "faction", fraction); if (!col) { Data = GameXMLUtils.ReplaceByTag(Data, "kindDef", "Colonist"); //"Pirate" } //if (MainHelper.DebugMode) Loger.Log(" Replace faction=>" + fraction); } //если это гости, то убираем у них это свойство - оно должно выставиться потом Data = GameXMLUtils.ReplaceByTag(Data, "guest", @" <hostFaction>null</hostFaction> <interactionMode>NoInteraction</interactionMode> <spotToWaitInsteadOfEscaping>(-1000, -1000, -1000)</spotToWaitInsteadOfEscaping> <lastPrisonBreakTicks>-1</lastPrisonBreakTicks> "); /* * Data = GameXMLUtils.ReplaceByTag(Data, "hostFaction", "null", "<guest>"); * Data = GameXMLUtils.ReplaceByTag(Data, "prisoner", "False", "<guest>");*/ /* попытка передавать заключенных не получилась * Data = GameXMLUtils.ReplaceByTag(Data, "hostFaction", * (val) => * { * if (MainHelper.DebugMode) Loger.Log(" Replace hostFaction "+ val + "=>" + fractionColonist); * return val == "null" ? null : fractionColonist; * * }); */ //возвращаем true, если это человек и не колонист (пират или пленник) if (MainHelper.DebugMode) { File.WriteAllText(Loger.PathLog + "MailPawnA" + nnnn.ToString() + ".xml", Data); } return(!col && !isAnimal); }
public bool Run() { /* * GameUtils.ShowDialodOKCancel("asdasda", * () => Log.Message("Test OK"), * () => Log.Message("Test Cancel") * ); * return true; */ /* * var formm = new Dialog_Exchenge(Find.Maps[0]); * Find.WindowStack.Add(formm); * return true; * // */ return(false); /* * var lll = ScenarioLister.ScenariosInCategory(ScenarioCategory.FromDef); * * File.WriteAllText(Loger.PathLog + @"ScenarioLister.txt", TextObj(lll), Encoding.UTF8); * return true; */ try { Log.Message("DevelopTest Run"); Loger.Log(""); Loger.Log("DevelopTest Run"); var pawns = Find.WorldPawns.AllPawnsAlive.ToList(); //Fedon,Huntsman,Ally,Lilith,Tater,Jesse,Kentucky //Log.Message(string.Join(",", pawns.Select(p => p.NameStringShort).ToArray())); var pawn = pawns.Where(p => p.Name.ToStringShort == "Huntsman").FirstOrDefault(); File.WriteAllText(Loger.PathLog + @"Huntsman.txt", TextObj(pawn), Encoding.UTF8); var msg = ""; var map = Find.Maps[0]; var pawnsMy = map.mapPawns.AllPawnsSpawned.First(); Thing thinXZ; var cell = GameUtils.GetTradeCell(map); var gx = new GameXMLUtils(); //var testPawn = Scribe.saver.DebugOutputFor(pawns[0]); var testPawn = gx.ToXml(pawnsMy); File.WriteAllText(@"c:\World\testPawn.xml", testPawn); gx.StartFromXml(@"c:\World\test.xml"); var thin0 = gx.Test <Thing>(); //PawnComponentsUtility.CreateInitialComponents((Pawn)thin0); gx.Finish(); thin0.ThingID += "555"; if (thin0 is Pawn) { var refugee = (Pawn)thin0; GenSpawn.Spawn(refugee, cell, map); //refugee.SetFaction(Faction.OfPlayer, null); refugee.PostMapInit(); //? //map.mapPawns.UpdateRegistryForPawn((Pawn)thin0); } else { GenDrop.TryDropSpawn(thin0, cell, map, ThingPlaceMode.Near, out thinXZ, null); } //MapComponentUtility.FinalizeInit(map); //???? return(true); File.WriteAllText(Loger.PathLog + @"map.txt", TextObj(map, false), Encoding.UTF8); List <Thing> listThing = CaravanFormingUtility.AllReachableColonyItems(Find.Maps[0]); Dialog_TradeOnline form = null; form = new Dialog_TradeOnline(listThing, "OCity_DevTest_Test".Translate(), 3, () => { var select = form.GetSelect(); Thing thin = null; var thins = select.Select(p => { return(ThingEntry.CreateEntry(thin = p.Key, p.Value)); }).ToList(); var outText = TextObj(thins, true); File.WriteAllText(Loger.PathLog + @"Car.txt", outText, Encoding.UTF8); var caravan = Find.WorldObjects.Caravans[0]; foreach (var t in select) { //t.Key //ThingEntry the = new ThingEntry(t.Key, t.Value); ///* //thin = the.CreateThing(); //var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null); //p.inventory.innerContainer.TryAdd(thin, true); //*/ //thin = the.CreateThing(); GenDrop.TryDropSpawn(thin, cell, map, ThingPlaceMode.Near, out thinXZ, null); } /* * File.WriteAllText(Loger.PathLog + @"ThingIn.txt", TextObj(thin, true), Encoding.UTF8); * //if (thin.Spawned) thin.DeSpawn(); * ThingEntry the = new ThingEntry(thin, 1); * thin = the.CreateThing(); * GenDrop.TryDropSpawn(thin, GameUtils.GetTradeCell(map), map, ThingPlaceMode.Near, out thinXZ, null); * File.WriteAllText(Loger.PathLog + @"ThingXZ.txt", TextObj(thinXZ, true), Encoding.UTF8); * File.WriteAllText(Loger.PathLog + @"ThingOut.txt", TextObj(thin, true), Encoding.UTF8); */ /* * if (thin != null) * { * File.WriteAllText(Loger.PathLog + @"ThingIn.txt", TextObj(thin, true), Encoding.UTF8); * ThingEntry the = new ThingEntry(thin, 1); * File.WriteAllText(Loger.PathLog + @"ThingEntry.txt", TextObj(the, true), Encoding.UTF8); * File.WriteAllText(Loger.PathLog + @"ThingOut.txt", TextObj(the.CreateThing(), true), Encoding.UTF8); * }*/ }); Find.WindowStack.Add(form); return(true); pawn = pawns.Where(p => p.Name.ToStringShort == "Jesse").FirstOrDefault(); //msg += Find.Maps.Count.ToString() + Environment.NewLine; var pawnText = TextObj(pawn, true); File.WriteAllText(Loger.PathLog + @"Car.txt", pawnText, Encoding.UTF8); int directionTile = CaravanExitMapUtility.RandomBestExitTileFrom(Find.Maps[0]); //Find.Maps[0].Tile; //var destroyedFactionBase = (CaravanOnline)WorldObjectMaker.MakeWorldObject(ModDefOf.CaravanOnline); var destroyedFactionBase = (CaravanOnline)WorldObjectMaker.MakeWorldObject(ModDefOf.BaseOnline); destroyedFactionBase.Tile = directionTile; destroyedFactionBase.OnlineWObject = new Model.WorldObjectEntry() { LoginOwner = "OCity_DevTest_NameTestPlayer".Translate() }; destroyedFactionBase.SetFaction(Faction.OfPlayer); Find.WorldObjects.Add(destroyedFactionBase); var cars = Find.WorldObjects.AllWorldObjects.Where(o => o is Caravan).ToList(); var seeText = TextObj(cars); File.WriteAllText(Loger.PathLog + @"See.txt", seeText, Encoding.UTF8); Loger.Log(msg); } catch (Exception e) { Log.Error(e.ToString()); } return(true); }