using Cal; using System; using System.Collections.Generic; namespace ET { public class PetAwakeSystem : AwakeSystem { public override void Awake(Pet self) { self.level = 1; self.name = "宠物"; self.Load(); } } public class PetLoadSystem : LoadSystem { public override void Load(Pet self) { self.Load(); } } public class PetDeserializeSystem : DeserializeSystem { public override void Deserialize(Pet self) { self.Load(); } } public static class PetSystem { public static void Load(this Pet self) { self.getAttributeFunc += self.GetAttribute; self.Init(); } public static void Init(this Pet self) { int key = (int)AttributeType.力量; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; key = (int)AttributeType.敏捷; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; key = (int)AttributeType.精神; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; key = (int)AttributeType.智慧; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; key = (int)AttributeType.体质; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; key = (int)AttributeType.耐力; if (!self.addToCharacter.ContainsKey(key)) self.addToCharacter[key] = 0; } public static float GetAttribute(this Pet self,AttributeType attributeType) { float bound = 0f; foreach (var kv in self.addToCharacter) { if ((int)attributeType == kv.Key) bound += kv.Value; } return bound; } public static string AddLevel(this Pet self,int level) { self.level+=level; using var listComponent = ListComponent.Create(); listComponent.List.AddRange(self.addToCharacter.Keys); foreach (var key in listComponent.List) { self.addToCharacter[key] += 10*level; } Log.Info($"宠物升级啦! level:{self.level} exp:{self.exp}"); CharacterHelper.SyncNumeric(self.GetParent()); return null; } public static string AddExp(this Pet self,int exp) { exp += self.exp; int addLevel = 0; while (exp > 100+self.level*10) { exp -= 100 + self.level * 10; addLevel++; } self.exp = Math.Clamp(exp, 0, int.MaxValue); self.AddLevel(addLevel); return null; } public static string ChangeName(this Pet self, string name) { name = name.TrimEnd().Trim(new char[]{'\n','狗','夏'}); if (name.Length > 7) { return "长度最大为7"; } self.name = name; Log.Info($"宠物改名:{self.name}"); return null; } } }