Esempio n. 1
0
 public void AddCaptiveWithEvent(Captive captive)
 {
     base.Add(captive);
     captive.OnPlayerRelease += new Captive.PlayerRelease(this.captive_OnPlayerRelease);
     captive.OnRelease       += new Captive.Release(this.captive_OnRelease);
     captive.OnSelfRelease   += new Captive.SelfRelease(this.captive_OnSelfRelease);
 }
Esempio n. 2
0
 public void AddCaptiveWithEvent(Captive captive)
 {
     base.Add(captive);
     captive.OnPlayerRelease += new Captive.PlayerRelease(this.captive_OnPlayerRelease);
     captive.OnRelease += new Captive.Release(this.captive_OnRelease);
     captive.OnSelfRelease += new Captive.SelfRelease(this.captive_OnSelfRelease);
 }
Esempio n. 3
0
        public static Captive Create(Person person, Faction capturingFaction)
        {
            if (person.BelongedFaction == capturingFaction)
            {
                return(null);
            }
            Captive captive = new Captive();

            captive.ID            = Session.Current.Scenario.Captives.GetFreeGameObjectID();
            captive.CaptivePerson = person;
            person.DecreaseReputation(50);
            captive.CaptiveFaction = person.BelongedFaction;
            person.SetBelongedCaptive(captive, GameObjects.PersonDetail.PersonStatus.Captive);
            person.HeldCaptiveCount++;
            Session.Current.Scenario.Captives.AddCaptiveWithEvent(captive);
            return(captive);
        }
Esempio n. 4
0
 public static Captive Create(GameScenario scenario, Person person, Faction capturingFaction)
 {
     if (person.BelongedFaction == null)
     {
         return null;
     }
     if (person.BelongedFaction == capturingFaction)
     {
         return null;
     }
     Captive captive = new Captive();
     captive.Scenario = scenario;
     captive.ID = scenario.Captives.GetFreeGameObjectID();
     captive.CaptivePerson = person;
     captive.CaptiveFaction = person.BelongedFaction;
     person.SetBelongedCaptive(captive, GameObjects.PersonDetail.PersonStatus.Captive);
     person.HeldCaptiveCount++;
     scenario.Captives.AddCaptiveWithEvent(captive);
     return captive;
 }
Esempio n. 5
0
 public static Captive Create(GameScenario scenario, Person person, Faction faction)
 {
     if (person.BelongedFaction == null)
     {
         return null;
     }
     if (person.BelongedFaction == faction)
     {
         return null;
     }
     Captive captive = new Captive();
     captive.Scenario = scenario;
     captive.ID = scenario.Captives.GetFreeGameObjectID();
     captive.CaptivePerson = person;
     person.BelongedCaptive = captive;
     captive.CaptiveFaction = person.BelongedFaction;
     scenario.Captives.AddCaptiveWithEvent(captive);
     captive.CaptiveFaction.AddSelfCaptive(captive);
     faction.AddCaptive(captive);
     return captive;
 }
        public static Captive Create(GameScenario scenario, Person person, Faction faction)
        {
            if (person.BelongedFaction == null)
            {
                return(null);
            }
            if (person.BelongedFaction == faction)
            {
                return(null);
            }
            Captive captive = new Captive();

            captive.Scenario       = scenario;
            captive.ID             = scenario.Captives.GetFreeGameObjectID();
            captive.CaptivePerson  = person;
            person.BelongedCaptive = captive;
            captive.CaptiveFaction = person.BelongedFaction;
            scenario.Captives.AddCaptiveWithEvent(captive);
            captive.CaptiveFaction.AddSelfCaptive(captive);
            faction.AddCaptive(captive);
            return(captive);
        }
Esempio n. 7
0
        public static Captive Create(GameScenario scenario, Person person, Faction faction)
        {
            if (person.BelongedFaction == null)
            {
                return(null);
            }
            if (person.BelongedFaction == faction)
            {
                return(null);
            }
            Captive captive = new Captive();

            captive.Scenario       = scenario;
            captive.ID             = scenario.Captives.GetFreeGameObjectID();
            captive.CaptivePerson  = person;
            captive.CaptiveFaction = person.BelongedFaction;
            person.BelongedCaptive = captive;
            person.Status          = GameObjects.PersonDetail.PersonStatus.Captive;
            person.HeldCaptiveCount++;
            scenario.Captives.AddCaptiveWithEvent(captive);
            return(captive);
        }
Esempio n. 8
0
 public virtual void SelfCaptiveRelease(Captive captive)
 {
 }
Esempio n. 9
0
 public virtual void CaptivePlayerRelease(Faction from, Faction to, Captive captive)
 {
 }
Esempio n. 10
0
 public virtual void PersonJailBreak(Person person, Captive captive)
 {
 }
Esempio n. 11
0
 private void captive_OnEscape(Captive captive)
 {
     //captive.Scenario.GameScreen.CaptiveEscape(captive);
 }
Esempio n. 12
0
 void person_OnJailBreakSuccess(Person source, Captive destination)
 {
     source.Scenario.GameScreen.PersonJailBreak(source, destination);
 }
Esempio n. 13
0
 public void RemoveCaptive(Captive captive)
 {
     this.Captives.Remove(captive);
     captive.LocationTroop = null;
 }
Esempio n. 14
0
 private void captive_OnSelfRelease(Captive captive)
 {
     Session.MainGame.mainGameScreen.SelfCaptiveRelease(captive);
 }
Esempio n. 15
0
 private void captive_OnSelfRelease(Captive captive)
 {
     captive.Scenario.GameScreen.SelfCaptiveRelease(captive);
 }
Esempio n. 16
0
 private void captive_OnPlayerRelease(Faction from, Faction to, Captive captive)
 {
     from.Scenario.GameScreen.CaptivePlayerRelease(from, to, captive);
 }
Esempio n. 17
0
        //读剧本和读存档都调用了此函数
        private void LoadGameDataFromDataBase(OleDbConnection DbConnection, string connectionString)
        {
            try
            {
                this.GameCommonData.LoadFromDatabase(connectionString);
                UsingOwnCommonData = true;
            }
            catch (Exception)
            {
                this.GameCommonData.Clear();
                this.LoadCommonData();
                UsingOwnCommonData = false;
            }
            try
            {
                this.LoadSettingsFromDatabase(connectionString);
            }
            catch (Exception)
            {
                //ignore
            }

            ExtensionInterface.loadCompiledTypes();

            this.scenarioJustLoaded = true;
            OleDbCommand command = new OleDbCommand("Select * From Map", DbConnection);
            ////////////////////////////////////////////////////////////////////////////////////////////
            DbConnection.Open();
            OleDbDataReader reader = command.ExecuteReader();
            reader.Read();
            this.ScenarioMap.MapName = reader["FileName"].ToString();
            this.ScenarioMap.TileWidth = (short)reader["TileWidth"];
            try
            {
                this.ScenarioMap.NumberOfTiles = (short)reader["kuaishu"];
                this.ScenarioMap.NumberOfSquaresInEachTile = (short)reader["meikuaidexiaokuaishu"];
                this.ScenarioMap.UseSimpleArchImages = (bool)reader["useSimpleArchImages"];
            }
            catch
            {
                this.ScenarioMap.NumberOfTiles = 20;
                this.ScenarioMap.NumberOfSquaresInEachTile = 10;
                this.ScenarioMap.UseSimpleArchImages = false;
            }
            this.ScenarioMap.LoadMapData(reader["MapData"].ToString(), (short)reader["DimensionX"], (short)reader["DimensionY"]);
            DbConnection.Close();
            ///////////////////////////////////////////////////////////////////////////////////////////
            DbConnection.Open();
            reader = new OleDbCommand("Select * From State", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                State t = new State();
                t.ID = (short)reader["ID"];
                t.Name = reader["Name"].ToString();
                t.ContactStatesString = reader["ContactStates"].ToString();
                t.StateAdminID = (short)reader["StateAdmin"];
                this.States.Add(t);
            }
            DbConnection.Close();
            foreach (State state in this.States)
            {
                state.LoadContactStatesFromString(this.States, state.ContactStatesString);
            }
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Region", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Region region = new Region();
                region.ID = (short)reader["ID"];
                region.Name = reader["Name"].ToString();
                region.LoadStatesFromString(this.States, reader["States"].ToString());
                region.RegionCoreID = (short)reader["RegionCore"];
                this.Regions.Add(region);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Person", DbConnection).ExecuteReader();
            Dictionary<int, int> fatherIds = new Dictionary<int, int>();
            Dictionary<int, int> motherIds = new Dictionary<int, int>();
            Dictionary<int, int> spouseIds = new Dictionary<int, int>();
            Dictionary<int, int[]> brotherIds = new Dictionary<int, int[]>();
            Dictionary<int, int[]> closeIds = new Dictionary<int, int[]>();
            Dictionary<int, int[]> hatedIds = new Dictionary<int, int[]>();
            while (reader.Read())
            {
                Person person = new Person();
                person.Scenario = this;
                person.ID = (short)reader["ID"];
                person.PersonBiography = this.GameCommonData.AllBiographies.GetBiography(person.ID);
                person.Available = (bool)reader["Available"];
                person.Alive = (bool)reader["Alive"];
                person.SurName = reader["SurName"].ToString();
                person.GivenName = reader["GivenName"].ToString();
                person.CalledName = reader["CalledName"].ToString();
                person.Sex = (bool)reader["Sex"];
                person.PictureIndex = (short)reader["Pic"];
                person.Ideal = (short)reader["Ideal"];
                person.IdealTendency = this.GameCommonData.AllIdealTendencyKinds.GetGameObject((short)reader["IdealTendency"]) as IdealTendencyKind;
                person.LeaderPossibility = (bool)reader["LeaderPossibility"];
                person.Character = this.GameCommonData.AllCharacterKinds[(short)reader["PCharacter"]];
                person.YearAvailable = (short)reader["YearAvailable"];
                person.YearBorn = (short)reader["YearBorn"];
                person.YearDead = (short)reader["YearDead"];
                person.DeadReason = (PersonDeadReason)((short)reader["DeadReason"]);
                person.BaseStrength = (short)reader["Strength"];
                person.BaseCommand = (short)reader["Command"];
                person.BaseIntelligence = (short)reader["Intelligence"];
                person.BasePolitics = (short)reader["Politics"];
                person.BaseGlamour = (short)reader["Glamour"];
                person.Reputation = (int)reader["Reputation"];
                person.StrengthExperience = (int)reader["StrengthExperience"];
                person.CommandExperience = (int)reader["CommandExperience"];
                person.IntelligenceExperience = (int)reader["IntelligenceExperience"];
                person.PoliticsExperience = (int)reader["PoliticsExperience"];
                person.GlamourExperience = (int)reader["GlamourExperience"];
                person.InternalExperience = (int)reader["InternalExperience"];
                person.TacticsExperience = (int)reader["TacticsExperience"];
                person.BubingExperience = (int)reader["BubingExperience"];
                person.NubingExperience = (int)reader["NubingExperience"];
                person.QibingExperience = (int)reader["QibingExperience"];
                person.ShuijunExperience = (int)reader["ShuijunExperience"];
                person.QixieExperience = (int)reader["QixieExperience"];
                person.StratagemExperience = (int)reader["StratagemExperience"];
                person.RoutCount = (int)reader["RoutCount"];
                person.RoutedCount = (int)reader["RoutedCount"];
                person.Braveness = (short)reader["Braveness"];
                person.Calmness = (short)reader["Calmness"];
                person.Loyalty = (short)reader["Loyalty"];
                person.BornRegion = (PersonBornRegion)((short)reader["BornRegion"]);
                person.AvailableLocation = (short)reader["AvailableLocation"];
                person.Strain = (short)reader["Strain"];
                fatherIds[person.ID] = (short)reader["Father"];
                motherIds[person.ID] = (short)reader["Mother"];
                spouseIds[person.ID] = (short)reader["Spouse"];

                String str = reader["Brother"].ToString();
                char[] separator = new char[] { ' ', '\n', '\r', '\t' };
                string[] strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                int[] intArray = new int[strArray.Length];
                for (int i = 0; i < strArray.Length; i++)
                {
                    intArray[i] = int.Parse(strArray[i]);
                }
                brotherIds.Add(person.ID, intArray);

                person.Generation = (short)reader["Generation"];
                person.PersonalLoyalty = ((short)reader["PersonalLoyalty"]);
                person.Ambition = ((short)reader["Ambition"]);
                person.Qualification = (PersonQualification)((short)reader["Qualification"]);
                person.ValuationOnGovernment = (PersonValuationOnGovernment)((short)reader["ValuationOnGovernment"]);
                person.StrategyTendency = (PersonStrategyTendency)((short)reader["StrategyTendency"]);
                person.OldFactionID = (short)reader["OldFactionID"];
                person.RewardFinished = (bool)reader["RewardFinished"];
                person.WorkKind = (ArchitectureWorkKind)((short)reader["WorkKind"]);
                person.OldWorkKind = (ArchitectureWorkKind)((short)reader["OldWorkKind"]);
                person.RecruitmentMilitary = null;
                person.ArrivingDays = (short)reader["ArrivingDays"];
                person.TaskDays = (short)reader["TaskDays"];
                person.OutsideTask = (OutsideTaskKind)((short)reader["OutsideTask"]);
                person.OutsideDestination = StaticMethods.LoadFromString(reader["OutsideDestination"].ToString());
                person.ConvincingPersonID = (short)reader["ConvincingPerson"];
                person.InformationKindID = (short)reader["InformationKind"];

                str = reader["ClosePersons"].ToString();
                strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                intArray = new int[strArray.Length];
                for (int i = 0; i < strArray.Length; i++)
                {
                    intArray[i] = int.Parse(strArray[i]);
                }
                closeIds.Add(person.ID, intArray);

                str = reader["HatedPersons"].ToString();
                strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                intArray = new int[strArray.Length];
                for (int i = 0; i < strArray.Length; i++)
                {
                    intArray[i] = int.Parse(strArray[i]);
                }
                hatedIds.Add(person.ID, intArray);

                person.Skills.LoadFromString(this.GameCommonData.AllSkills, reader["Skills"].ToString());

                try
                {
                    person.LoadTitleFromString(reader["Title"].ToString(), this.GameCommonData.AllTitles);
                }
                catch
                {
                    Title t = this.GameCommonData.AllTitles.GetTitle((short)reader["PersonalTitle"]);
                    if (t != null)
                    {
                        person.RealTitles.Add(t);
                    }
                    t = this.GameCommonData.AllTitles.GetTitle((short)reader["CombatTitle"]);
                    if (t != null)
                    {
                        person.RealTitles.Add(t);
                    }
                }

                person.StudyingTitle = this.GameCommonData.AllTitles.GetTitle((short)reader["StudyingTitle"]);
                person.huaiyun = (bool)reader["huaiyun"];
                person.faxianhuaiyun = (bool)reader["faxianhuaiyun"];
                person.huaiyuntianshu = short.Parse(reader["huaiyuntianshu"].ToString());

                try
                {
                    person.suoshurenwu = (short)reader["suoshurenwu"];
                }
                catch
                {

                }

                try
                {
                    person.Stunts.LoadFromString(this.GameCommonData.AllStunts, reader["Stunts"].ToString());
                    person.StudyingStunt = this.GameCommonData.AllStunts.GetStunt((short)reader["StudyingStunt"]);
                }
                catch
                {
                }

                try
                {
                    person.waitForFeiziId = int.Parse(reader["WaitForFeizi"].ToString());
                    person.WaitForFeiZiPeriod = (int)reader["WaitForFeiziPeriod"];
                }
                catch (Exception ex)
                {
                    person.waitForFeiziId = -1;
                    person.WaitForFeiZiPeriod = 0;
                }

                try
                {
                    person.preferredTroopPersonsString = reader["PreferredTroopPersons"].ToString();
                }
                catch (Exception ex)
                {
                    person.preferredTroopPersonsString = "";
                }

                try
                {
                    person.YearJoin = (short)reader["YearJoin"];
                    person.TroopDamageDealt = (int)reader["TroopDamageDealt"];
                    person.TroopBeDamageDealt = (int)reader["TroopBeDamageDealt"];
                    person.ArchitectureDamageDealt = (int)reader["ArchitectureDamageDealt"];
                    person.RebelCount = (short)reader["RebelCount"];
                    person.ExecuteCount = (short)reader["ExecuteCount"];
                    person.FleeCount = (short)reader["FleeCount"];
                    person.HeldCaptiveCount = (short)reader["HeldCaptiveCount"];
                    person.CaptiveCount = (short)reader["CaptiveCount"];
                    person.StratagemSuccessCount = (int)reader["StratagemSuccessCount"];
                    person.StratagemFailCount = (int)reader["StratagemFailCount"];
                    person.StratagemBeSuccessCount = (int)reader["StratagemBeSuccessCount"];
                    person.StratagemBeFailCount = (int)reader["StratagemBeFailCount"];
                }
                catch
                {
                    // all zeroes.
                }
                try
                {
                    person.Tiredness = (int)reader["Tiredness"];
                }
                catch
                {
                }
                try
                {
                    person.OfficerKillCount = (int)reader["OfficerKillCount"];
                }
                catch
                {
                }

                this.Persons.AddPersonWithEvent(person);  //所有武将,并加载武将事件
                this.AllPersons.Add(person.ID, person);   //武将字典
                if (person.Available && person.Alive)
                {
                    this.AvailablePersons.Add(person);  //已出场武将
                }
            }
            DbConnection.Close();
            foreach (Person p in this.Persons)
            {
                p.WaitForFeiZi = this.Persons.GetGameObject(p.waitForFeiziId) as Person;
                p.preferredTroopPersons.LoadFromString(this.Persons, p.preferredTroopPersonsString);
            }
            foreach (KeyValuePair<int, int> i in fatherIds)
            {
                (this.Persons.GetGameObject(i.Key) as Person).Father = this.Persons.GetGameObject(i.Value) as Person;
            }
            foreach (KeyValuePair<int, int> i in motherIds)
            {
                (this.Persons.GetGameObject(i.Key) as Person).Mother = this.Persons.GetGameObject(i.Value) as Person;
            }
            foreach (KeyValuePair<int, int> i in spouseIds)
            {
                (this.Persons.GetGameObject(i.Key) as Person).Spouse = this.Persons.GetGameObject(i.Value) as Person;
            }
            foreach (KeyValuePair<int, int[]> i in brotherIds)
            {
                if (i.Value.Length == 1 && i.Value[0] != -1)
                {
                    foreach (KeyValuePair<int, int[]> j in brotherIds)
                    {
                        if (j.Value.Length > 0 && i.Value[0] == j.Value[0])
                        {
                            Person p = this.Persons.GetGameObject(i.Key) as Person;
                            Person q = this.Persons.GetGameObject(j.Key) as Person;
                            p.Brothers.Add(q);
                        }
                    }
                }
                else
                {
                    Person p = this.Persons.GetGameObject(i.Key) as Person;
                    foreach (int j in i.Value)
                    {
                        Person q = this.Persons.GetGameObject(j) as Person;
                        if (q != null)
                        {
                            p.Brothers.Add(q);
                        }
                    }
                }
            }
            foreach (KeyValuePair<int, int[]> i in closeIds)
            {
                Person p = this.Persons.GetGameObject(i.Key) as Person;
                foreach (int j in i.Value)
                {
                    Person q = this.Persons.GetGameObject(j) as Person;
                    p.AddClose(q);
                }
            }
            foreach (KeyValuePair<int, int[]> i in hatedIds)
            {
                Person p = this.Persons.GetGameObject(i.Key) as Person;
                foreach (int j in i.Value)
                {
                    Person q = this.Persons.GetGameObject(j) as Person;
                    p.AddHated(q);
                }
            }
            DbConnection.Open();
            try
            {
                reader = new OleDbCommand("Select * From PersonRelation", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    Person person1 = this.Persons.GetGameObject((short)reader["Person1"]) as Person;
                    Person person2 = this.Persons.GetGameObject((short)reader["Person2"]) as Person;
                    int relation = (int)reader["Relation"];
                    person1.SetRelation(person2, relation);
                }
            }
            catch (OleDbException)
            {
                //ignore
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Captive", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Captive captive = new Captive();
                captive.Scenario = this;
                captive.ID = (short)reader["ID"];
                captive.CaptivePerson = this.Persons.GetGameObject((short)reader["CaptivePerson"]) as Person;
                captive.CaptivePerson.BelongedCaptive = captive;
                captive.CaptiveFactionID = (short)reader["CaptiveFaction"];
                captive.RansomArchitectureID = (short)reader["RansomArchitecture"];
                captive.RansomFund = (int)reader["RansomFund"];
                captive.RansomArriveDays = (int)reader["RansomArriveDays"];
                captive.CaptivePerson.Status = PersonStatus.Captive;
                if (!isInCaptiveList(captive.CaptivePerson.ID))
                {
                    this.Captives.AddCaptiveWithEvent(captive);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Military", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Military military = new Military();
                military.Scenario = this;
                military.ID = (short)reader["ID"];
                military.Name = reader["Name"].ToString();
                military.KindID = (short)reader["KindID"];
                military.Quantity = (int)reader["Quantity"];
                military.Morale = (int)reader["Morale"];
                military.Combativity = (int)reader["Combativity"];
                military.Experience = (int)reader["Experience"];
                military.InjuryQuantity = (int)reader["InjuryQuantity"];
                military.FollowedLeaderID = (short)reader["FollowedLeaderID"];
                military.LeaderID = (short)reader["LeaderID"];
                military.LeaderExperience = (int)reader["LeaderExperience"];
                int recruiter = (short)reader["RecruitmentPersonID"];
                foreach (Person p in this.Persons)
                {
                    if (p.ID == recruiter)
                    {
                        //p.RecruitmentMilitary = military;
                        p.RecruitMilitary(military);
                    }
                }
                military.ShelledMilitaryID = (short)reader["ShelledMilitary"];
                try
                {
                    military.Tiredness = (int)reader["Tiredness"];
                }
                catch
                {
                }
                if (military.Kind != null)
                {
                    this.Militaries.AddMilitary(military);
                }
            }
            this.InitializeMilitaryData();
            DbConnection.Close();

            DbConnection.Open();
            reader = new OleDbCommand("Select * From Facility", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Facility facility = new Facility();
                facility.Scenario = this;
                facility.ID = (short)reader["ID"];
                facility.KindID = (short)reader["KindID"];
                facility.Endurance = (int)reader["Endurance"];
                this.Facilities.AddFacility(facility);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Information", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Information information = new Information();
                information.Scenario = this;
                information.ID = (short)reader["ID"];
                information.Level = (InformationLevel)((short)reader["iLevel"]);
                information.Position = new Point((short)reader["PositionX"], (short)reader["PositionY"]);
                information.Radius = (short)reader["Radius"];
                information.Oblique = (bool)reader["Oblique"];
                try
                {
                    information.DayCost = (int)reader["DayCost"];
                    information.DaysLeft = (int)reader["DaysLeft"];
                    information.DaysStarted = (int)reader["DaysStarted"];
                    this.Informations.AddInformation(information);
                }
                catch
                {
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From SpyMessage", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                SpyMessage message = new SpyMessage();
                message.Scenario = this;
                message.ID = (int)reader["ID"];
                message.Kind = (SpyMessageKind)((short)reader["Kind"]);
                message.MessageFactionID = (short)reader["MessageFaction"];
                message.MessageArchitectureID = (short)reader["MessageArchitecture"];
                message.LoadPersonPacksFromString(this.AllPersons, reader["PersonPacks"].ToString());
                message.Message1 = reader["Message1"].ToString();
                message.Message2 = reader["Message2"].ToString();
                message.Message3 = reader["Message3"].ToString();
                message.Message4 = reader["Message4"].ToString();
                message.Message5 = reader["Message5"].ToString();
                this.SpyMessages.AddMessageWithEvent(message);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Architecture", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Architecture architecture = new Architecture();
                architecture.Scenario = this;
                architecture.ID = (short)reader["ID"];
                try
                {
                    architecture.CaptionID = (short)reader["CaptionID"];
                }
                catch
                {
                    architecture.CaptionID = 9999;

                }
                architecture.Name = reader["Name"].ToString();
                architecture.Kind = this.GameCommonData.AllArchitectureKinds.GetArchitectureKind((short)reader["Kind"]);
                architecture.IsStrategicCenter = (bool)reader["IsStrategicCenter"];
                architecture.LocationState = this.States.GetGameObject((short)reader["StateID"]) as State;
                architecture.LocationState.Architectures.Add(architecture);
                architecture.LocationState.LinkedRegion.Architectures.Add(architecture);
                if (architecture.LocationState.StateAdminID == architecture.ID)
                {
                    architecture.LocationState.StateAdmin = architecture;
                }
                if (architecture.LocationState.LinkedRegion.RegionCoreID == architecture.ID)
                {
                    architecture.LocationState.LinkedRegion.RegionCore = architecture;
                }
                architecture.Characteristics.LoadFromString(this.GameCommonData.AllInfluences, reader["Characteristics"].ToString());
                architecture.LoadFromString(architecture.ArchitectureArea, reader["Area"].ToString());
                architecture.LoadPersonsFromString(this.AllPersons, reader["Persons"].ToString());
                architecture.LoadMovingPersonsFromString(this.AllPersons, reader["MovingPersons"].ToString());
                architecture.LoadNoFactionPersonsFromString(this.AllPersons, reader["NoFactionPersons"].ToString());
                architecture.LoadNoFactionMovingPersonsFromString(this.AllPersons, reader["NoFactionMovingPersons"].ToString());
                architecture.LoadfeiziPersonsFromString(this.AllPersons, reader["feiziliebiao"].ToString());
                architecture.Population = (int)reader["Population"];
                architecture.Fund = (int)reader["Fund"];
                architecture.Food = (int)reader["Food"];
                architecture.Agriculture = (int)reader["Agriculture"];
                architecture.Commerce = (int)reader["Commerce"];
                architecture.Technology = (int)reader["Technology"];
                architecture.Domination = (int)reader["Domination"];
                architecture.Morale = (int)reader["Morale"];
                architecture.Endurance = (int)reader["Endurance"];
                architecture.AutoHiring = (bool)reader["AutoHiring"];
                architecture.AutoRewarding = (bool)reader["AutoRewarding"];
                architecture.AutoWorking = (bool)reader["AutoWorking"];
                architecture.AutoSearching = (bool)reader["AutoSearching"];
                architecture.HireFinished = (bool)reader["HireFinished"];
                architecture.FacilityEnabled = (bool)reader["FacilityEnabled"];

                try
                {
                    architecture.MilitaryPopulation = (int)reader["MilitaryPopulation"];
                }
                catch
                {
                }

                architecture.LoadMilitariesFromString(this.Militaries, reader["Militaries"].ToString());
                architecture.LoadFacilitiesFromString(this.Facilities, reader["Facilities"].ToString());
                architecture.BuildingFacility = (int)reader["BuildingFacility"];
                architecture.BuildingDaysLeft = (int)reader["BuildingDaysLeft"];
                architecture.PlanFacilityKindID = (int)reader["PlanFacilityKind"];
                architecture.LoadFundPacksFromString(reader["FundPacks"].ToString());
                architecture.LoadSpyPacksFromString(reader["SpyPacks"].ToString());
                architecture.TodayNewMilitarySpyMessage = this.SpyMessages.GetGameObject((short)reader["TodayNewMilitarySpyMessage"]) as SpyMessage;
                architecture.TodayNewTroopSpyMessage = this.SpyMessages.GetGameObject((short)reader["TodayNewTroopSpyMessage"]) as SpyMessage;
                architecture.LoadPopulationPacksFromString(reader["PopulationPacks"].ToString());
                architecture.PlanArchitectureID = (int)reader["PlanArchitecture"];
                architecture.TransferFundArchitectureID = (int)reader["TransferFundArchitecture"];
                architecture.TransferFoodArchitectureID = (int)reader["TransferFoodArchitecture"];
                architecture.DefensiveLegionID = (int)reader["DefensiveLegion"];
                architecture.LoadCaptivesFromString(this.Captives, reader["Captives"].ToString());
                architecture.RobberTroopID = (short)reader["RobberTroop"];
                architecture.RecentlyAttacked = (short)reader["RecentlyAttacked"];
                architecture.RecentlyBreaked = (short)reader["RecentlyBreaked"];
                architecture.AILandLinksString = reader["AILandLinks"].ToString();
                architecture.AIWaterLinksString = reader["AIWaterLinks"].ToString();

                try
                {
                    architecture.youzainan = (bool)reader["youzainan"];
                    architecture.zainan.zainanzhonglei = this.GameCommonData.suoyouzainanzhonglei.Getzainanzhonglei((short)reader["zainanleixing"]);
                    architecture.zainan.shengyutianshu = (short)reader["zainanshengyutianshu"];
                }
                catch
                {
                    architecture.youzainan = false;

                }
                try
                {
                    architecture.huangdisuozai = (bool)reader["Emperor"];
                }
                catch
                {
                    architecture.huangdisuozai = false;

                }

                try
                {

                    architecture.LoadInformationsFromString(this.Informations, (string)reader["Informations"]);
                }
                catch
                {
                }

                this.Architectures.AddArchitectureWithEvent(architecture);
                this.AllArchitectures.Add(architecture.ID, architecture);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Routeway", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Routeway routeway = new Routeway();
                routeway.Scenario = this;
                routeway.ID = (short)reader["ID"];
                routeway.Building = (bool)reader["Building"];
                routeway.ShowArea = (bool)reader["ShowArea"];
                routeway.RemoveAfterClose = (bool)reader["RemoveAfterClose"];
                routeway.LastActivePointIndex = (int)reader["LastActivePointIndex"];
                routeway.InefficiencyDays = (int)reader["InefficiencyDays"];
                routeway.StartArchitecture = this.Architectures.GetGameObject((int)reader["StartArchitecture"]) as Architecture;
                if (routeway.StartArchitecture != null)
                {
                    routeway.StartArchitecture.Routeways.Add(routeway);
                }
                routeway.EndArchitecture = this.Architectures.GetGameObject((int)reader["EndArchitecture"]) as Architecture;
                routeway.DestinationArchitecture = this.Architectures.GetGameObject((int)reader["DestinationArchitecture"]) as Architecture;
                routeway.LoadRoutePointsFromString(reader["Points"].ToString());
                this.Routeways.AddRoutewayWithEvent(routeway);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Troop", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Troop troop = new Troop();
                troop.Scenario = this;
                troop.ID = (short)reader["ID"];
                troop.Controllable = (bool)reader["Controllable"];
                troop.SetStatus((TroopStatus)((short)reader["Status"]));
                troop.Direction = (TroopDirection)((short)reader["Direction"]);
                troop.Auto = (bool)reader["Auto"];
                troop.Operated = (bool)reader["Operated"];
                troop.Food = (int)reader["Food"];
                troop.zijin = (int)reader["zijin"];
                troop.StartingArchitecture = this.Architectures.GetGameObject((short)reader["StartingArchitecture"]) as Architecture;
                troop.LoadPersonsFromString(this.AllPersons, reader["Persons"].ToString(), (short)reader["LeaderID"]);
                troop.LoadPathInformation((short)reader["PositionX"], (short)reader["PositionY"], (short)reader["DestinationX"], (short)reader["DestinationY"], (short)reader["RealDestinationX"], (short)reader["RealDestinationY"], reader["FirstTierPath"].ToString(), reader["SecondTierPath"].ToString(), reader["ThirdTierPath"].ToString(), (short)reader["FirstIndex"], (short)reader["SecondIndex"], (short)reader["ThirdIndex"]);
                troop.MilitaryID = (short)reader["MilitaryID"];
                troop.AttackDefaultKind = (TroopAttackDefaultKind)((short)reader["AttackDefaultKind"]);
                troop.AttackTargetKind = (TroopAttackTargetKind)((short)reader["AttackTargetKind"]);
                troop.TargetTroopID = (short)reader["TargetTroopID"];
                troop.TargetArchitectureID = (short)reader["TargetArchitectureID"];
                troop.WillTroopID = (short)reader["WillTroopID"];
                troop.WillArchitectureID = (short)reader["WillArchitectureID"];
                troop.CurrentCombatMethodID = (short)reader["CurrentCombatMethodID"];
                troop.CurrentStratagemID = (short)reader["CurrentStratagemID"];
                troop.SelfCastPosition = new Point((short)reader["SelfCastPositionX"], (short)reader["SelfCastPositionY"]);
                troop.ChaosDayLeft = (short)reader["ChaosDayLeft"];
                troop.CutRoutewayDays = (short)reader["CutRoutewayDays"];
                troop.LoadCaptivesFromString(this.Captives, reader["Captives"].ToString());
                troop.RecentlyFighting = (short)reader["RecentlyFighting"];
                troop.TechnologyIncrement = (short)reader["TechnologyIncrement"];
                troop.EventInfluences.LoadFromString(this.GameCommonData.AllInfluences, reader["EventInfluences"].ToString());
                try
                {
                    troop.CurrentStunt = this.GameCommonData.AllStunts.GetStunt((short)reader["CurrentStunt"]);
                    troop.StuntDayLeft = (short)reader["StuntDayLeft"];
                }
                catch
                {
                }
                try
                {
                    troop.mingling = reader["mingling"].ToString();
                }
                catch
                {
                }
                try
                {
                    troop.ManualControl = (bool)reader["ManualControl"];
                }
                catch
                {
                }
                troop.minglingweizhi = troop.RealDestination;
                if (troop.Army != null)
                {
                    this.Troops.AddTroopWithEvent(troop);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Legion", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Legion legion = new Legion();
                legion.Scenario = this;
                legion.ID = int.Parse(reader["ID"].ToString());
                legion.Kind = (LegionKind)((short)reader["Kind"]);
                legion.StartArchitecture = this.Architectures.GetGameObject((int)reader["StartArchitecture"]) as Architecture;
                legion.WillArchitecture = this.Architectures.GetGameObject((int)reader["WillArchitecture"]) as Architecture;
                legion.PreferredRouteway = this.Routeways.GetGameObject((int)reader["PreferredRouteway"]) as Routeway;
                legion.InformationDestination = StaticMethods.LoadFromString(reader["InformationDestination"].ToString());
                legion.CoreTroop = this.Troops.GetGameObject((int)reader["CoreTroop"]) as Troop;
                legion.LoadTroopsFromString(this.Troops, reader["Troops"].ToString());
                this.Legions.AddLegionWithEvent(legion);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Sections", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Section section = new Section();
                section.Scenario = this;
                section.ID = int.Parse(reader["ID"].ToString());
                section.Name = reader["Name"].ToString();
                section.AIDetail = this.GameCommonData.AllSectionAIDetails.GetSectionAIDetail((short)reader["AIDetail"]);
                section.OrientationFactionID = (short)reader["OrientationFaction"];
                section.OrientationSectionID = (short)reader["OrientationSection"];
                section.OrientationStateID = (short)reader["OrientationState"];
                try
                {
                    section.OrientationArchitectureID = (short)reader["OrientationArchitecture"];
                }
                catch
                {
                }
                section.LoadArchitecturesFromString(this.Architectures, reader["Architectures"].ToString());
                this.Sections.AddSectionWithEvent(section);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Faction", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Faction faction = new Faction();
                faction.Scenario = this;
                faction.ID = (short)reader["ID"];
                faction.Passed = (bool)reader["Passed"];
                faction.PreUserControlFinished = (bool)reader["PreUserControlFinished"];
                faction.Controlling = (bool)reader["Controlling"];
                faction.LeaderID = (short)reader["LeaderID"];
                faction.ColorIndex = (short)reader["ColorIndex"];
                faction.FactionColor = this.GameCommonData.AllColors[faction.ColorIndex];
                faction.Name = reader["FName"].ToString();
                faction.CapitalID = (short)reader["CapitalID"];
                faction.Reputation = (int)reader["Reputation"];
                faction.TechniquePoint = (int)reader["TechniquePoint"];
                faction.TechniquePointForTechnique = (int)reader["TechniquePointForTechnique"];
                faction.TechniquePointForFacility = (int)reader["TechniquePointForFacility"];
                faction.LoadArchitecturesFromString(this.Architectures, reader["Architectures"].ToString());
                faction.LoadTroopsFromString(this.Troops, reader["Troops"].ToString());
                faction.LoadInformationsFromString(this.Informations, reader["Informations"].ToString());
                faction.LoadRoutewaysFromString(this.Routeways, reader["Routeways"].ToString());
                faction.LoadLegionsFromString(this.Legions, reader["Legions"].ToString());
                faction.LoadSectionsFromString(this.Sections, reader["Sections"].ToString());
                faction.BaseMilitaryKinds.LoadFromString(this.GameCommonData.AllMilitaryKinds, reader["BaseMilitaryKinds"].ToString());
                faction.UpgradingTechnique = (short)reader["UpgradingTechnique"];
                faction.UpgradingDaysLeft = (short)reader["UpgradingDaysLeft"];
                faction.AvailableTechniques.LoadFromString(this.GameCommonData.AllTechniques, reader["AvailableTechniques"].ToString());
                StaticMethods.LoadFromString(faction.PreferredTechniqueKinds, reader["PreferredTechniqueKinds"].ToString());
                faction.PlanTechnique = this.GameCommonData.AllTechniques.GetTechnique((short)reader["PlanTechnique"]);
                faction.AutoRefuse = (bool)reader["AutoRefuse"];
                try
                {
                    faction.chaotinggongxiandu = (int)reader["chaotinggongxiandu"];
                }
                catch
                {
                    faction.chaotinggongxiandu = 0;

                }
                try
                {
                    faction.guanjue = (short)reader["guanjue"];
                }
                catch
                {
                    faction.guanjue = 0;

                }
                try
                {
                    faction.IsAlien = (bool)reader["IsAlien"];
                }
                catch
                {
                    faction.IsAlien = false;
                }
                if (faction.AvailableMilitaryKinds.GetMilitaryKindList().Count == 0)
                {
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(0));
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(1));
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(2));
                }
                this.Factions.AddFactionWithEvent(faction);
            }
            DbConnection.Close();
            DbConnection.Open();
            try
            {
                reader = new OleDbCommand("Select * From Treasure", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    Treasure treasure = new Treasure();
                    treasure.Scenario = this;
                    treasure.ID = (short)reader["ID"];
                    treasure.Name = reader["Name"].ToString();
                    treasure.Description = reader["Description"].ToString();
                    treasure.Pic = (short)reader["Pic"];
                    treasure.Worth = (short)reader["Worth"];
                    treasure.Available = (bool)reader["Available"];
                    treasure.AppearYear = (short)reader["AppearYear"];
                    try
                    {
                        treasure.TreasureGroup = (short)reader["TreasureGroup"];
                    }
                    catch
                    {
                        treasure.TreasureGroup = treasure.ID;
                    }
                    int key = (short)reader["HidePlace"];
                    treasure.HidePlace = this.AllArchitectures.ContainsKey(key) ? this.AllArchitectures[key] : null;
                    int num2 = (short)reader["BelongedPerson"];
                    treasure.BelongedPerson = this.AllPersons.ContainsKey(num2) ? this.AllPersons[num2] : null;
                    if (treasure.BelongedPerson != null)
                    {
                        treasure.BelongedPerson.Treasures.Add(treasure);
                    }
                    treasure.Influences.LoadFromString(this.GameCommonData.AllInfluences, reader["Influences"].ToString());
                    this.Treasures.AddTreasure(treasure);
                }
            }
            catch
            {
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From DiplomaticRelation", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                DiplomaticRelation dr = new DiplomaticRelation();
                dr.Scenario = this;
                dr.RelationFaction1ID = (short)reader["Faction1ID"];
                dr.RelationFaction2ID = (short)reader["Faction2ID"];
                dr.Relation = (int)reader["Relation"];
                try
                {
                    dr.Truce = (int)reader["Truce"];
                }
                catch
                {
                }
                this.DiplomaticRelations.AddDiplomaticRelation(dr);
            }
            DbConnection.Close();
            command = new OleDbCommand("Select * From GameSurvey", DbConnection);
            DbConnection.Open();
            reader = command.ExecuteReader();
            reader.Read();
            this.ScenarioTitle = reader["Title"].ToString();
            this.ScenarioDescription = reader["Description"].ToString();
            this.Date.LoadDateData((short)reader["GYear"], (short)reader["GMonth"], (short)reader["GDay"]);
            this.ScenarioMap.JumpPosition = StaticMethods.LoadFromString(reader["JumpPosition"].ToString()).Value;
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From TroopEvent", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                TroopEvent te = new TroopEvent();
                te.Scenario = this;
                te.ID = (short)reader["ID"];
                te.Name = reader["Name"].ToString();
                te.Happened = (bool)reader["Happened"];
                te.Repeatable = (bool)reader["Repeatable"];
                try
                {
                    te.AfterEventHappened = (short)reader["AfterEventHappened"];
                }
                catch
                {
                }
                te.LaunchPerson = this.Persons.GetGameObject((short)reader["LaunchPerson"]) as Person;
                te.Conditions.LoadFromString(this.GameCommonData.AllConditions, reader["Conditions"].ToString());
                te.HappenChance = (short)reader["Chance"];
                te.CheckArea = (EventCheckAreaKind)((short)reader["CheckAreaKind"]);
                te.LoadTargetPersonFromString(this.AllPersons, reader["TargetPersons"].ToString());
                te.LoadDialogFromString(this.AllPersons, reader["Dialogs"].ToString());
                te.LoadSelfEffectFromString(this.GameCommonData.AllTroopEventEffects, reader["EffectSelf"].ToString());
                te.LoadEffectPersonFromString(this.AllPersons, this.GameCommonData.AllTroopEventEffects, reader["EffectPersons"].ToString());
                te.LoadEffectAreaFromString(this.GameCommonData.AllTroopEventEffects, reader["EffectAreas"].ToString());
                this.TroopEvents.AddTroopEventWithEvent(te);
            }
            DbConnection.Close();
            try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From Event", DbConnection).ExecuteReader();

                while (reader.Read())
                {
                    try
                    {
                        Event e = new Event();
                        e.Scenario = this;
                        e.ID = (short)reader["ID"];
                        e.Name = reader["Name"].ToString();
                        e.repeatable = (bool)reader["Repeatable"];
                        e.AfterEventHappened = (short)reader["AfterEventHappened"];
                        e.happenChance = (short)reader["Chance"];
                        e.LoadPersonIdFromString(this.Persons, reader["PersonId"].ToString());
                        e.LoadPersonCondFromString(this.GameCommonData.AllConditions, reader["PersonCond"].ToString());
                        e.LoadArchitectureFromString(this.Architectures, reader["ArchitectureID"].ToString());
                        e.LoadArchitctureCondFromString(this.GameCommonData.AllConditions, reader["ArchitectureCond"].ToString());
                        e.LoadFactionFromString(this.Factions, reader["FactionID"].ToString());
                        e.LoadFactionCondFromString(this.GameCommonData.AllConditions, reader["FactionCond"].ToString());
                        e.LoadDialogFromString(reader["Dialog"].ToString());
                        e.LoadEffectFromString(this.GameCommonData.AllEventEffects, reader["Effect"].ToString());
                        e.LoadArchitectureEffectFromString(this.GameCommonData.AllEventEffects, reader["ArchitectureEffect"].ToString());
                        e.LoadFactionEffectFromString(this.GameCommonData.AllEventEffects, reader["FactionEffect"].ToString());
                        this.AllEvents.AddEventWithEvent(e);
                    }
                    catch
                    {
                        //ignore this event
                    }
                }
            }
            catch
            {
                //ignore, let there be empty event list
            }
            finally
            {
                DbConnection.Close();
            }
            try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From YearTable", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    int id = (int)reader["ID"];
                    int year = (short)reader["GYear"];
                    int month = (short)reader["GMonth"];
                    int day = (short)reader["GDay"];
                    FactionList faction = new FactionList();
                    faction.LoadFromString(this.Factions, (string)reader["Faction"]);
                    string content = (string)reader["Content"];
                    bool isGlobal = (bool)reader["IsGloballyKnown"];
                    this.YearTable.addTableEntry(id, new GameDate(year, month, day), faction, content, isGlobal);
                }
            }
            catch
            {
                //ignore, let there be empty yeartable
            }
            finally
            {
                DbConnection.Close();
            }
            /*try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From AAPaths", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    int aid1 = (short)reader["Architecture1"];
                    int aid2 = (short)reader["Architecture2"];
                    if (aid1 == aid2) continue;
                    int kid = (short)reader["MilitaryKind"];
                    Architecture a1 = this.Architectures.GetGameObject(aid1) as Architecture;
                    Architecture a2 = this.Architectures.GetGameObject(aid2) as Architecture;
                    MilitaryKind mk = this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(kid);
                    List<Point> path = new List<Point>();
                    StaticMethods.LoadFromString(path, (string)reader["Path"]);
                    this.pathCache[new PathCacheKey(a1, a2, mk)] = path;
                }
            }
            catch
            {
                //ignore, let there be empty cache
            }
            finally
            {
                DbConnection.Close();
            }*/
            this.AllPersons.Clear();
            this.AllArchitectures.Clear();

            this.alterTransportShipAdaptibility();

            ExtensionInterface.call("Load", new Object[] { this });
        }
Esempio n. 18
0
        //读剧本和读存档都调用了此函数
        private List<string> LoadGameDataFromDataBase(OleDbConnection DbConnection, string connectionString, bool fromScenario)
        {
            List<string> errorMsg = new List<string>();

            String commonConnString = this.GetCommonDataConnectionString();
            OleDbConnection commonConn = new OleDbConnection(commonConnString);

            UsingOwnCommonData = true;

            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadPersonGeneratorSetting(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadPersonGeneratorSetting(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadPersonGeneratorTypes(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadPersonGeneratorTypes(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTerrainDetail(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTerrainDetail(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadColor(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadColor(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadIdealTendencyKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadIdealTendencyKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadCharacterKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadCharacterKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadArchitectureKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadArchitectureKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadSectionAIDetail(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadSectionAIDetail(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadInfluenceKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadInfluenceKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadInfluence(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadInfluence(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadConditionKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadConditionKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadCondition(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadCondition(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopEventEffectKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopEventEffectKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopEventEffect(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopEventEffect(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadEventEffectKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadEventEffectKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadEventEffect(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadEventEffect(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadFacilityKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadFacilityKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadDisasterKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadDisasterKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadOfficeKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadOfficeKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTechnique(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTechnique(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadSkill(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadSkill(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTitleKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTitleKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTitle(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTitle(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadMilitaryKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadMilitaryKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadInformationKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadInformationKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadAttackDefaultKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadAttackDefaultKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadAttackTargetKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadAttackTargetKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadCombatMethodKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadCombatMethodKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadStunt(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadStunt(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadCastDefaultKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadCastDefaultKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadCastTargetKind(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadCastTargetKind(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadStratagem(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadStratagem(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopAnimation(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTroopAnimation(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTileAnimation(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTileAnimation(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadTextMessage(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadTextMessage(commonConn, this));
                UsingOwnCommonData = false;
            }
            try
            {
                errorMsg.AddRange(this.GameCommonData.LoadBiographyAdjectives(DbConnection, this));
            }
            catch
            {
                errorMsg.AddRange(this.GameCommonData.LoadBiographyAdjectives(commonConn, this));
                UsingOwnCommonData = false;
            }

            DbConnection.Close();

            this.LoadSettingsFromDatabase(connectionString);

            ExtensionInterface.loadCompiledTypes();

            this.scenarioJustLoaded = true;
            OleDbDataReader reader;

            OleDbCommand command = new OleDbCommand("Select * From Map", DbConnection);
            ////////////////////////////////////////////////////////////////////////////////////////////
            DbConnection.Open();
            reader = command.ExecuteReader();
            reader.Read();
            this.ScenarioMap.MapName = reader["FileName"].ToString();
            this.ScenarioMap.TileWidth = (short)reader["TileWidth"];
            try
            {
                this.ScenarioMap.NumberOfTiles = (short)reader["kuaishu"];
                this.ScenarioMap.NumberOfSquaresInEachTile = (short)reader["meikuaidexiaokuaishu"];
                this.ScenarioMap.UseSimpleArchImages = (bool)reader["useSimpleArchImages"];
            }
            catch
            {
                this.ScenarioMap.NumberOfTiles = 20;
                this.ScenarioMap.NumberOfSquaresInEachTile = 10;
                this.ScenarioMap.UseSimpleArchImages = false;
            }
            this.ScenarioMap.LoadMapData(reader["MapData"].ToString(), (short)reader["DimensionX"], (short)reader["DimensionY"]);
            DbConnection.Close();
            ///////////////////////////////////////////////////////////////////////////////////////////
            DbConnection.Open();
            reader = new OleDbCommand("Select * From State", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                State t = new State();
                t.ID = (short)reader["ID"];
                t.Name = reader["Name"].ToString();
                t.ContactStatesString = reader["ContactStates"].ToString();
                t.StateAdminID = (short)reader["StateAdmin"];
                this.States.Add(t);
            }
            DbConnection.Close();
            foreach (State state in this.States)
            {
                List<string> e = state.LoadContactStatesFromString(this.States, state.ContactStatesString);
                if (e.Count > 0)
                {
                    errorMsg.Add("州域ID" + state.ID + ":");
                    errorMsg.AddRange(e);
                }
            }
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Region", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Region region = new Region();
                region.ID = (short)reader["ID"];
                region.Name = reader["Name"].ToString();
                List<string> e = region.LoadStatesFromString(this.States, reader["States"].ToString());
                if (e.Count > 0)
                {
                    errorMsg.Add("地区ID" + region.ID + ":");
                    errorMsg.AddRange(e);
                }
                region.RegionCoreID = (short)reader["RegionCore"];
                this.Regions.Add(region);
            }
            DbConnection.Close();
            DbConnection.Open();
            try
            {
                reader = new OleDbCommand("Select * From OngoingBattle", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    OngoingBattle b = new OngoingBattle();
                    b.Scenario = this;
                    b.ID = (int)reader["ID"];
                    b.StartDay = (short)reader["StartDay"];
                    b.StartMonth = (short)reader["StartMonth"];
                    b.StartYear = (int)reader["StartYear"];
                    b.CalmDay = (int)reader["CalmDay"];
                    b.Skirmish = (bool)reader["Skirmish"];
                    AllOngoingBattles.Add(b);
                }
            }
            catch (OleDbException)
            {
                //ignore
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Person", DbConnection).ExecuteReader();
            Dictionary<int, int> fatherIds = new Dictionary<int, int>();
            Dictionary<int, int> motherIds = new Dictionary<int, int>();
            Dictionary<int, int> spouseIds = new Dictionary<int, int>();
            //Dictionary<int, int[]> princeIds = new Dictionary<int, int[]>();
            Dictionary<int, int[]> brotherIds = new Dictionary<int, int[]>();
            Dictionary<int, int[]> closeIds = new Dictionary<int, int[]>();
            Dictionary<int, int[]> hatedIds = new Dictionary<int, int[]>();
            while (reader.Read())
            {
                List<string> errors = new List<string>();

                Person person = new Person();
                person.Scenario = this;
                person.ID = (short)reader["ID"];
                person.Available = (bool)reader["Available"];
                person.Alive = (bool)reader["Alive"];
                person.SurName = reader["SurName"].ToString();
                person.GivenName = reader["GivenName"].ToString();
                person.CalledName = reader["CalledName"].ToString();
                person.Sex = (bool)reader["Sex"];
                person.PictureIndex = (short)reader["Pic"];
                person.Ideal = (short)reader["Ideal"];
                person.IdealTendency = this.GameCommonData.AllIdealTendencyKinds.GetGameObject((short)reader["IdealTendency"]) as IdealTendencyKind;
                if (person.IdealTendency == null)
                {
                    errors.Add("出仕相性考虑ID" + (short)reader["IdealTendency"] + "不存在");
                }
                person.LeaderPossibility = (bool)reader["LeaderPossibility"];
                person.Character = this.GameCommonData.AllCharacterKinds[(short)reader["PCharacter"]];
                if (person.Character == null)
                {
                    errors.Add("性格ID" + (short)reader["PCharacter"] + "不存在");
                }
                person.YearAvailable = (short)reader["YearAvailable"];
                person.YearBorn = (short)reader["YearBorn"];
                person.YearDead = (short)reader["YearDead"];
                if ((short)reader["DeadReason"] >= Enum.GetNames(typeof(PersonDeadReason)).Length || (short)reader["DeadReason"] < 0)
                {
                    errors.Add("人物死亡原因必须在0至" + Enum.GetNames(typeof(PersonDeadReason)).Length + "之间");
                }
                else
                {
                    person.DeadReason = (PersonDeadReason)((short)reader["DeadReason"]);
                }
                person.BaseStrength = (short)reader["Strength"];
                person.BaseCommand = (short)reader["Command"];
                person.BaseIntelligence = (short)reader["Intelligence"];
                person.BasePolitics = (short)reader["Politics"];
                person.BaseGlamour = (short)reader["Glamour"];
                person.Reputation = (int)reader["Reputation"];
                try
                {
                    errors.AddRange(person.UniqueMilitaryKinds.LoadFromString(this.GameCommonData.AllMilitaryKinds, reader["UniqueMilitaryKinds"].ToString()));
                    errors.AddRange(person.UniqueTitles.LoadFromString(this.GameCommonData.AllTitles, reader["UniqueTitles"].ToString()));
                }
                catch
                {
                }
                person.StrengthExperience = (int)reader["StrengthExperience"];
                person.CommandExperience = (int)reader["CommandExperience"];
                person.IntelligenceExperience = (int)reader["IntelligenceExperience"];
                person.PoliticsExperience = (int)reader["PoliticsExperience"];
                person.GlamourExperience = (int)reader["GlamourExperience"];
                person.InternalExperience = (int)reader["InternalExperience"];
                person.TacticsExperience = (int)reader["TacticsExperience"];
                person.BubingExperience = (int)reader["BubingExperience"];
                person.NubingExperience = (int)reader["NubingExperience"];
                person.QibingExperience = (int)reader["QibingExperience"];
                person.ShuijunExperience = (int)reader["ShuijunExperience"];
                person.QixieExperience = (int)reader["QixieExperience"];
                person.StratagemExperience = (int)reader["StratagemExperience"];
                person.RoutCount = (int)reader["RoutCount"];
                person.RoutedCount = (int)reader["RoutedCount"];
                person.Braveness = (short)reader["Braveness"];
                person.Calmness = (short)reader["Calmness"];
                person.Loyalty = (short)reader["Loyalty"];
                if ((short)reader["DeadReason"] >= Enum.GetNames(typeof(PersonBornRegion)).Length || (short)reader["BornRegion"] < 0)
                {
                    errors.Add("人物出生地点必须在0至" + Enum.GetNames(typeof(PersonBornRegion)).Length + "之间");
                }
                else
                {
                    person.BornRegion = (PersonBornRegion)((short)reader["BornRegion"]);
                }
                person.AvailableLocation = (short)reader["AvailableLocation"];
                person.Strain = (short)reader["Strain"];
                fatherIds[person.ID] = (short)reader["Father"];
                motherIds[person.ID] = (short)reader["Mother"];
                spouseIds[person.ID] = (short)reader["Spouse"];

                String str;
                char[] separator = separator = new char[] { ' ', '\n', '\r', '\t' };
                String[] strArray;
                int[] intArray;
                try
                {
                    str = reader["Brother"].ToString();
                    strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                    intArray = new int[strArray.Length];
                    for (int i = 0; i < strArray.Length; i++)
                    {
                        intArray[i] = int.Parse(strArray[i]);
                    }
                    brotherIds.Add(person.ID, intArray);
                }
                catch
                {
                    errors.Add("义兄弟一栏应为半型空格分隔的人物ID");
                }

                person.Generation = (short)reader["Generation"];
                person.PersonalLoyalty = ((short)reader["PersonalLoyalty"]);
                person.Ambition = ((short)reader["Ambition"]);
                if ((short)reader["Qualification"] >= Enum.GetNames(typeof(PersonQualification)).Length || (short)reader["Qualification"] < 0)
                {
                    errors.Add("人才起用必须在0至" + Enum.GetNames(typeof(PersonQualification)).Length + "之间");
                }
                else
                {
                    person.Qualification = (PersonQualification)((short)reader["Qualification"]);
                }
                if ((short)reader["ValuationOnGovernment"] >= Enum.GetNames(typeof(PersonValuationOnGovernment)).Length || (short)reader["ValuationOnGovernment"] < 0)
                {
                    errors.Add("汉室重视度必须在0至" + Enum.GetNames(typeof(PersonValuationOnGovernment)).Length + "之间");
                }
                else
                {
                    person.ValuationOnGovernment = (PersonValuationOnGovernment)((short)reader["ValuationOnGovernment"]);
                }
                if ((short)reader["StrategyTendency"] >= Enum.GetNames(typeof(PersonStrategyTendency)).Length || (short)reader["StrategyTendency"] < 0)
                {
                    errors.Add("战略取向必须在0至" + Enum.GetNames(typeof(PersonStrategyTendency)).Length + "之间");
                }
                else
                {
                    person.StrategyTendency = (PersonStrategyTendency)((short)reader["StrategyTendency"]);
                }
                try
                {
                    StaticMethods.LoadFromString(person.JoinFactionID, reader["OldFactionID"].ToString());
                }
                catch
                {
                    errors.Add("出仕势力为半型空隔的势力ID");
                }
                try
                {
                    StaticMethods.LoadFromString(person.ProhibitedFactionID, reader["ProhibitedFactionID"].ToString());
                }
                catch
                {
                    errors.Add("出仕势力为半型空隔,交错为的势力ID及禁止仕官的天数");
                }

                person.RewardFinished = (bool)reader["RewardFinished"];
                if ((short)reader["WorkKind"] >= Enum.GetNames(typeof(ArchitectureWorkKind)).Length || (short)reader["WorkKind"] < 0)
                {
                    errors.Add("工作类型必须在0至" + Enum.GetNames(typeof(ArchitectureWorkKind)).Length + "之间");
                }
                else
                {
                    person.WorkKind = (ArchitectureWorkKind)((short)reader["WorkKind"]);
                }
                if ((short)reader["OldWorkKind"] >= Enum.GetNames(typeof(ArchitectureWorkKind)).Length || (short)reader["OldWorkKind"] < 0)
                {
                    errors.Add("人物旧工作类型必须在0至" + Enum.GetNames(typeof(ArchitectureWorkKind)).Length + "之间");
                }
                else
                {
                    person.OldWorkKind = (ArchitectureWorkKind)((short)reader["OldWorkKind"]);
                }
                person.RecruitmentMilitary = null;
                person.ArrivingDays = (short)reader["ArrivingDays"];
                person.TaskDays = (short)reader["TaskDays"];
                if ((short)reader["OutsideTask"] >= Enum.GetNames(typeof(OutsideTaskKind)).Length || (short)reader["OutsideTask"] < 0)
                {
                    errors.Add("人物在外工作在0至" + Enum.GetNames(typeof(OutsideTaskKind)).Length + "之间");
                }
                else
                {
                    person.OutsideTask = (OutsideTaskKind)((short)reader["OutsideTask"]);
                }
                person.OutsideDestination = StaticMethods.LoadFromString(reader["OutsideDestination"].ToString());
                person.ConvincingPersonID = (short)reader["ConvincingPerson"];
                person.InformationKindID = (short)reader["InformationKind"];

                try
                {
                    str = reader["ClosePersons"].ToString();
                    strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                    intArray = new int[strArray.Length];
                    for (int i = 0; i < strArray.Length; i++)
                    {
                        intArray[i] = int.Parse(strArray[i]);
                    }
                    closeIds.Add(person.ID, intArray);
                }
                catch
                {
                    errors.Add("亲爱武将一栏应为半型空格分隔的人物ID");
                }

                try
                {
                    str = reader["HatedPersons"].ToString();
                    strArray = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                    intArray = new int[strArray.Length];
                    for (int i = 0; i < strArray.Length; i++)
                    {
                        intArray[i] = int.Parse(strArray[i]);
                    }
                    hatedIds.Add(person.ID, intArray);
                }
                catch
                {
                    errors.Add("厌恶武将一栏应为半型空格分隔的人物ID");
                }

                person.Skills.LoadFromString(this.GameCommonData.AllSkills, reader["Skills"].ToString());

                try
                {
                    errors.AddRange(person.LoadTitleFromString(reader["Title"].ToString(), this.GameCommonData.AllTitles));
                }
                catch
                {
                    Title t = this.GameCommonData.AllTitles.GetTitle((short)reader["PersonalTitle"]);
                    if (t != null)
                    {
                        person.RealTitles.Add(t);
                    }
                    t = this.GameCommonData.AllTitles.GetTitle((short)reader["CombatTitle"]);
                    if (t != null)
                    {
                        person.RealTitles.Add(t);
                    }
                }

                person.StudyingTitle = this.GameCommonData.AllTitles.GetTitle((short)reader["StudyingTitle"]);
                person.huaiyun = (bool)reader["huaiyun"];
                person.faxianhuaiyun = (bool)reader["faxianhuaiyun"];
                person.huaiyuntianshu = short.Parse(reader["huaiyuntianshu"].ToString());

                try
                {
                    person.suoshurenwu = (short)reader["suoshurenwu"];
                }
                catch
                {

                }

                try
                {
                    person.Stunts.LoadFromString(this.GameCommonData.AllStunts, reader["Stunts"].ToString());
                    person.StudyingStunt = this.GameCommonData.AllStunts.GetStunt((short)reader["StudyingStunt"]);
                }
                catch
                {
                }

                try
                {
                    person.waitForFeiziId = int.Parse(reader["WaitForFeizi"].ToString());
                    person.WaitForFeiZiPeriod = (int)reader["WaitForFeiziPeriod"];
                }
                catch (Exception ex)
                {
                    person.waitForFeiziId = -1;
                    person.WaitForFeiZiPeriod = 0;
                }

                try
                {
                    person.preferredTroopPersonsString = reader["PreferredTroopPersons"].ToString();
                }
                catch (Exception ex)
                {
                    person.preferredTroopPersonsString = "";
                }

                try
                {
                    person.YearJoin = (short)reader["YearJoin"];
                    person.TroopDamageDealt = (int)reader["TroopDamageDealt"];
                    person.TroopBeDamageDealt = (int)reader["TroopBeDamageDealt"];
                    person.ArchitectureDamageDealt = (int)reader["ArchitectureDamageDealt"];
                    person.RebelCount = (short)reader["RebelCount"];
                    person.ExecuteCount = (short)reader["ExecuteCount"];
                    person.FleeCount = (short)reader["FleeCount"];
                    person.HeldCaptiveCount = (short)reader["HeldCaptiveCount"];
                    person.CaptiveCount = (short)reader["CaptiveCount"];
                    person.StratagemSuccessCount = (int)reader["StratagemSuccessCount"];
                    person.StratagemFailCount = (int)reader["StratagemFailCount"];
                    person.StratagemBeSuccessCount = (int)reader["StratagemBeSuccessCount"];
                    person.StratagemBeFailCount = (int)reader["StratagemBeFailCount"];
                }
                catch
                {
                    // all zeroes.
                }
                try
                {
                    person.Tiredness = (int)reader["Tiredness"];
                }
                catch
                {
                }
                try
                {
                    person.OfficerKillCount = (int)reader["OfficerKillCount"];
                }
                catch
                {
                }
                try
                {
                    person.InjureRate = (float)reader["InjureRate"];
                }
                catch
                {
                    person.InjureRate = 1;
                }
                try
                {
                    person.Battle = (OngoingBattle)this.AllOngoingBattles.GetGameObject((int)reader["Battle"]);
                    person.BattleSelfDamage = (int)reader["BattleSelfDamage"];
                }
                catch
                {
                }

                if (errors.Count > 0)
                {
                    errorMsg.Add("人物ID" + person.ID + ":");
                    errorMsg.AddRange(errors);
                }

                this.Persons.AddPersonWithEvent(person);  //所有武将,并加载武将事件
                this.AllPersons.Add(person.ID, person);   //武将字典
                if (person.Available && person.Alive)
                {
                    this.AvailablePersons.Add(person);  //已出场武将
                }
            }
            DbConnection.Close();
            foreach (Person p in this.Persons)
            {
                p.WaitForFeiZi = this.Persons.GetGameObject(p.waitForFeiziId) as Person;
                List<string> e = p.preferredTroopPersons.LoadFromString(this.Persons, p.preferredTroopPersonsString);
                if (e.Count > 0)
                {
                    errorMsg.Add("人物ID" + p.ID + ":副将一栏:");
                    errorMsg.AddRange(e);
                }
            }
            foreach (KeyValuePair<int, int> i in fatherIds)
            {
                (this.Persons.GetGameObject(i.Key) as Person).Father = this.Persons.GetGameObject(i.Value) as Person;
            }
            foreach (KeyValuePair<int, int> i in motherIds)
            {
                (this.Persons.GetGameObject(i.Key) as Person).Mother = this.Persons.GetGameObject(i.Value) as Person;
            }
            foreach (KeyValuePair<int, int> i in spouseIds)
            {
                Person p = (this.Persons.GetGameObject(i.Key) as Person);
                Person q = this.Persons.GetGameObject(i.Value) as Person;
                p.Spouse = q;
                if (q != null && fromScenario)
                {
                    p.EnsureRelationAtLeast(q, Parameters.VeryCloseThreshold);
                }
            }
            foreach (KeyValuePair<int, int[]> i in brotherIds)
            {
                if (i.Value.Length == 1 && i.Value[0] != -1)
                {
                    foreach (KeyValuePair<int, int[]> j in brotherIds)
                    {
                        if (j.Value.Length > 0 && i.Value[0] == j.Value[0])
                        {
                            Person p = this.Persons.GetGameObject(i.Key) as Person;
                            Person q = this.Persons.GetGameObject(j.Key) as Person;
                            p.Brothers.Add(q);
                            if (q != null && fromScenario)
                            {
                                p.EnsureRelationAtLeast(q, Parameters.VeryCloseThreshold);
                            }
                        }
                    }
                }
                else
                {
                    Person p = this.Persons.GetGameObject(i.Key) as Person;
                    foreach (int j in i.Value)
                    {
                        Person q = this.Persons.GetGameObject(j) as Person;
                        if (q != null)
                        {
                            p.Brothers.Add(q);
                            if (q != null && fromScenario)
                            {
                                p.EnsureRelationAtLeast(q, Parameters.VeryCloseThreshold);
                            }
                        }
                        else
                        {
                            errorMsg.Add("人物ID" + p.ID + ":义兄弟ID" + j + "不存在");
                        }
                    }
                }
            }
            foreach (KeyValuePair<int, int[]> i in closeIds)
            {
                Person p = this.Persons.GetGameObject(i.Key) as Person;
                foreach (int j in i.Value)
                {
                    Person q = this.Persons.GetGameObject(j) as Person;
                    if (q != null)
                    {
                        p.AddClose(q);
                    }
                    else
                    {
                        errorMsg.Add("人物ID" + p.ID + ":亲爱武将ID" + j + "不存在");
                    }
                }
            }
            foreach (KeyValuePair<int, int[]> i in hatedIds)
            {
                Person p = this.Persons.GetGameObject(i.Key) as Person;
                foreach (int j in i.Value)
                {
                    Person q = this.Persons.GetGameObject(j) as Person;
                    if (q != null)
                    {
                        p.AddHated(q);
                    }
                    else
                    {
                        errorMsg.Add("人物ID" + p.ID + ":厌恶武将ID" + j + "不存在");
                    }
                }
            }

            try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From Biography", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    Biography biography = new Biography();
                    biography.Scenario = this;
                    int id = (short)reader["ID"];
                    Person p = (Person)this.Persons.GetGameObject(id);
                    if (p != null)
                    {
                        biography.ID = id;
                        biography.Brief = reader["Brief"].ToString();
                        biography.Romance = reader["Romance"].ToString();
                        biography.History = reader["History"].ToString();
                        try
                        {
                            biography.InGame = reader["InGame"].ToString();
                        }
                        catch
                        {
                            biography.InGame = "";
                        }
                        biography.FactionColor = (short)reader["FactionColor"];
                        List<string> e = biography.MilitaryKinds.LoadFromString(this.GameCommonData.AllMilitaryKinds, reader["MilitaryKinds"].ToString());
                        if (e.Count > 0)
                        {
                            errorMsg.Add("列传人物ID" + biography.ID + ":");
                            errorMsg.AddRange(e);
                        }
                        if (biography.MilitaryKinds.MilitaryKinds.Count == 0)
                        {
                            errorMsg.Add("列传人物ID" + biography.ID + ":没有基本兵种。");
                        }
                        this.AllBiographies.AddBiography(biography);
                        p.PersonBiography = biography;
                    }
                }
                DbConnection.Close();
            }
            catch (Exception ex)
            {
            }

            foreach (Person p in this.Persons)
            {
                if (p.PersonBiography == null)
                {
                    p.PersonBiography = new Biography();
                    p.PersonBiography.FactionColor = 52;
                    p.PersonBiography.MilitaryKinds.AddBasicMilitaryKinds(this);
                    p.PersonBiography.Brief = "";
                    p.PersonBiography.History = "";
                    p.PersonBiography.Romance = "";
                    p.PersonBiography.InGame = "";
                    p.PersonBiography.ID = p.ID;
                    this.AllBiographies.AddBiography(p.PersonBiography);
                }
            }

            DbConnection.Open();
            try
            {
                reader = new OleDbCommand("Select * From PersonRelation", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    Person person1 = this.Persons.GetGameObject((short)reader["Person1"]) as Person;
                    Person person2 = this.Persons.GetGameObject((short)reader["Person2"]) as Person;
                    int relation = (int)reader["Relation"];
                    if (person1 == null)
                    {
                        errorMsg.Add("人物关系:武将ID" + (short)reader["Person1"] + "不存在");
                    }
                    if (person2 == null)
                    {
                        errorMsg.Add("人物关系:武将ID" + (short)reader["Person2"] + "不存在");
                    }
                    if (person1 != null && person2 != null)
                    {
                        person1.SetRelation(person2, relation);
                    }
                }
            }
            catch (OleDbException)
            {
                //ignore
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Captive", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Captive captive = new Captive();
                captive.Scenario = this;
                captive.ID = (short)reader["ID"];
                captive.CaptivePerson = this.Persons.GetGameObject((short)reader["CaptivePerson"]) as Person;
                if (captive.CaptivePerson == null)
                {
                    errorMsg.Add("俘虏ID" + captive.ID + ":武将ID" + (short)reader["CaptivePerson"] + "不存在");
                    continue;
                }
                else
                {
                    captive.CaptivePerson.SetBelongedCaptive(captive, PersonStatus.Captive);
                }
                captive.CaptiveFactionID = (short)reader["CaptiveFaction"];
                captive.RansomArchitectureID = (short)reader["RansomArchitecture"];
                captive.RansomFund = (int)reader["RansomFund"];
                captive.RansomArriveDays = (int)reader["RansomArriveDays"];
                captive.CaptivePerson.Status = PersonStatus.Captive;
                if (!isInCaptiveList(captive.CaptivePerson.ID))
                {
                    this.Captives.AddCaptiveWithEvent(captive);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Military", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Military military = new Military();
                military.Scenario = this;
                military.ID = (short)reader["ID"];
                military.Name = reader["Name"].ToString();
                military.KindID = (short)reader["KindID"];
                if (this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(military.KindID) == null)
                {
                    errorMsg.Add("编队ID" + military.ID + ":兵种ID" + military.KindID + "不存在");
                    continue;
                }
                military.Quantity = (int)reader["Quantity"];
                military.Morale = (int)reader["Morale"];
                military.Combativity = (int)reader["Combativity"];
                military.Experience = (int)reader["Experience"];
                military.InjuryQuantity = (int)reader["InjuryQuantity"];
                military.FollowedLeaderID = (short)reader["FollowedLeaderID"];
                military.LeaderID = (short)reader["LeaderID"];
                military.LeaderExperience = (int)reader["LeaderExperience"];
                int recruiter = (short)reader["RecruitmentPersonID"];
                foreach (Person p in this.Persons)
                {
                    if (p.ID == recruiter)
                    {
                        //p.RecruitmentMilitary = military;
                        p.RecruitMilitary(military);
                    }
                }
                military.ShelledMilitaryID = (short)reader["ShelledMilitary"];
                try
                {
                    military.Tiredness = (int)reader["Tiredness"];
                }
                catch
                {
                }
                if (military.Kind != null)
                {
                    this.Militaries.AddMilitary(military);
                }
            }
            this.InitializeMilitaryData();
            DbConnection.Close();

            DbConnection.Open();
            reader = new OleDbCommand("Select * From Facility", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Facility facility = new Facility();
                facility.Scenario = this;
                facility.ID = (short)reader["ID"];
                facility.KindID = (short)reader["KindID"];
                if (this.GameCommonData.AllFacilityKinds.GetFacilityKind(facility.KindID) == null)
                {
                    errorMsg.Add("设施ID" + facility.ID + ":设施种类ID" + facility.KindID + "不存在");
                    continue;
                }
                facility.Endurance = (int)reader["Endurance"];
                this.Facilities.AddFacility(facility);
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Information", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Information information = new Information();
                information.Scenario = this;
                information.ID = (short)reader["ID"];
                information.Level = (InformationLevel)((short)reader["iLevel"]);
                information.Position = new Point((short)reader["PositionX"], (short)reader["PositionY"]);
                information.Radius = (short)reader["Radius"];
                information.Oblique = (bool)reader["Oblique"];
                try
                {
                    information.DayCost = (int)reader["DayCost"];
                    information.DaysLeft = (int)reader["DaysLeft"];
                    information.DaysStarted = (int)reader["DaysStarted"];
                    this.Informations.AddInformation(information);
                }
                catch
                {
                }
            }
            DbConnection.Close();
            //DbConnection.Open();
            //reader = new OleDbCommand("Select * From SpyMessage", DbConnection).ExecuteReader();
            //while (reader.Read())
            //{
            //    SpyMessage message = new SpyMessage();
            //    message.Scenario = this;
            //    message.ID = (int)reader["ID"];
            //    message.Kind = (SpyMessageKind)((short)reader["Kind"]);
            //    message.MessageFactionID = (short)reader["MessageFaction"];
            //    message.MessageArchitectureID = (short)reader["MessageArchitecture"];
            //    message.LoadPersonPacksFromString(this.AllPersons, reader["PersonPacks"].ToString());
            //    message.Message1 = reader["Message1"].ToString();
            //    message.Message2 = reader["Message2"].ToString();
            //    message.Message3 = reader["Message3"].ToString();
            //    message.Message4 = reader["Message4"].ToString();
            //    message.Message5 = reader["Message5"].ToString();
            //    this.SpyMessages.AddMessageWithEvent(message);
            //}
            //DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Architecture", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                List<string> e = new List<string>();

                Architecture architecture = new Architecture();
                architecture.Scenario = this;
                architecture.ID = (short)reader["ID"];
                try
                {
                    architecture.CaptionID = (short)reader["CaptionID"];
                }
                catch
                {
                    architecture.CaptionID = 9999;

                }
                architecture.Name = reader["Name"].ToString();
                architecture.Kind = this.GameCommonData.AllArchitectureKinds.GetArchitectureKind((short)reader["Kind"]);
                if (architecture.Kind == null)
                {
                    e.Add("建筑种类ID" + reader["Kind"] + "不存在");
                }
                architecture.IsStrategicCenter = (bool)reader["IsStrategicCenter"];
                architecture.LocationState = this.States.GetGameObject((short)reader["StateID"]) as State;
                if (architecture.LocationState == null)
                {
                    e.Add("州域ID" + reader["Kind"] + "不存在");
                }
                else
                {
                    architecture.LocationState.Architectures.Add(architecture);
                    architecture.LocationState.LinkedRegion.Architectures.Add(architecture);
                    if (architecture.LocationState.StateAdminID == architecture.ID)
                    {
                        architecture.LocationState.StateAdmin = architecture;
                    }
                    if (architecture.LocationState.LinkedRegion.RegionCoreID == architecture.ID)
                    {
                        architecture.LocationState.LinkedRegion.RegionCore = architecture;
                    }
                }
                e.AddRange(architecture.Characteristics.LoadFromString(this.GameCommonData.AllInfluences, reader["Characteristics"].ToString()));
                architecture.LoadFromString(architecture.ArchitectureArea, reader["Area"].ToString());
                e.AddRange(architecture.LoadPersonsFromString(this.AllPersons, reader["Persons"].ToString(), PersonStatus.Normal));
                e.AddRange(architecture.LoadPersonsFromString(this.AllPersons, reader["MovingPersons"].ToString(), PersonStatus.Moving));
                e.AddRange(architecture.LoadPersonsFromString(this.AllPersons, reader["NoFactionPersons"].ToString(), PersonStatus.NoFaction));
                e.AddRange(architecture.LoadPersonsFromString(this.AllPersons, reader["NoFactionMovingPersons"].ToString(), PersonStatus.NoFactionMoving));
                e.AddRange(architecture.LoadPersonsFromString(this.AllPersons, reader["feiziliebiao"].ToString(), PersonStatus.Princess));
                architecture.Population = (int)reader["Population"];
                architecture.Fund = (int)reader["Fund"];
                architecture.Food = (int)reader["Food"];
                architecture.Agriculture = (int)reader["Agriculture"];
                architecture.Commerce = (int)reader["Commerce"];
                architecture.Technology = (int)reader["Technology"];
                architecture.Domination = (int)reader["Domination"];
                architecture.Morale = (int)reader["Morale"];
                architecture.Endurance = (int)reader["Endurance"];
                architecture.AutoHiring = (bool)reader["AutoHiring"];
                architecture.AutoRewarding = (bool)reader["AutoRewarding"];
                architecture.AutoWorking = (bool)reader["AutoWorking"];
                architecture.AutoSearching = (bool)reader["AutoSearching"];

                try
                {
                    architecture.AutoRecruiting = (bool)reader["AutoRecruiting"];
                }
                catch
                {
                }

                architecture.HireFinished = (bool)reader["HireFinished"];
                architecture.FacilityEnabled = (bool)reader["FacilityEnabled"];

                try
                {
                    architecture.MilitaryPopulation = (int)reader["MilitaryPopulation"];
                }
                catch
                {
                }

                e.AddRange(architecture.LoadMilitariesFromString(this.Militaries, reader["Militaries"].ToString()));
                e.AddRange(architecture.LoadFacilitiesFromString(this.Facilities, reader["Facilities"].ToString()));
                architecture.BuildingFacility = (int)reader["BuildingFacility"];
                architecture.BuildingDaysLeft = (int)reader["BuildingDaysLeft"];
                architecture.PlanFacilityKindID = (int)reader["PlanFacilityKind"];
                e.AddRange(architecture.LoadFundPacksFromString(reader["FundPacks"].ToString()));
                try
                {
                    e.AddRange(architecture.LoadFoodPacksFromString(reader["FoodPacks"].ToString()));
                }
                catch { }
                // architecture.LoadSpyPacksFromString(reader["SpyPacks"].ToString());
                // architecture.TodayNewMilitarySpyMessage = this.SpyMessages.GetGameObject((short)reader["TodayNewMilitarySpyMessage"]) as SpyMessage;
                // architecture.TodayNewTroopSpyMessage = this.SpyMessages.GetGameObject((short)reader["TodayNewTroopSpyMessage"]) as SpyMessage;
                e.AddRange(architecture.LoadPopulationPacksFromString(reader["PopulationPacks"].ToString()));
                architecture.PlanArchitectureID = (int)reader["PlanArchitecture"];
                architecture.TransferFundArchitectureID = (int)reader["TransferFundArchitecture"];
                architecture.TransferFoodArchitectureID = (int)reader["TransferFoodArchitecture"];
                architecture.DefensiveLegionID = (int)reader["DefensiveLegion"];
                e.AddRange(architecture.LoadCaptivesFromString(this.Captives, reader["Captives"].ToString()));
                architecture.RobberTroopID = (short)reader["RobberTroop"];
                architecture.RecentlyAttacked = (short)reader["RecentlyAttacked"];
                architecture.RecentlyBreaked = (short)reader["RecentlyBreaked"];
                architecture.AILandLinksString = reader["AILandLinks"].ToString();
                architecture.AIWaterLinksString = reader["AIWaterLinks"].ToString();

                try
                {
                    architecture.youzainan = (bool)reader["youzainan"];
                    architecture.zainan.zainanzhonglei = this.GameCommonData.suoyouzainanzhonglei.Getzainanzhonglei((short)reader["zainanleixing"]);
                    architecture.zainan.shengyutianshu = (short)reader["zainanshengyutianshu"];
                }
                catch
                {
                    architecture.youzainan = false;

                }
                try
                {
                    architecture.huangdisuozai = (bool)reader["Emperor"];
                }
                catch
                {
                    architecture.huangdisuozai = false;

                }

                try
                {
                    e.AddRange(architecture.LoadInformationsFromString(this.Informations, (string)reader["Informations"]));
                }
                catch
                {
                }

                try
                {
                    architecture.SuspendTroopTransfer = (int)reader["SuspendTroopTransfer"];
                }
                catch { };

                try
                {
                    architecture.Battle = (OngoingBattle) this.AllOngoingBattles.GetGameObject((int)reader["Battle"]);
                }
                catch { }

                try
                {
                    architecture.OldFactionName = reader["OldFactionName"].ToString();
                }
                catch { }

                if (e.Count > 0)
                {
                    errorMsg.Add("建筑ID" + architecture.ID + ":");
                    errorMsg.AddRange(e);
                }
                else
                {
                    this.Architectures.AddArchitectureWithEvent(architecture);
                    this.AllArchitectures.Add(architecture.ID, architecture);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Routeway", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                List<string> e = new List<string>();
                Routeway routeway = new Routeway();
                routeway.Scenario = this;
                routeway.ID = (short)reader["ID"];
                routeway.Building = (bool)reader["Building"];
                routeway.ShowArea = (bool)reader["ShowArea"];
                routeway.RemoveAfterClose = (bool)reader["RemoveAfterClose"];
                routeway.LastActivePointIndex = (int)reader["LastActivePointIndex"];
                routeway.InefficiencyDays = (int)reader["InefficiencyDays"];
                routeway.StartArchitecture = this.Architectures.GetGameObject((int)reader["StartArchitecture"]) as Architecture;
                if (routeway.StartArchitecture != null)
                {
                    routeway.StartArchitecture.Routeways.Add(routeway);
                }
                else
                {
                    e.Add("建筑ID" + (int)reader["StartArchitecture"] + "不存在");
                }
                routeway.EndArchitecture = this.Architectures.GetGameObject((int)reader["EndArchitecture"]) as Architecture;
                routeway.DestinationArchitecture = this.Architectures.GetGameObject((int)reader["DestinationArchitecture"]) as Architecture;
                routeway.LoadRoutePointsFromString(reader["Points"].ToString());
                if (e.Count > 0)
                {
                    errorMsg.Add("粮道ID" + routeway.ID + ":");
                    errorMsg.AddRange(e);
                }
                else
                {
                    this.Routeways.AddRoutewayWithEvent(routeway);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Troop", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                List<string> errors = new List<string>();
                Troop troop = new Troop();
                troop.Scenario = this;
                troop.ID = (short)reader["ID"];
                troop.Controllable = (bool)reader["Controllable"];
                if ((short)reader["Status"] >= Enum.GetNames(typeof(TroopStatus)).Length || (short)reader["Status"] < 0)
                {
                    errors.Add("部队状态在0至" + Enum.GetNames(typeof(TroopStatus)).Length + "之间");
                }
                else
                {
                    troop.SetStatus((TroopStatus)((short)reader["Status"]));
                }
                if ((short)reader["Direction"] >= Enum.GetNames(typeof(TroopDirection)).Length || (short)reader["Direction"] < 0)
                {
                    errors.Add("部队方向在0至" + Enum.GetNames(typeof(TroopDirection)).Length + "之间");
                }
                else
                {
                    troop.Direction = (TroopDirection)((short)reader["Direction"]);
                }
                troop.Auto = (bool)reader["Auto"];
                troop.Operated = (bool)reader["Operated"];
                troop.Food = (int)reader["Food"];
                troop.zijin = (int)reader["zijin"];
                troop.StartingArchitecture = this.Architectures.GetGameObject((short)reader["StartingArchitecture"]) as Architecture;
                if (troop.StartingArchitecture == null)
                {
                    errors.Add("起始建筑ID" + (short)reader["StartingArchitecture"] + "不存在");
                }
                errors.AddRange(troop.LoadPersonsFromString(this.AllPersons, reader["Persons"].ToString(), (short)reader["LeaderID"]));
                troop.LoadPathInformation((short)reader["PositionX"], (short)reader["PositionY"], (short)reader["DestinationX"], (short)reader["DestinationY"], (short)reader["RealDestinationX"], (short)reader["RealDestinationY"], reader["FirstTierPath"].ToString(), reader["SecondTierPath"].ToString(), reader["ThirdTierPath"].ToString(), (short)reader["FirstIndex"], (short)reader["SecondIndex"], (short)reader["ThirdIndex"]);
                troop.MilitaryID = (short)reader["MilitaryID"];
                if (this.Militaries.GetGameObject(troop.MilitaryID) == null)
                {
                    errors.Add("编队ID" + troop.MilitaryID + "不存在");
                }
                if ((short)reader["AttackDefaultKind"] >= Enum.GetNames(typeof(TroopAttackTargetKind)).Length || (short)reader["AttackDefaultKind"] < 0)
                {
                    errors.Add("攻击预设模式在0至" + Enum.GetNames(typeof(TroopAttackTargetKind)).Length + "之间");
                }
                else
                {
                    troop.AttackDefaultKind = (TroopAttackDefaultKind)((short)reader["AttackDefaultKind"]);
                }
                if ((short)reader["AttackTargetKind"] >= Enum.GetNames(typeof(TroopAttackTargetKind)).Length || (short)reader["AttackTargetKind"] < 0)
                {
                    errors.Add("攻击目标模式在0至" + Enum.GetNames(typeof(TroopAttackTargetKind)).Length + "之间");
                }
                else
                {
                    troop.AttackTargetKind = (TroopAttackTargetKind)((short)reader["AttackTargetKind"]);
                }
                troop.TargetTroopID = (short)reader["TargetTroopID"];
                troop.TargetArchitectureID = (short)reader["TargetArchitectureID"];
                troop.WillTroopID = (short)reader["WillTroopID"];
                troop.WillArchitectureID = (short)reader["WillArchitectureID"];
                troop.CurrentCombatMethodID = (short)reader["CurrentCombatMethodID"];
                troop.CurrentStratagemID = (short)reader["CurrentStratagemID"];
                troop.SelfCastPosition = new Point((short)reader["SelfCastPositionX"], (short)reader["SelfCastPositionY"]);
                troop.ChaosDayLeft = (short)reader["ChaosDayLeft"];
                try
                {
                    troop.ForceTroopTargetId = (short)reader["ForceTroopTarget"];
                }
                catch
                {
                    troop.ForceTroopTargetId = -1;
                }
                troop.CutRoutewayDays = (short)reader["CutRoutewayDays"];
                errors.AddRange(troop.LoadCaptivesFromString(this.Captives, reader["Captives"].ToString()));
                troop.RecentlyFighting = (short)reader["RecentlyFighting"];
                troop.TechnologyIncrement = (short)reader["TechnologyIncrement"];
                errors.AddRange(troop.EventInfluences.LoadFromString(this.GameCommonData.AllInfluences, reader["EventInfluences"].ToString()));
                try
                {
                    troop.CurrentStunt = this.GameCommonData.AllStunts.GetStunt((short)reader["CurrentStunt"]);
                    troop.StuntDayLeft = (short)reader["StuntDayLeft"];
                }
                catch
                {
                }
                try
                {
                    troop.mingling = reader["mingling"].ToString();
                }
                catch
                {
                }
                try
                {
                    troop.ManualControl = (bool)reader["ManualControl"];
                }
                catch
                {
                }
                troop.minglingweizhi = troop.RealDestination;

                if (errors.Count > 0)
                {
                    errors.Add("部队ID" + troop.ID + ":");
                    errorMsg.AddRange(errors);
                }
                else
                {
                    if (troop.Army != null)
                    {
                        this.Troops.AddTroopWithEvent(troop);
                    }
                }

            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Legion", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                Legion legion = new Legion();
                legion.Scenario = this;
                legion.ID = int.Parse(reader["ID"].ToString());
                legion.Kind = (LegionKind)((short)reader["Kind"]);
                legion.StartArchitecture = this.Architectures.GetGameObject((int)reader["StartArchitecture"]) as Architecture;
                legion.WillArchitecture = this.Architectures.GetGameObject((int)reader["WillArchitecture"]) as Architecture;
                legion.PreferredRouteway = this.Routeways.GetGameObject((int)reader["PreferredRouteway"]) as Routeway;
                legion.InformationDestination = StaticMethods.LoadFromString(reader["InformationDestination"].ToString());
                legion.CoreTroop = this.Troops.GetGameObject((int)reader["CoreTroop"]) as Troop;
                legion.LoadTroopsFromString(this.Troops, reader["Troops"].ToString());
                this.Legions.AddLegionWithEvent(legion);
                /*
                foreach (Faction f in this.Factions)
                {
                    foreach (Troop t in f.Troops)
                    {
                        t.BelongedLegion.BelongedFaction = f;
                        t.BelongedFaction = f;
                    }
                }*/
            }

            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Sections", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                List<string> e = new List<string>();

                Section section = new Section();
                section.Scenario = this;
                section.ID = int.Parse(reader["ID"].ToString());
                section.Name = reader["Name"].ToString();
                section.AIDetail = this.GameCommonData.AllSectionAIDetails.GetSectionAIDetail((short)reader["AIDetail"]);
                if (section.AIDetail == null)
                {
                    e.Add("军区委任类型" + (short)reader["AIDetail"] + "不存在");
                }
                section.OrientationFactionID = (short)reader["OrientationFaction"];
                section.OrientationSectionID = (short)reader["OrientationSection"];
                section.OrientationStateID = (short)reader["OrientationState"];
                try
                {
                    section.OrientationArchitectureID = (short)reader["OrientationArchitecture"];
                }
                catch
                {
                }
                e.AddRange(section.LoadArchitecturesFromString(this.Architectures, reader["Architectures"].ToString()));
                if (e.Count > 0)
                {
                    errorMsg.Add("军区ID" + section.ID + ":");
                    errorMsg.AddRange(e);
                }
                else
                {
                    this.Sections.AddSectionWithEvent(section);
                }
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From Faction", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                List<string> e = new List<string>();
                Faction faction = new Faction();
                faction.Scenario = this;
                faction.ID = (short)reader["ID"];
                faction.Passed = (bool)reader["Passed"];
                faction.PreUserControlFinished = (bool)reader["PreUserControlFinished"];
                faction.Controlling = (bool)reader["Controlling"];
                faction.LeaderID = (short)reader["LeaderID"];
                faction.ColorIndex = (short)reader["ColorIndex"];
                if (faction.ColorIndex >= this.GameCommonData.AllColors.Count)
                {
                    e.Add("颜色ID" + faction.ColorIndex + "不存在");
                }
                else
                {
                    faction.FactionColor = this.GameCommonData.AllColors[faction.ColorIndex];
                }
                faction.Name = reader["FName"].ToString();
                faction.CapitalID = (short)reader["CapitalID"];
                faction.Reputation = (int)reader["Reputation"];
                faction.TechniquePoint = (int)reader["TechniquePoint"];
                faction.TechniquePointForTechnique = (int)reader["TechniquePointForTechnique"];
                faction.TechniquePointForFacility = (int)reader["TechniquePointForFacility"];
                e.AddRange(faction.LoadArchitecturesFromString(this.Architectures, reader["Architectures"].ToString()));
                e.AddRange(faction.LoadSectionsFromString(this.Sections, reader["Sections"].ToString()));
                e.AddRange(faction.LoadTroopsFromString(this.Troops, reader["Troops"].ToString()));
                e.AddRange(faction.LoadInformationsFromString(this.Informations, reader["Informations"].ToString()));
                e.AddRange(faction.LoadRoutewaysFromString(this.Routeways, reader["Routeways"].ToString()));
                e.AddRange(faction.LoadLegionsFromString(this.Legions, reader["Legions"].ToString()));
                faction.BaseMilitaryKinds.LoadFromString(this.GameCommonData.AllMilitaryKinds, reader["BaseMilitaryKinds"].ToString());
                faction.UpgradingTechnique = (short)reader["UpgradingTechnique"];
                faction.UpgradingDaysLeft = (short)reader["UpgradingDaysLeft"];
                e.AddRange(faction.AvailableTechniques.LoadFromString(this.GameCommonData.AllTechniques, reader["AvailableTechniques"].ToString()));
                StaticMethods.LoadFromString(faction.PreferredTechniqueKinds, reader["PreferredTechniqueKinds"].ToString());
                faction.PlanTechnique = this.GameCommonData.AllTechniques.GetTechnique((short)reader["PlanTechnique"]);
                faction.AutoRefuse = (bool)reader["AutoRefuse"];
                try
                {
                    faction.chaotinggongxiandu = (int)reader["chaotinggongxiandu"];
                }
                catch
                {
                    faction.chaotinggongxiandu = 0;

                }

                try
                {
                    faction.PrinceID = (short)reader["PrinceID"];
                }
                catch
                {
                }
                try
                {
                    faction.guanjue = (short)reader["guanjue"];
                }
                catch
                {
                    faction.guanjue = 0;

                }
                try
                {
                    faction.IsAlien = (bool)reader["IsAlien"];
                }
                catch
                {
                    faction.IsAlien = false;
                }
                try
                {
                    faction.NotPlayerSelectable = (bool)reader["NotPlayerSelectable"];
                }
                catch
                {
                }
                if (faction.AvailableMilitaryKinds.GetMilitaryKindList().Count == 0)
                {
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(0));
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(1));
                    faction.AvailableMilitaryKinds.AddMilitaryKind(this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(2));
                }
                if (e.Count > 0)
                {
                    errorMsg.Add("势力ID" + faction.ID + ":");
                    errorMsg.AddRange(e);
                }
                this.Factions.AddFactionWithEvent(faction);
            }
            DbConnection.Close();
            DbConnection.Open();
            try
            {
                reader = new OleDbCommand("Select * From Treasure", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    Treasure treasure = new Treasure();
                    treasure.Scenario = this;
                    treasure.ID = (short)reader["ID"];
                    treasure.Name = reader["Name"].ToString();
                    treasure.Description = reader["Description"].ToString();
                    treasure.Pic = (short)reader["Pic"];
                    treasure.Worth = (short)reader["Worth"];
                    treasure.Available = (bool)reader["Available"];
                    treasure.AppearYear = (short)reader["AppearYear"];
                    try
                    {
                        treasure.TreasureGroup = (short)reader["TreasureGroup"];
                    }
                    catch
                    {
                        treasure.TreasureGroup = treasure.ID;
                    }
                    int key = (short)reader["HidePlace"];
                    treasure.HidePlace = this.AllArchitectures.ContainsKey(key) ? this.AllArchitectures[key] : null;
                    int num2 = (short)reader["BelongedPerson"];
                    treasure.BelongedPerson = this.AllPersons.ContainsKey(num2) ? this.AllPersons[num2] : null;
                    if (treasure.BelongedPerson != null)
                    {
                        treasure.BelongedPerson.Treasures.Add(treasure);
                    }
                    treasure.Influences.LoadFromString(this.GameCommonData.AllInfluences, reader["Influences"].ToString());
                    this.Treasures.AddTreasure(treasure);
                }
            }
            catch
            {
            }
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From DiplomaticRelation", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                DiplomaticRelation dr = new DiplomaticRelation();
                dr.Scenario = this;
                dr.RelationFaction1ID = (short)reader["Faction1ID"];
                dr.RelationFaction2ID = (short)reader["Faction2ID"];
                dr.Relation = (int)reader["Relation"];
                try
                {
                    dr.Truce = (int)reader["Truce"];
                }
                catch
                {
                }
                this.DiplomaticRelations.AddDiplomaticRelation(dr);
            }
            DbConnection.Close();
            command = new OleDbCommand("Select * From GameSurvey", DbConnection);
            DbConnection.Open();
            reader = command.ExecuteReader();
            reader.Read();
            this.ScenarioTitle = reader["Title"].ToString();
            this.ScenarioDescription = reader["Description"].ToString();
            this.Date.LoadDateData((short)reader["GYear"], (short)reader["GMonth"], (short)reader["GDay"]);
            this.ScenarioMap.JumpPosition = StaticMethods.LoadFromString(reader["JumpPosition"].ToString()).Value;
            DbConnection.Close();
            DbConnection.Open();
            reader = new OleDbCommand("Select * From TroopEvent", DbConnection).ExecuteReader();
            while (reader.Read())
            {
                TroopEvent te = new TroopEvent();
                te.Scenario = this;
                te.ID = (short)reader["ID"];
                try
                {
                    te.Name = reader["Name"].ToString();
                    te.Happened = (bool)reader["Happened"];
                    te.Repeatable = (bool)reader["Repeatable"];
                    try
                    {
                        te.AfterEventHappened = (short)reader["AfterEventHappened"];
                    }
                    catch
                    {
                    }
                    te.LaunchPerson = this.Persons.GetGameObject((short)reader["LaunchPerson"]) as Person;
                    te.Conditions.LoadFromString(this.GameCommonData.AllConditions, reader["Conditions"].ToString());
                    te.HappenChance = (short)reader["Chance"];
                    te.CheckArea = (EventCheckAreaKind)((short)reader["CheckAreaKind"]);
                    te.LoadTargetPersonFromString(this.AllPersons, reader["TargetPersons"].ToString());
                    te.LoadDialogFromString(this.AllPersons, reader["Dialogs"].ToString());
                    te.LoadSelfEffectFromString(this.GameCommonData.AllTroopEventEffects, reader["EffectSelf"].ToString());
                    te.LoadEffectPersonFromString(this.AllPersons, this.GameCommonData.AllTroopEventEffects, reader["EffectPersons"].ToString());
                    te.LoadEffectAreaFromString(this.GameCommonData.AllTroopEventEffects, reader["EffectAreas"].ToString());
                    try
                    {
                        te.Image = reader["ShowImage"].ToString();
                        te.Sound = reader["ShowSound"].ToString();
                    }
                    catch
                    {
                        te.Image = "";
                        te.Sound = "";
                    }
                    this.TroopEvents.AddTroopEventWithEvent(te);
                }
                catch (FormatException ex)
                {
                    errorMsg.Add("部队事件ID" + te.ID + ":读取字串转化成数字出错,请检查所有字串格式,对话里数字与字串以半型空格分隔");
                }
            }
            DbConnection.Close();
            try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From Event", DbConnection).ExecuteReader();

                while (reader.Read())
                {
                    try
                    {
                        Event e = new Event();
                        e.Scenario = this;
                        e.ID = (short)reader["ID"];
                        try
                        {
                            e.Name = reader["Name"].ToString();
                            e.happened = (bool)reader["Happened"];
                            e.repeatable = (bool)reader["Repeatable"];
                            e.AfterEventHappened = (short)reader["AfterEventHappened"];
                            e.happenChance = (short)reader["Chance"];
                            e.LoadPersonIdFromString(this.Persons, reader["PersonId"].ToString());
                            e.LoadPersonCondFromString(this.GameCommonData.AllConditions, reader["PersonCond"].ToString());
                            e.LoadArchitectureFromString(this.Architectures, reader["ArchitectureID"].ToString());
                            e.LoadArchitctureCondFromString(this.GameCommonData.AllConditions, reader["ArchitectureCond"].ToString());
                            e.LoadFactionFromString(this.Factions, reader["FactionID"].ToString());
                            e.LoadFactionCondFromString(this.GameCommonData.AllConditions, reader["FactionCond"].ToString());
                            e.LoadDialogFromString(reader["Dialog"].ToString());
                            e.LoadEffectFromString(this.GameCommonData.AllEventEffects, reader["Effect"].ToString());
                            e.LoadArchitectureEffectFromString(this.GameCommonData.AllEventEffects, reader["ArchitectureEffect"].ToString());
                            e.LoadFactionEffectFromString(this.GameCommonData.AllEventEffects, reader["FactionEffect"].ToString());
                            try
                            {
                                e.nextScenario = reader["NextScenario"].ToString();
                            }
                            catch
                            {
                                e.nextScenario = "";
                            }
                            try
                            {
                                e.Image = reader["ShowImage"].ToString();
                                e.Sound = reader["ShowSound"].ToString();
                                e.GloballyDisplayed = (bool)reader["GloballyDisplayed"];
                                e.StartYear = (int)reader["StartYear"];
                                e.StartMonth = (int)reader["StartMonth"];
                                e.EndYear = (int)reader["EndYear"];
                                e.EndMonth = (int)reader["EndMonth"];
                            }
                            catch
                            {
                                e.Image = "";
                                e.Sound = "";
                            }
                            this.AllEvents.AddEventWithEvent(e);
                        }
                        catch (FormatException)
                        {
                            errorMsg.Add("部队事件ID" + e.ID + ":读取字串转化成数字出错,请检查所有字串格式,对话里数字与字串以半型空格分隔");
                        }
                    }
                    catch
                    {
                        //ignore this event
                    }
                }
            }
            catch
            {
                //ignore, let there be empty event list
            }
            finally
            {
                DbConnection.Close();
            }
            try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From YearTable", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    int id = (int)reader["ID"];
                    int year = (short)reader["GYear"];
                    int month = (short)reader["GMonth"];
                    int day = (short)reader["GDay"];
                    FactionList faction = new FactionList();
                    faction.LoadFromString(this.Factions, (string)reader["Faction"]);
                    string content = (string)reader["Content"];
                    bool isGlobal = (bool)reader["IsGloballyKnown"];
                    this.YearTable.addTableEntry(id, new GameDate(year, month, day), faction, content, isGlobal);
                }
            }
            catch
            {
                //ignore, let there be empty yeartable
            }
            finally
            {
                DbConnection.Close();
            }
            /*try
            {
                DbConnection.Open();
                reader = new OleDbCommand("Select * From AAPaths", DbConnection).ExecuteReader();
                while (reader.Read())
                {
                    int aid1 = (short)reader["Architecture1"];
                    int aid2 = (short)reader["Architecture2"];
                    if (aid1 == aid2) continue;
                    int kid = (short)reader["MilitaryKind"];
                    Architecture a1 = this.Architectures.GetGameObject(aid1) as Architecture;
                    Architecture a2 = this.Architectures.GetGameObject(aid2) as Architecture;
                    MilitaryKind mk = this.GameCommonData.AllMilitaryKinds.GetMilitaryKind(kid);
                    List<Point> path = new List<Point>();
                    StaticMethods.LoadFromString(path, (string)reader["Path"]);
                    this.pathCache[new PathCacheKey(a1, a2, mk)] = path;
                }
            }
            catch
            {
                //ignore, let there be empty cache
            }
            finally
            {
                DbConnection.Close();
            }*/

            foreach (Person p in this.Persons)
            {
                if (p.Status == PersonStatus.Normal || p.Status == PersonStatus.Moving)
                {
                    if (p.LocationArchitecture != null && p.LocationArchitecture.BelongedFaction == null)
                    {
                        errorMsg.Add("武将ID" + p.ID + "在一座没有势力的城池仕官");
                        if (p.Status == PersonStatus.Normal)
                        {
                            p.Status = PersonStatus.NoFaction;
                        }
                        else
                        {
                            p.Status = PersonStatus.NoFactionMoving;
                        }
                    }
                }
                if (p.Status == PersonStatus.Moving || p.Status == PersonStatus.NoFactionMoving)
                {
                    if (p.ArrivingDays <= 0)
                    {
                        errorMsg.Add("武将ID" + p.ID + "正移动,但没有移动天数");
                        p.ArrivingDays = 1;
                    }
                }
                if (p.Available && p.Alive && p.LocationArchitecture == null && p.LocationTroop == null && (p.ID < 7000 || p.ID >= 8000))
                {
                    if (p.Status != PersonStatus.Princess)
                    {
                        errorMsg.Add("武将ID" + p.ID + "已登场,但没有所属建筑");
                        p.Available = false;
                        p.Alive = false;
                        p.Status = PersonStatus.None;
                    }
                }
            }

            this.AllPersons.Clear();
            this.AllArchitectures.Clear();

            this.alterTransportShipAdaptibility();

            using (TextWriter tw = new StreamWriter(SCENARIO_ERROR_TEXT_FILE)) {
                foreach (string s in errorMsg)
                {
                    tw.WriteLine(s);
                }
            }

            ExtensionInterface.call("Load", new Object[] { this });

            return errorMsg;
        }
Esempio n. 19
0
 void person_OnJailBreakSuccess(Person source, Captive destination)
 {
     Session.MainGame.mainGameScreen.PersonJailBreak(source, destination);
 }
Esempio n. 20
0
 private void captive_OnPlayerRelease(Faction from, Faction to, Captive captive)
 {
     Session.MainGame.mainGameScreen.CaptivePlayerRelease(from, to, captive);
 }
Esempio n. 21
0
 public void RemoveCaptive(Captive captive)
 {
     this.Captives.Remove(captive);
     captive.LocationArchitecture = null;
 }
Esempio n. 22
0
 private void captive_OnEscape(Captive captive)
 {
     //captive.Scenario.GameScreen.CaptiveEscape(captive);
 }
Esempio n. 23
0
 public void AddCaptive(Captive captive)
 {
     this.Captives.Add(captive);
     captive.LocationTroop = this;
     captive.CaptivePerson.LocationTroop = this;
     foreach (Treasure treasure in captive.CaptivePerson.Treasures.GetList())
     {
         captive.CaptivePerson.LoseTreasure(treasure);
         this.Leader.ReceiveTreasure(treasure);
     }
 }
Esempio n. 24
0
 public bool IsCaptiveInArchitecture(Captive captive)
 {
     return this.Captives.HasGameObject(captive);
 }
 void person_OnJailBreakSuccess(Person source, Captive destination)
 {
     source.Scenario.GameScreen.PersonJailBreak(source, destination);
 }
Esempio n. 26
0
 private void captive_OnSelfRelease(Captive captive)
 {
     captive.Scenario.GameScreen.SelfCaptiveRelease(captive);
 }
 private void FrameFunction_Architecture_KillCaptive()
 {
     Captive captive = new Captive();
     captive = this.mainGameScreen.Plugins.TabListPlugin.SelectedItem as Captive;
     if (captive != null)
     {
         this.mainGameScreen.xianshishijiantupian(this.gameScenario.NeutralPerson, captive.BelongedFaction.Leader.Name, "KillCaptive", "chuzhan.jpg", "chuzhan.wav", captive.CaptivePerson.Name, true);
         Person leader = captive.BelongedFaction.Leader;
         captive.CaptivePerson.execute(captive.BelongedFaction);
     }
 }
Esempio n. 28
0
 public void AddCaptive(Captive captive)
 {
     captive.CaptivePerson.LocationTroop = this;
     if (this.BelongedFaction != null)
     {
         foreach (Treasure treasure in captive.CaptivePerson.Treasures.GetList())
         {
             captive.CaptivePerson.LoseTreasure(treasure);
             this.BelongedFaction.Leader.ReceiveTreasure(treasure);
         }
     }
 }
Esempio n. 29
0
 private void captive_OnPlayerRelease(Faction from, Faction to, Captive captive)
 {
     from.Scenario.GameScreen.CaptivePlayerRelease(from, to, captive);
 }
Esempio n. 30
0
        public void DoConvince()
        {
            this.OutsideTask = OutsideTaskKind.无;
            if (this.ConvincingPerson != null && this.BelongedFaction != null)
            {
                Architecture architectureByPosition = base.Scenario.GetArchitectureByPosition(this.OutsideDestination.Value);
                if ((architectureByPosition != null) && ((architectureByPosition.BelongedFaction != null) && (this.ConvincingPerson.IsCaptive || (architectureByPosition.BelongedFaction != this.BelongedFaction))))
                {
                    bool ConvinceSuccess;
                    int idealOffset = Person.GetIdealOffset(this.ConvincingPerson, this.BelongedFaction.Leader);

                    if (this.ConvincingPerson.BelongedFaction == null)
                    {
                        ConvinceSuccess =
                                (
                        ((this.ConvincingPerson.IsCaptive && architectureByPosition.IsCaptiveInArchitecture(this.ConvincingPerson.BelongedCaptive))
                        || (this.ConvincingPerson.LocationArchitecture == architectureByPosition))
                        && (
                        (

                            ((this.ConvincingPerson.BelongedFaction == null) && (this.ConvincingPerson.IsCaptive))
                        )
                        && ((this.ConvincingPerson.Loyalty < 100))))
                        && (!this.ConvincingPerson.HatedPersons.Contains(this.BelongedFaction.LeaderID))
                        && (!GlobalVariables.IdealTendencyValid || (idealOffset <= this.ConvincingPerson.IdealTendency.Offset + (double) this.BelongedFaction.Reputation / this.BelongedFaction.MaxPossibleReputation * 75))
                        && (GameObject.Random((this.ConvinceAbility - (this.ConvincingPerson.Loyalty * 2)) - ((int)this.ConvincingPerson.PersonalLoyalty * (int)((PersonLoyalty)0x19))) > this.ConvincingPerson.Loyalty);

                        ConvinceSuccess |= !base.Scenario.IsPlayer(this.BelongedFaction) && GlobalVariables.AIAutoTakeNoFactionCaptives;
                        // 当被登用武将在野并且亲爱登用武将的君主或登用武将自己时,一定被登用
                        ConvinceSuccess |= (this.ConvincingPerson.closePersons.Contains(this.BelongedFaction.LeaderID)) || (this.ConvincingPerson.closePersons.Contains(this.ID));
                        ConvinceSuccess |= (this.ConvincingPerson.Spouse == this.BelongedFaction.LeaderID) || (this.ConvincingPerson.Brother == this.BelongedFaction.LeaderID) || (this.ConvincingPerson.Brother == this.ID);
                    }
                    else
                    {
                               ConvinceSuccess =
                                   (
                            ((this.ConvincingPerson.IsCaptive && architectureByPosition.IsCaptiveInArchitecture(this.ConvincingPerson.BelongedCaptive))
                            || (this.ConvincingPerson.LocationArchitecture == architectureByPosition))
                            && (
                            (
                                ((this.ConvincingPerson.BelongedFaction != null) && (this.BelongedFaction != this.ConvincingPerson.BelongedFaction))

                            )
                            && ((this.ConvincingPerson != this.ConvincingPerson.BelongedFaction.Leader) && (this.ConvincingPerson.Loyalty < 100))))
                            && (!this.ConvincingPerson.HatedPersons.Contains(this.BelongedFaction.LeaderID))
                            && (!GlobalVariables.IdealTendencyValid || (idealOffset <= this.ConvincingPerson.IdealTendency.Offset + (double) this.BelongedFaction.Reputation / this.BelongedFaction.MaxPossibleReputation * 75))
                            && (GameObject.Random((this.ConvinceAbility - (this.ConvincingPerson.Loyalty * 2)) - ((int)this.ConvincingPerson.PersonalLoyalty *(int) ((PersonLoyalty) 0x19))) > this.ConvincingPerson.Loyalty);

                        ConvinceSuccess |= !base.Scenario.IsPlayer(this.BelongedFaction) && base.Scenario.IsPlayer(this.ConvincingPerson.BelongedFaction) &&
                            GlobalVariables.AIAutoTakePlayerCaptives && (!GlobalVariables.AIAutoTakePlayerCaptiveOnlyUnfull || this.ConvincingPerson.Loyalty < 100);
                        //兄弟相互说服
                        ConvinceSuccess |= ((this.ConvincingPerson.Brother == this.Brother) && (this.ConvincingPerson.Brother != this.ConvincingPerson.BelongedFaction.LeaderID)
                            && this.ConvincingPerson.Brother >= 0);
                    }
                    ConvinceSuccess = ConvinceSuccess && (!this.BelongedFaction.IsAlien || (int)this.ConvincingPerson.PersonalLoyalty < 2);  //异族只能说服义理为2以下的武将。
                    //这样配偶和义兄可以无视一切条件强登被登用武将 (当是君主的配偶或者义兄弟)
                    ConvinceSuccess |= (this.ConvincingPerson.Spouse == this.BelongedFaction.LeaderID) || (this.ConvincingPerson.Brother == this.BelongedFaction.LeaderID && this.ConvincingPerson.Brother >= 0);

                    if (ConvinceSuccess)
                    {
                        GameObjects.Faction belongedFaction = null;
                        if (this.ConvincingPerson.BelongedFaction != null)
                        {
                            belongedFaction = this.ConvincingPerson.BelongedFaction;
                            base.Scenario.ChangeDiplomaticRelation(this.BelongedFaction.ID, this.ConvincingPerson.BelongedFaction.ID, -10);
                            if (this.ConvincingPerson.BelongedFaction.Leader.hasStrainTo(this.ConvincingPerson))
                            {
                                base.Scenario.ChangeDiplomaticRelation(this.BelongedFaction.ID, this.ConvincingPerson.BelongedFaction.ID, -10);
                            }
                            if (this.ConvincingPerson.BelongedFaction.Leader.hasCloseStrainTo(this.ConvincingPerson))
                            {
                                base.Scenario.ChangeDiplomaticRelation(this.BelongedFaction.ID, this.ConvincingPerson.BelongedFaction.ID, -10);
                            }
                            this.ConvincingPerson.RebelCount++;
                        }

                        Architecture from = null;
                        if (this.ConvincingPerson.IsCaptive)
                        {
                            from = this.ConvincingPerson.BelongedCaptive.LocationArchitecture;
                            this.ConvincingPerson.Status = PersonStatus.Normal;
                            this.ConvincingPerson.BelongedCaptive = null;
                        }
                        else
                        {
                            from = this.ConvincingPerson.LocationArchitecture;
                        }

                        this.ConvincingPerson.ChangeFaction(this.BelongedFaction);
                        if (from == null)
                        {
                            this.ConvincingPerson.MoveToArchitecture(this.TargetArchitecture, null);
                        }
                        else
                        {
                            this.ConvincingPerson.MoveToArchitecture(this.TargetArchitecture, from.ArchitectureArea.Area[0]);
                        }

                        /*if (!(flag || (this.ConvincingPerson.LocationArchitecture == null)))
                        {
                            this.ConvincingPerson.LocationArchitecture.RemovePerson(this.ConvincingPerson);
                        }*/
                        this.AddGlamourExperience(40);
                        this.IncreaseReputation(40);
                        this.BelongedFaction.IncreaseReputation(20 * this.MultipleOfTacticsReputation);
                        this.BelongedFaction.IncreaseTechniquePoint((20 * this.MultipleOfTacticsTechniquePoint) * 100);
                        ExtensionInterface.call("DoConvinceSuccess", new Object[] { this.Scenario, this });
                        if (this.OnConvinceSuccess != null)
                        {
                            this.OnConvinceSuccess(this, this.ConvincingPerson, belongedFaction);
                        }
                        if (architectureByPosition.BelongedFaction != this.BelongedFaction)
                        {
                            CheckCapturedByArchitecture(architectureByPosition);
                        }
                    }
                    else
                    {
                        ExtensionInterface.call("DoConvinceFail", new Object[] { this.Scenario, this });
                        if (this.OnConvinceFailed != null) {
                            this.OnConvinceFailed(this, this.ConvincingPerson);
                        }
                    }
                }
            }
        }
Esempio n. 31
0
        public void ToDeath()
        {
            Architecture locationArchitecture = this.LocationArchitecture;
            GameObjects.Faction belongedFaction = this.BelongedFaction;
            this.Alive = false;  //死亡
            this.BelongedCaptive = null;
            this.LocationArchitecture = null;
            this.Status = PersonStatus.None;
            if (this.OnDeath != null && locationArchitecture !=null )
            {
                this.OnDeath(this, locationArchitecture);
            }
            if (belongedFaction != null && this == belongedFaction.Leader)
            {
                string name = belongedFaction.Name;
                base.Scenario.YearTable.addKingDeathEntry(base.Scenario.Date, this, belongedFaction);
                GameObjects.Faction faction2 = belongedFaction.ChangeLeaderAfterLeaderDeath();
                if (faction2 != null)
                {
                    if (belongedFaction == faction2)
                    {
                        bool changeName = false;
                        if ((name == this.Name) && (belongedFaction.Leader.Ambition >= (int) PersonAmbition.普通))
                        {
                            belongedFaction.Name = belongedFaction.Leader.Name;
                            changeName = true;
                        }
                        if (this.OnChangeLeader != null)
                        {
                            this.OnChangeLeader(belongedFaction, belongedFaction.Leader, changeName, name);
                        }
                    }
                    else if (this.OnDeathChangeFaction != null)
                    {
                        this.OnDeathChangeFaction(this, faction2.Leader, name);
                    }
                }
                else
                {
                    foreach (Architecture architecture2 in belongedFaction.Architectures.GetList())
                    {
                        architecture2.ResetFaction(null);
                    }
                    belongedFaction.Destroy();
                }
            }
            else
            {

                Treasure baowu;

                while (this.Treasures.Count > 0)
                {
                    baowu = (Treasure)this.Treasures[0];
                    this.LoseTreasure(baowu);
                    baowu.Available = false;
                    baowu.HidePlace = locationArchitecture;
                }
            }
            ExtensionInterface.call("PersonDie", new Object[] { this.Scenario, this });
        }
 public override void CaptivePlayerRelease(Faction from, Faction to, Captive captive)
 {
     if ((base.Scenario.CurrentPlayer == null) || base.Scenario.IsPlayer(from))
     {
         this.Plugins.tupianwenziPlugin.SetConfirmationDialog(this.Plugins.ConfirmationDialogPlugin, new GameDelegates.VoidFunction(captive.ReleaseCaptive), new GameDelegates.VoidFunction(captive.ReturnRansom));
         this.Plugins.ConfirmationDialogPlugin.SetPosition(ShowPosition.Center);
         this.Plugins.tupianwenziPlugin.SetGameObjectBranch(from.Leader, captive, "ReleaseCaptive");
         this.Plugins.tupianwenziPlugin.IsShowing = true;
     }
 }
Esempio n. 33
0
 public virtual void CaptivePlayerRelease(Faction from, Faction to, Captive captive)
 {
 }
 public override void PersonJailBreak(Person person, Captive captive)
 {
     if (base.Scenario.IsCurrentPlayer(person.BelongedFaction) || base.Scenario.IsCurrentPlayer(captive.BelongedFaction))
     {
         person.TextDestinationString = captive.LocationArchitecture.Name;
         person.TextResultString = captive.CaptivePerson.Name;
         this.Plugins.GameRecordPlugin.AddBranch(person, "PersonJailBreak", person.Position);
     }
 }
Esempio n. 35
0
 public virtual void SelfCaptiveRelease(Captive captive)
 {
 }
 public override void SelfCaptiveRelease(Captive captive)
 {
     if ((((base.Scenario.CurrentPlayer == null) || base.Scenario.IsCurrentPlayer(captive.BelongedFaction)) || base.Scenario.IsCurrentPlayer(captive.CaptiveFaction)) || GlobalVariables.SkyEye)
     {
         this.Plugins.GameRecordPlugin.AddBranch(captive, "SelfCaptiveRelease", captive.BelongedFaction.Capital.Position);
     }
 }
Esempio n. 37
0
 public virtual void PersonJailBreak(Person person, Captive captive)
 {
 }
Esempio n. 38
0
 public void AddCaptive(Captive captive)
 {
     this.Captives.Add(captive);
     captive.LocationArchitecture = this;
     captive.CaptivePerson.LocationArchitecture = this;
 }
Esempio n. 39
0
 public void DoConvince()
 {
     this.OutsideTask = OutsideTaskKind.无;
     if (this.ConvincingPerson != null)
     {
         Architecture architectureByPosition = base.Scenario.GetArchitectureByPosition(this.OutsideDestination.Value);
         if ((architectureByPosition != null) && ((architectureByPosition.BelongedFaction != null) && (this.ConvincingPerson.IsCaptive || (architectureByPosition.BelongedFaction != this.BelongedFaction))))
         {
             if ((((this.ConvincingPerson.IsCaptive && architectureByPosition.IsCaptiveInArchitecture(this.ConvincingPerson.BelongedCaptive)) || (this.ConvincingPerson.LocationArchitecture == architectureByPosition)) && (((this.ConvincingPerson.BelongedFaction != null) && (this.BelongedFaction != this.ConvincingPerson.BelongedFaction)) && ((this.ConvincingPerson != this.ConvincingPerson.BelongedFaction.Leader) && (this.ConvincingPerson.Loyalty < 100)))) && (GameObject.Random((this.ConvinceAbility - (this.ConvincingPerson.Loyalty * 2)) - ((int)this.ConvincingPerson.PersonalLoyalty *(int) ((PersonLoyalty) 0x19))) > this.ConvincingPerson.Loyalty))
             {
                 GameObjects.Faction belongedFaction = this.ConvincingPerson.BelongedFaction;
                 base.Scenario.ChangeDiplomaticRelation(this.BelongedFaction.ID, this.ConvincingPerson.BelongedFaction.ID, -10);
                 bool flag = false;
                 if (this.ConvincingPerson.IsCaptive)
                 {
                     flag = true;
                     this.ConvincingPerson.BelongedCaptive.BelongedFaction.RemoveCaptive(this.ConvincingPerson.BelongedCaptive);
                     this.ConvincingPerson.BelongedCaptive.CaptiveFaction.RemoveSelfCaptive(this.ConvincingPerson.BelongedCaptive);
                     this.ConvincingPerson.BelongedCaptive.LocationArchitecture.RemoveCaptive(this.ConvincingPerson.BelongedCaptive);
                     base.Scenario.Captives.Remove(this.ConvincingPerson.BelongedCaptive);
                     this.ConvincingPerson.BelongedCaptive = null;
                 }
                 this.ConvincingPerson.ChangeFaction(this.BelongedFaction);
                 this.ConvincingPerson.MoveToArchitecture(this.TargetArchitecture);
                 if (!(flag || (this.ConvincingPerson.LocationArchitecture == null)))
                 {
                     this.ConvincingPerson.LocationArchitecture.RemovePerson(this.ConvincingPerson);
                 }
                 this.AddGlamourExperience(40);
                 this.IncreaseReputation(40);
                 this.BelongedFaction.IncreaseReputation(20 * this.MultipleOfTacticsReputation);
                 this.BelongedFaction.IncreaseTechniquePoint((20 * this.MultipleOfTacticsTechniquePoint) * 100);
                 if (this.OnConvinceSuccess != null)
                 {
                     this.OnConvinceSuccess(this, this.ConvincingPerson, belongedFaction);
                 }
             }
             else if (this.OnConvinceFailed != null)
             {
                 this.OnConvinceFailed(this, this.ConvincingPerson);
             }
         }
     }
 }
Esempio n. 40
0
        public void ToDeath()
        {
            Architecture locationArchitecture;
            Troop locationTroop = null;
            GameObjects.Faction belongedFaction = this.BelongedFaction;
            int deathLocation = 0;
            if (this.LocationTroop != null)
            {
                locationTroop = this.LocationTroop;
                locationArchitecture = this.LocationTroop.StartingArchitecture;
                deathLocation = 2;
                if (!locationTroop.Destroyed)
                {
                    locationTroop.Persons.Remove(this);
                    this.LocationTroop = null;
                    locationTroop.RefreshAfterLosePerson();
                }

            }
            else if (this.LocationArchitecture != null)
            {
                locationArchitecture = this.LocationArchitecture;
                deathLocation = 1;
            }
            else
            {
                deathLocation = 3;
                throw new Exception("try to kill person onway");
            }

            this.Alive = false;  //死亡
            this.BelongedCaptive = null;
            this.LocationArchitecture = null;
            this.Status = PersonStatus.None;
            if (this.OnDeath != null && locationArchitecture != null && deathLocation == 1)
            {
                this.OnDeath(this, locationArchitecture, null);
            }
            else if (this.OnDeath != null && locationTroop != null && deathLocation == 2)
            {
                this.OnDeath(this, null, locationTroop);
            }

            if (belongedFaction != null && this == belongedFaction.Leader)
            {
                string name = belongedFaction.Name;
                base.Scenario.YearTable.addKingDeathEntry(base.Scenario.Date, this, belongedFaction);
                GameObjects.Faction faction2 = belongedFaction.ChangeLeaderAfterLeaderDeath();
                if (faction2 != null)
                {
                    if (belongedFaction == faction2)
                    {
                        bool changeName = false;
                        if ((name == this.Name) && (belongedFaction.Leader.Ambition >= (int) PersonAmbition.普通))
                        {
                            belongedFaction.Name = belongedFaction.Leader.Name;
                            changeName = true;
                        }
                        if (this.OnChangeLeader != null)
                        {
                            this.OnChangeLeader(belongedFaction, belongedFaction.Leader, changeName, name);
                        }
                    }
                    else if (this.OnDeathChangeFaction != null)
                    {
                        this.OnDeathChangeFaction(this, faction2.Leader, name);
                    }
                }
                else
                {
                    foreach (Architecture architecture2 in belongedFaction.Architectures.GetList())
                    {
                        architecture2.ResetFaction(null);
                    }
                    belongedFaction.Destroy();
                }
            }
            else
            {

                Treasure baowu;

                while (this.Treasures.Count > 0)
                {
                    baowu = (Treasure)this.Treasures[0];
                    this.LoseTreasure(baowu);
                    baowu.Available = false;
                    baowu.HidePlace = locationArchitecture;
                }
            }
            ExtensionInterface.call("PersonDie", new Object[] { this.Scenario, this });
        }