Exemple #1
0
        /// <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);
        }
Exemple #2
0
        protected void SetBaseInfo(Thing thing, int count)
        {
            Name       = thing.LabelCapNoCount;
            Count      = count;
            OriginalID = thing.thingIDNumber;

            var gx = new GameXMLUtils();

            Data = gx.ToXml(thing);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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;
             */
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        /*
         * /// <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;
             */
        }
Exemple #7
0
        protected void SetData(Thing thing)
        {
            var gx = new GameXMLUtils();

            Data = gx.ToXml(thing);
        }
Exemple #8
0
        /// <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);
        }
Exemple #9
0
        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);
        }