Exemplo n.º 1
0
        /// <summary>
        /// Создает игровой объект.
        /// Если это пешка не колонист, то делаем его пиратом заключённым.
        /// Если freePirate=true, то делаем враждебными пиратами всех из фракции игрока.
        /// </summary>
        public static Thing PrepareSpawnThingEntry(ThingEntry thing, Faction factionPirate, bool freePirate = false)
        {
            var factionColonistLoadID = Find.FactionManager.OfPlayer.GetUniqueLoadID();
            //var fractionRoyaltyLoadID = Find.FactionManager.FirstFactionOfDef(FactionDefOf.Empire)?.GetUniqueLoadID();
            var fractionRoyalty = Find.FactionManager.FirstFactionOfDef(FactionDefOf.Empire);

            //if (string.IsNullOrEmpty(fractionRoyaltyLoadID)) Loger.Log("Client fractionRoyaltyLoadID is not find");

            //var factionPirateLoadID = factionPirate.GetUniqueLoadID();
            RegisterReferencing(Find.FactionManager.OfPlayer);

            //меняем фракцию на игрока для всех
            thing.SetFaction(factionColonistLoadID, () =>
            {
                if (fractionRoyalty == null)
                {
                    Loger.Log("Client fractionRoyalty is not find");
                    return(null);
                }

                Loger.Log("Client fractionRoyalty RegisterReferencing");
                RegisterReferencing(fractionRoyalty);

                return(fractionRoyalty.GetUniqueLoadID());
            });
            Thing thin;

            thin = thing.CreateThing(false, 0, freePirate);
            return(thin);
        }
Exemplo n.º 2
0
        private List <ThingEntry> GetPawnsAndDeleteCaravan(Caravan caravan)
        {
            var select = caravan.PawnsListForReading.ToList();
            //передаем выбранные товары из caravan к другому игроку в сaravanOnline
            var sendThings = new List <ThingEntry>();

            foreach (var pair in select)
            {
                var thing = pair;
                sendThings.Add(ThingEntry.CreateEntry(thing, 1));

                /*
                 * if (thing is Pawn)
                 * {
                 *  var pawn = thing as Pawn;
                 *  GameUtils.DeSpawnSetupOnCaravan(caravan, pawn);
                 * }*/
            }
            //пешки получины, остальное уничтожаем
            caravan.RemoveAllPawns();
            if (caravan.Spawned)
            {
                Find.WorldObjects.Remove(caravan);
            }
            foreach (var pair in select)
            {
                pair.Destroy(DestroyMode.Vanish);
            }
            return(sendThings);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Создает игровой объект.
        /// Если это пешка не колонист, то делаем его пиратом заключённым.
        /// Если freePirate=true, то делаем враждебными пиратами всех из фракции игрока.
        /// </summary>
        public static Thing PrepareSpawnThingEntry(ThingEntry thing, Faction factionPirate, bool freePirate = false)
        {
            var factionColonistLoadID = Find.FactionManager.OfPlayer.GetUniqueLoadID();

            //var factionPirateLoadID = factionPirate.GetUniqueLoadID();

            //меняем фракцию на игрока для всех
            thing.SetFaction(factionColonistLoadID);
            Thing thin;

            thin = thing.CreateThing(false, 0, freePirate);
            return(thin);
        }
Exemplo n.º 4
0
        private void exchangeOfGoods(Caravan caravan)
        {
            //Pawn bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan);
            ThingOwner <Thing> сontainer = new ThingOwner <Thing>();
            Dialog_TradeOnline form      = null;

            if (сaravanOnline.OnlineWObject == null)
            {
                Log.Error("OCity_Caravan_LOGNoData".Translate());
                return;
            }

            var goods = GameUtils.GetAllThings(caravan);

            form = new Dialog_TradeOnline(goods
                                          , сaravanOnline.OnlinePlayerLogin
                                          , сaravanOnline.OnlineWObject.FreeWeight
                                          , () =>
            {
                if (!SessionClientController.Data.BackgroundSaveGameOff)
                {
                    var select            = form.GetSelect();
                    bool selectAllCaravan = caravan.PawnsListForReading.Count == select.Count(s => s.Key is Pawn);
                    if (selectAllCaravan)
                    {
                        Log.Message("OCity_Caravan_LOGSwap".Translate());
                        select = new Dictionary <Thing, int>();
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            foreach (var item in pawn.inventory.innerContainer.ToDictionary(t => t, t => t.stackCount))
                            {
                                select.Add(item.Key, item.Value);
                            }
                            select.Add(pawn, 1);
                            pawn.inventory.innerContainer.Clear();
                        }
                    }
                    //передаем выбранные товары из caravan к другому игроку в сaravanOnline
                    var sendThings = new List <ThingEntry>();
                    foreach (var pair in select)
                    {
                        var thing     = pair.Key;
                        var numToTake = pair.Value;
                        if (thing is Pawn)
                        {
                            var pawn = thing as Pawn;
                            //если отдали пешку, то выкладываем все другим и удаляемся из каравана
                            var things = pawn.inventory.innerContainer.ToList();
                            pawn.inventory.innerContainer.Clear();
                            GameUtils.DeSpawnSetupOnCaravan(caravan, pawn);
                            foreach (var thin in things)
                            {
                                var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null);
                                if (p != null)
                                {
                                    p.inventory.innerContainer.TryAdd(thin, true);
                                }
                            }
                        }
                        sendThings.Add(ThingEntry.CreateEntry(thing, numToTake));
                    }

                    if (selectAllCaravan)
                    {
                        //удаляем пешку из игры
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            GameUtils.PawnDestroy(pawn);
                        }

                        Find.WorldObjects.Remove(caravan);
                    }
                    else
                    {
                        foreach (var pair in select)
                        {
                            var thing     = pair.Key;
                            var numToTake = pair.Value;
                            if (thing is Pawn)
                            {
                                var pawn = thing as Pawn;
                                //удаляем пешку из игры
                                GameUtils.PawnDestroy(pawn);
                            }
                            else
                            {
                                //если отдали вешь, то находим кто её тащит и убираем с него
                                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                                ownerOf.inventory.innerContainer.TryTransferToContainer(thing, сontainer, numToTake);
                            }
                        }
                    }

                    //После передачи сохраняем, чтобы нельзя было обузить, после чего передаем вещи
                    SessionClientController.SaveGameNowSingleAndCommandSafely(
                        (connect) =>
                    {
                        return(connect.SendThings(sendThings
                                                  , SessionClientController.My.Login
                                                  , сaravanOnline.OnlinePlayerLogin
                                                  , сaravanOnline.OnlineWObject.ServerId
                                                  , сaravanOnline.Tile
                                                  ));
                    },
                        null,
                        null); //если не удалось отправить письмо, то жопа так как сейв уже прошел
                }
            });
            Find.WindowStack.Add(form);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Создает игровой объект.
        /// Если это пешка не колонист, то делаем его пиратом заключённым.
        /// Если freePirate=true, то делаем враждебными пиратами всех из фракции игрока.
        /// revertPirate=true включает freePirate, если это бы не пират, и делает игроком, если был пиратом
        /// </summary>
        public static Thing PrepareSpawnThingEntry(ThingEntry thing, Faction factionPirate, bool freePirate = false /*, bool revertPirate = false*/)
        {
            var factionColonistLoadID = Find.FactionManager.OfPlayer.GetUniqueLoadID();
            var factionPirateLoadID   = factionPirate.GetUniqueLoadID();

            var   prisoner = thing.SetFaction(factionColonistLoadID, factionPirateLoadID);
            Thing thin;

            thin = thing.CreateThing(false);
            if (MainHelper.DebugMode)
            {
                Loger.Log("SetFaction...");
            }
            if (thin.def.CanHaveFaction)
            {
                if (MainHelper.DebugMode)
                {
                    Loger.Log("SetFaction...1");
                }

                /*
                 * if (revertPirate)
                 * {
                 *  if (thin is Pawn && thin.Faction == Find.FactionManager.OfPlayer)
                 *  {
                 *      thin.SetFaction(factionPirate);
                 *      var p = thin as Pawn;
                 *      if (!freePirate) p.guest.SetGuestStatus(factionPirate, true);
                 *  }
                 *  else
                 *      thin.SetFaction(Find.FactionManager.OfPlayer);
                 * }
                 * else*/
                {
                    if (thin is Pawn && (prisoner || freePirate && (/*((Pawn)thin).RaceProps.Humanlike ||*/ thin.Faction == Find.FactionManager.OfPlayer)))
                    {
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...2");
                        }
                        thin.SetFaction(factionPirate);
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...3");
                        }
                        var p = thin as Pawn;
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...4");
                        }
                        if (!freePirate && p.guest != null)
                        {
                            p.guest.SetGuestStatus(factionPirate, true);
                        }
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...5");
                        }
                    }
                    else
                    {
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...6");
                        }
                        thin.SetFaction(Find.FactionManager.OfPlayer);
                        if (MainHelper.DebugMode)
                        {
                            Loger.Log("SetFaction...7");
                        }
                    }
                }
            }
            return(thin);
        }
Exemplo n.º 6
0
        private void AttackUpdate()
        {
            bool inTimerEvent = false;

            try
            {
                if (InTimer)
                {
                    return;
                }
                InTimer = true;
                AttackUpdateTick++;
//                Loger.Log("Client HostAttackUpdate #" + AttackUpdateTick.ToString());

                SessionClientController.Command((connect) =>
                {
                    try
                    {
                        List <Pawn> mapPawns;
                        AttackHostFromSrv toClient;
                        lock (ToSendListsSync)
                        {
                            //                      Loger.Log("Client HostAttackUpdate 1");
                            //обновляем списки
                            mapPawns       = GameMap.mapPawns.AllPawnsSpawned;
                            var mapPawnsId = new HashSet <int>(mapPawns.Select(p => p.thingIDNumber));
                            mapPawnsId.SymmetricExceptWith(SendedPawnsId); //новые пешки + те что на сервере, но их уже нет на карте

                            if (mapPawnsId.Count > 0)
                            {
                                var toSendAddId = new HashSet <int>(mapPawnsId);
                                toSendAddId.ExceptWith(SendedPawnsId); //только новые пешки
                                if (toSendAddId.Count > 0)
                                {
                                    toSendAddId.ExceptWith(ToSendAddId); //исключаем те, которые уже есть в списке
                                    ToSendAddId.AddRange(toSendAddId);
                                }

                                var toSendDeleteId = new HashSet <int>(mapPawnsId);
                                toSendDeleteId.IntersectWith(SendedPawnsId); //только те, что на сервере но их уже нет на карте
                                if (toSendDeleteId.Count > 0)
                                {
                                    toSendDeleteId.ExceptWith(ToSendDeleteId); //исключаем те, которые уже есть в списке
                                    ToSendDeleteId.AddRange(toSendDeleteId);
                                }
                            }

                            //посылаем пакеты с данными
                            //                      Loger.Log("Client HostAttackUpdate 2");

                            var newPawns   = new List <ThingEntry>();
                            var newPawnsId = new List <int>();
                            int cnt        = ToSendAddId.Count < 3 || ToSendAddId.Count > 6 || AttackUpdateTick == 0
                                ? ToSendAddId.Count
                                : 3;
                            int i       = 0;
                            int[] added = new int[cnt];
                            foreach (int id in ToSendAddId)
                            {
                                if (i >= cnt)
                                {
                                    break;
                                }
                                added[i++] = id;

                                var thing = mapPawns.Where(p => p.thingIDNumber == id).FirstOrDefault();
                                var tt    = ThingEntry.CreateEntry(thing, 1);
                                //передаем те, что были исходные у атакуемого (хотя там используется только как признак TransportID != 0 - значит те кто атакует)
                                if (AttackingPawnDic.ContainsKey(tt.OriginalID))
                                {
                                    tt.TransportID = AttackingPawnDic[tt.OriginalID];
                                }
                                newPawns.Add(tt);
                                newPawnsId.Add(id);
                            }
                            for (i = 0; i < cnt; i++)
                            {
                                ToSendAddId.Remove(added[i]);
                                SendedPawnsId.Add(added[i]);
                            }

                            foreach (int id in ToSendDeleteId)
                            {
                                SendedPawnsId.Remove(id);
                            }

                            //вещи
                            var newThings = ToSendThingAdd
                                            .Where(thing => !ToSendDeleteId.Any(d => thing.thingIDNumber == d))
                                            .Select(thing => ThingEntry.CreateEntry(thing, thing.stackCount))
                                            .ToList();

                            //передаем изменение местоположения и пр. по ID хоста
                            var toSendState   = new List <AttackThingState>();
                            var toSendStateId = new List <int>();
                            for (int imp = 0; imp < mapPawns.Count; imp++)
                            {
                                var mp   = mapPawns[imp];
                                var mpID = mp.thingIDNumber;
                                if (ToUpdateStateId.Contains(mpID))
                                {
                                    continue;
                                }

                                var mpHash = AttackThingState.GetHash(mp);
                                int mpHS;
                                if (!SendedState.TryGetValue(mpID, out mpHS) || mpHS != mpHash)
                                {
                                    SendedState[mpID] = mpHash;
                                    toSendState.Add(new AttackThingState(mp));
                                }
                            }
                            for (int imp = 0; imp < ToUpdateState.Count; imp++)
                            {
                                var mp   = ToUpdateState[imp];
                                var mpID = mp.thingIDNumber;
                                if (ToSendDeleteId.Contains(mpID))
                                {
                                    continue;
                                }

                                if (mp is Pawn)
                                {
                                    var mpHash        = AttackThingState.GetHash(mp);
                                    SendedState[mpID] = mpHash; //заносим только для проверки выше
                                }
                                toSendState.Add(new AttackThingState(mp));
                            }

                            //обновляем поколения вещей учавствующих в Job и отправляем нужные
                            foreach (var mp in ThingPrepareChange0)
                            {
                                var mpID = mp.thingIDNumber;
                                if (ToSendDeleteId.Contains(mpID))
                                {
                                    continue;
                                }

                                toSendState.Add(new AttackThingState(mp));
                            }
                            Loger.Log("HostAttackUpdate UpdateCommand FromJob Count=" + ThingPrepareChange0.Count.ToString());
                            ThingPrepareChange0 = ThingPrepareChange1;
                            ThingPrepareChange1 = new HashSet <Thing>();

                            //Loger.Log("Client HostAttackUpdate 3");
                            toClient = connect.AttackOnlineHost(new AttackHostToSrv()
                            {
                                State       = 10,
                                NewPawns    = newPawns,
                                NewPawnsId  = newPawnsId,
                                NewThings   = newThings,
                                NewThingsId = newThings.Select(th => th.OriginalID).ToList(),
                                Delete      = ToSendDeleteId.ToList(),
                                UpdateState = toSendState
                            });
                            ToSendThingAdd.Clear();
                            ToSendDeleteId.Clear();
                            ToUpdateStateId.Clear();
                            ToUpdateState.Clear();
                        }

                        //принимаем обновление команд атакующих
                        if (toClient.UpdateCommand.Count > 0)
                        {
                            Loger.Log("HostAttackUpdate UpdateCommand Count=" + toClient.UpdateCommand.Count.ToString());
                            UIEventNewJobDisable = true;
                            for (int ii = 0; ii < toClient.UpdateCommand.Count; ii++)
                            {
                                var comm = toClient.UpdateCommand[ii];
                                var pawn = mapPawns.Where(p => p.thingIDNumber == comm.HostPawnID).FirstOrDefault() as Pawn;
                                if (pawn == null)
                                {
                                    Loger.Log("HostAttackUpdate UpdateCommand pawn == null " + comm.HostPawnID.ToString());
                                    continue;
                                }

                                AttackingPawnJobDic[comm.HostPawnID] = comm;
                                ApplyAttackingPawnJob(pawn);
                            }
                            UIEventNewJobDisable = false;
                        }

                        //                      Loger.Log("Client HostAttackUpdate 4");
                    }
                    catch (Exception ext)
                    {
                        InTimer = false;
                        Loger.Log("HostAttackUpdate Event Exception " + ext.ToString());
                    }
                    finally
                    {
                        InTimer = false;
                    }
                });
            }
            catch (Exception ext)
            {
                Loger.Log("HostAttackUpdate Exception " + ext.ToString());
            }
            if (!inTimerEvent)
            {
                InTimer = false;
            }
        }
Exemplo n.º 7
0
        //public override bool ShouldFail { get { return false; } }

        public override void Arrived(Caravan caravan)
        {
            if (mode == "exchangeOfGoods")
            {
                //Pawn bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan);
                ThingOwner <Thing> сontainer = new ThingOwner <Thing>();
                Dialog_TradeOnline form      = null;
                if (сaravanOnline.OnlineWObject == null)
                {
                    Log.Error("OCity_Caravan_LOGNoData".Translate());
                    return;
                }

                var goods = GameUtils.GetAllThings(caravan);

                form = new Dialog_TradeOnline(goods
                                              , сaravanOnline.OnlinePlayerLogin
                                              , сaravanOnline.OnlineWObject.FreeWeight
                                              , () =>
                {
                    var select            = form.GetSelect();
                    bool selectAllCaravan = caravan.PawnsListForReading.Count == select.Count(s => s.Key is Pawn);
                    if (selectAllCaravan)
                    {
                        Log.Message("OCity_Caravan_LOGSwap".Translate());
                        select = new Dictionary <Thing, int>();
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            foreach (var item in pawn.inventory.innerContainer.ToDictionary(t => t, t => t.stackCount))
                            {
                                select.Add(item.Key, item.Value);
                            }
                            select.Add(pawn, 1);
                            pawn.inventory.innerContainer.Clear();
                        }
                    }
                    //передаем выбранные товары из caravan к другому игроку в сaravanOnline
                    var sendThings = new List <ThingEntry>();
                    foreach (var pair in select)
                    {
                        var thing     = pair.Key;
                        var numToTake = pair.Value;
                        if (thing is Pawn)
                        {
                            var pawn = thing as Pawn;
                            //если отдали пешку, то выкладываем все другим и удаляемся из каравана
                            var things = pawn.inventory.innerContainer.ToList();
                            pawn.inventory.innerContainer.Clear();
                            GameUtils.DeSpawnSetupOnCaravan(caravan, pawn);
                            foreach (var thin in things)
                            {
                                var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null);
                                if (p != null)
                                {
                                    p.inventory.innerContainer.TryAdd(thin, true);
                                }
                            }
                        }
                        sendThings.Add(ThingEntry.CreateEntry(thing, numToTake));
                    }
                    SessionClientController.Command((connect) =>
                    {
                        connect.SendThings(sendThings
                                           , SessionClientController.My.Login
                                           , сaravanOnline.OnlinePlayerLogin
                                           , сaravanOnline.OnlineWObject.ServerId
                                           , сaravanOnline.Tile
                                           );
                    });

                    if (selectAllCaravan)
                    {
                        //удаляем пешку из игры
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            pawn.Destroy(DestroyMode.Vanish);
                        }

                        Find.WorldObjects.Remove(caravan);
                    }
                    else
                    {
                        foreach (var pair in select)
                        {
                            var thing     = pair.Key;
                            var numToTake = pair.Value;
                            if (thing is Pawn)
                            {
                                var pawn = thing as Pawn;
                                //удаляем пешку из игры
                                pawn.Destroy(DestroyMode.Vanish);
                                //Find.WorldPawns.RemovePawn(pawn); не проверенное не полное удаление, если её вернут назад
                            }
                            else
                            {
                                //если отдали вешь, то находим кто её тащит и убираем с него
                                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                                ownerOf.inventory.innerContainer.TryTransferToContainer(thing, сontainer, numToTake);
                            }
                        }
                    }
                });
                Find.WindowStack.Add(form);
            }
        }
Exemplo n.º 8
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);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Создает игровой объект.
        /// Если это пешка не колонист, то делаем его пиратом заключённым.
        /// Если freePirate=true, то делаем враждебными пиратами всех из фракции игрока.
        /// </summary>
        public static Thing PrepareSpawnThingEntry(ThingEntry thing, Faction factionPirate, bool freePirate = false)
        {
            var factionColonistLoadID = Find.FactionManager.OfPlayer.GetUniqueLoadID();
            //var factionPirateLoadID = factionPirate.GetUniqueLoadID();

            //меняем фракцию на игрока для всех
            var   prisoner = thing.SetFaction(factionColonistLoadID);
            Thing thin;

            thin = thing.CreateThing(false);
            if (MainHelper.DebugMode)
            {
                Loger.Log("SetFaction...");
            }
            if (thin.def.CanHaveFaction)
            {
                if (MainHelper.DebugMode)
                {
                    Loger.Log("SetFaction...1");
                }

                if (thin is Pawn && (prisoner || freePirate && thin.Faction == Find.FactionManager.OfPlayer))
                {
                    //а тут меняем фракцию на пиратов, для тех кому нужно
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...2");
                    }
                    thin.SetFaction(factionPirate);
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...3");
                    }
                    var p = thin as Pawn;
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...4");
                    }
                    if (!freePirate && p.guest != null)
                    {
                        p.guest.SetGuestStatus(factionPirate, true);
                    }
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...5");
                    }
                }
                else
                {
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...6");
                    }
                    thin.SetFaction(Find.FactionManager.OfPlayer);
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("SetFaction...7");
                    }
                }
            }
            return(thin);
        }
 public static string GenderString(this ThingEntry entry)
 {
     return(entry.gender.ToString().ToLower());
 }