public static void ExpPatch3(ref Upgradeable __instance, ref int count) { if (__instance.GetType() == typeof(Character)) { Character c = __instance as Character; if (c.Level != cacheCharacterLevel && (fixInTeamExp.Value || !Game.Teammates.Contains(c.Id))) { // 队伍没有,或者在队成长开启 int num3 = c.Level - cacheCharacterLevel; NpcGrowingItem npcGrowingItem = Game.Data.Get <NpcGrowingItem>(c.Id); if (npcGrowingItem != null) { int num4 = (Game.PlayData.Difficulty == GameDifficulty.Master) ? 2 : 1; foreach (KeyValuePair <CharacterProperty, int> keyValuePair in npcGrowingItem.Property) { if (keyValuePair.Value > 0) { c.AddProperty(keyValuePair.Key, keyValuePair.Value * num3 * num4, false); } } } } } }
public static bool ExpPatch1(ref NpcExpEventHandler __instance, NpcExpEventArgs e) { var t = Traverse.Create(__instance); var characterList = t.Field("characterList").GetValue <List <Character> >(); var playData = t.Field("playData").GetValue <GameData>(); var dataManager = t.Field("dataManager").GetValue <IDataProvider>(); if (e.Exp > 0) { if (!characterList.HasData()) { return(false); } GameDifficulty difficulty = playData.Difficulty; List <string> list = new List <string>(); foreach (Character character in characterList) { if (!Game.Teammates.Contains(character.Id)) { NpcGrowingItem npcGrowingItem = dataManager.Get <NpcGrowingItem>(character.Id); if (npcGrowingItem != null) { //float expPercentage = __instance.GetExpPercentage(npcGrowingItem.ExpPercentage, difficulty, npcGrowingItem.ManualLearnTalent); float expPercentage = t.Method("GetExpPercentage", npcGrowingItem.ExpPercentage, difficulty, npcGrowingItem.ManualLearnTalent).GetValue <float>(); int count = Mathf.RoundToInt((float)e.Exp * expPercentage); if (character.Level >= npcGrowingItem.MaxLevel) { list.Add(character.Id); } else { int dLevel = character.Level; character.AddExp(count, false, false); dLevel = character.Level - dLevel; if (dLevel > 0 && npcGrowingItem.ManualLearnTalent == 0) { for (int i = 0; i < dLevel; i++) { t.Method("LearnTalent", character).GetValue();// __instance.LearnTalent(character); } } } } } } if (list.HasData()) { using (List <string> .Enumerator enumerator2 = list.GetEnumerator()) { while (enumerator2.MoveNext()) { string id = enumerator2.Current; int num = characterList.FindIndex((Character c) => c.Id == id); if (num != -1) { characterList.RemoveAt(num); } } } } } return(false); }