/// <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); }
/// <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); }