using ET.EventType; namespace ET { public class PeopleAwakeSystem: AwakeSystem { public override void Awake(People self, int configId) { self.ConfigId = configId; } } [FriendClass(typeof (People))] public static class PeopleSystem { public static void FromMessage(this People self, PeopleProto peopleProto) { self.Id = peopleProto.Id; self.Name = peopleProto.Name; self.ConfigId = peopleProto.ConfigId; self.Labor = peopleProto.LaborLevel; self.LaborExp = peopleProto.LaborExp; self.Level = peopleProto.Level; self.Exp = peopleProto.Exp; self.Age = peopleProto.Age; self.SetBehaveType(peopleProto.BehaveType); self.TargetId = peopleProto.TargetId; self.PosX = peopleProto.X; self.PosY = peopleProto.Y; if (peopleProto.SkillList.Count > 0) { var skillCom = self.GetOrAddComponent(); foreach (var v in peopleProto.SkillList) { var skill = skillCom.AddChildWithId(v.Id); skill.FromMessage(v); } } } public static PeopleProto ToMessage(this People self) { PeopleProto peopleProto = new PeopleProto(); peopleProto.Id = self.Id; peopleProto.Name = self.Name; peopleProto.ConfigId = self.ConfigId; peopleProto.LaborLevel = self.Labor; peopleProto.LaborExp = self.LaborExp; peopleProto.Level = self.Level; peopleProto.Exp = self.Exp; peopleProto.Age = self.Age; peopleProto.BehaveType = self.BehaveType; peopleProto.TargetId = self.TargetId; peopleProto.X = self.PosX; peopleProto.Y = self.PosY; var skillCom = self.GetComponent(); if (skillCom != null) { foreach (var v in skillCom.Children.Values) { var skill = (Skill) v; peopleProto.SkillList.Add(skill.ToMessage()); } } return peopleProto; } public static int GetStrength(this People self) { var numericComp = self.GetComponent(); return numericComp.GetAsInt(NumericType.Strength); } public static int GetGender(this People self) { var numericComp = self.GetComponent(); return numericComp.GetAsInt(NumericType.Gender); } public static int GetBehaveType(this People self) { return self.BehaveType; } public static void SetBehaveType(this People self, int val) { self.BehaveType = val; #if !SERVER Game.EventSystem.Publish(new EventType.BehaveTypeChanged() { People = self }); #endif } public static long GetTargetId(this People self) { return self.TargetId; } public static void SetTargetId(this People self, long val) { self.TargetId = val; } public static int GetHp(this People self) { var nc = self.GetComponent(); return nc.GetAsInt(NumericType.HP); } public static bool PeopleMove(this People self, float x, float y) { self.PosX = x; self.PosY = y; return true; } public static int GetPeopleType(this People self) { return self.Config.Type; } public static void InitNumericComponent(this People self) { var nc = self.AddComponent(); nc.Set(NumericType.PeopleType, self.Config.Type); nc.Set(NumericType.Gender, self.Config.Gender); nc.Set(NumericType.Age, self.Age); nc.Set(NumericType.Labor, self.Config.Labor); nc.Set(NumericType.Wisdom, self.Config.Wisdom); nc.Set(NumericType.MoveSpeed, self.Config.MoveSpeed); if (self.AttriConfig != null) { nc.Set(NumericType.Domination, self.AttriConfig.Domination); nc.Set(NumericType.Strength, self.AttriConfig.Strength); nc.Set(NumericType.Endurance, self.AttriConfig.Endurance); nc.Set(NumericType.Agile, self.AttriConfig.Agile); nc.Set(NumericType.SpiritualPower, self.AttriConfig.SpiritualPower); } } public static int GetLabor(this People self) { var nc = self.GetComponent(); return nc.GetAsInt(NumericType.Labor); } //建造相关 public static int GetLaborWithCoefficient(this People self) { int labor = self.GetLabor(); int laborCoefficientBuild = WorldParametersConfigCategory.Instance.Get(WorldParam.LaborCoefficientBuild).Value[0]; return labor * laborCoefficientBuild; } //农民类型才会成长,年龄增加 public static void GrowUp(this People self) { if (self.PeopleType != (int) RoleTypeEnum.VILLAGERS) { return; } self.Age += 1; } //返回true表示死亡 public static bool CheckPeopleDie(this People self) { if (self.PeopleType == (int) RoleTypeEnum.VILLAGERS && self.Age >= self.AgeMax) { return true; } return false; } //增加体质经验 public static void AddPhysiqueExp(this People self, int exp) { if (self.PeopleType != (int) RoleTypeEnum.VILLAGERS) { return; } self.PhysiqueExp += exp; var config = PhysiqueConfigCategory.Instance.Get(self.Physique); if (self.PhysiqueExp < 0) { self.PhysiqueExp = 0; } if (self.PhysiqueExp >= config.Exp) { self.Physique += 1; self.PhysiqueExp -= config.Exp; } } //增加寿命经验 public static void AddLifeExp(this People self, int exp) { if (self.PeopleType != (int) RoleTypeEnum.VILLAGERS) { return; } self.AgeExp += exp; var configList = LifeExpConfigCategory.Instance.GetList(); var phyConfig = PhysiqueConfigCategory.Instance.Get(self.Physique); int ageMax = 0; foreach (var v in configList) { if (self.AgeExp < v.LifeExp) { ageMax = v.Life; break; } } if (ageMax > phyConfig.LifeMax) { ageMax = phyConfig.LifeMax; } self.AgeMax = ageMax; var lifeConfig = LifeExpConfigCategory.Instance.Get(self.AgeMax); if (self.AgeExp > lifeConfig.LifeExp) { self.AgeExp = lifeConfig.LifeExp; } } //增加劳力经验 public static void AddLaborExp(this People self, int exp) { if (self.PeopleType != (int) RoleTypeEnum.VILLAGERS) { return; } self.LaborExp += exp; var config = LaborConfigCategory.Instance.Get(self.Labor); while (self.LaborExp > config.LaborExp) { var stageLabor = self.GetAgeStageLaborMax(); if (self.Labor >= stageLabor) { self.Labor = stageLabor; config = LaborConfigCategory.Instance.Get(self.Labor); if (self.LaborExp > config.LaborExp) { self.LaborExp = config.LaborExp; return; } } self.LaborExp -= config.LaborExp; self.Labor++; config = LaborConfigCategory.Instance.Get(self.Labor); } } public static int GetAgeStageLaborMax(this People self) { var ageStageList = AgeStageConfigCategory.Instance.GetList(); foreach (var v in ageStageList) { if (self.Age < v.EndAge) { return v.LaborMax; } } return 1; } //每分钟更新体质经验 public static void UpdatePhysiqueExp(this People self, int food) { var exp = (int)(-1*self.Disease/5); if (food < 0) { exp += food * 40; } self.AddPhysiqueExp(exp); } //疾病影响经验 public static void UpdateLifeExp(this People self) { var injuryLv = 0; var diseaseLv = 0; int exp = 0; var configs = DiseaseConfigCategory.Instance.GetList(); foreach (var v in configs) { if (v.Type == (int) (DiseaseTypeEnum.INJURY)) { if (self.Injury > v.Min) { injuryLv = v.Level; } } if (v.Type == (int) (DiseaseTypeEnum.ILLNESS)) { if (self.Disease > v.Min) { diseaseLv = v.Level; } } } if (injuryLv > 2) { exp += -1 * self.Injury * 5; } if (diseaseLv > 2) { exp += -1 * self.Disease * 5; } self.AddLifeExp(exp); } } }