//刷新当前地图全部资源格子 public static void RefreshResourcesIcon() { int bianchang = Int32.Parse(DateFile.instance.partWorldMapDate[DateFile.instance.mianPartId][98]); int placeNum = bianchang * bianchang; for (int j = 0; j < placeNum; j++) { WorldMapPlace worldMapPlace = WorldMapSystem.instance.worldMapPlaces[j]; if (DateFile.instance.HaveShow(DateFile.instance.mianPartId, j) > 0) { if (int.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 89)) != 6) { worldMapPlace.resourceIconHolder.gameObject.SetActive(true); int[] placeResource = DateFile.instance.GetPlaceResource(DateFile.instance.mianPartId, j); int[] placeResourceMax = new int[] { Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 1)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 2)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 3)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 4)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 5)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 6)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 7)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, j, 8)) }; int[] compare; if (settings.ShowMax) { compare = placeResourceMax; } else { compare = placeResource; } for (int i = 0; i < 6; i++) { if (compare[i] >= settings.yuZhi) { worldMapPlace.resourceIcon[i].SetActive(true); } else { worldMapPlace.resourceIcon[i].SetActive(false); } } } else { worldMapPlace.resourceIconHolder.gameObject.SetActive(false); } } else { worldMapPlace.resourceIconHolder.gameObject.SetActive(false); } } }
//设置格子图标 public static void SetResourcesIcon(int placeId) { WorldMapPlace worldMapPlace = WorldMapSystem.instance.worldMapPlaces[placeId]; if (DateFile.instance.HaveShow(DateFile.instance.mianPartId, placeId) > 0) { if (int.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 89)) != 6) { worldMapPlace.resourceIconHolder.gameObject.SetActive(true); int[] placeResource = DateFile.instance.GetPlaceResource(DateFile.instance.mianPartId, placeId); int[] placeResourceMax = new int[] { Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 1)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 2)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 3)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 4)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 5)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 6)), }; int[] compare; if (settings.ShowMax) { compare = placeResourceMax; } else { compare = placeResource; } if (!Main.enabled) { compare = placeResource; } for (int i = 0; i < 6; i++) { int yuZhi = Main.enabled ? settings.yuZhi : 100; if (compare[i] >= yuZhi && settings.yuZhiToggle[i]) { worldMapPlace.resourceIcon[i].SetActive(true); } else { worldMapPlace.resourceIcon[i].SetActive(false); } } } else { worldMapPlace.resourceIconHolder.gameObject.SetActive(false); } } else { worldMapPlace.resourceIconHolder.gameObject.SetActive(false); } }
public static void Postfix(WorldMapPlace __instance) { int placeId = Int32.Parse(GetInstanceField(typeof(WorldMapPlace), __instance, "placeId").ToString()); if (DateFile.instance.HaveShow(DateFile.instance.mianPartId, placeId) > 0) { if (int.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 89)) != 6) { __instance.resourceIconHolder.gameObject.SetActive(true); int[] placeResource = DateFile.instance.GetPlaceResource(DateFile.instance.mianPartId, placeId); int[] placeResourceMax = new int[] { Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 1)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 2)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 3)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 4)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 5)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 6)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 7)), Int32.Parse(DateFile.instance.GetNewMapDate(DateFile.instance.mianPartId, placeId, 8)) }; int[] compare; if (settings.ShowMax) { compare = placeResourceMax; } else { compare = placeResource; } for (int i = 0; i < 6; i++) { if (compare[i] >= settings.yuZhi) { __instance.resourceIcon[i].SetActive(true); } else { __instance.resourceIcon[i].SetActive(false); } } } else { __instance.resourceIconHolder.gameObject.SetActive(false); } } else { __instance.resourceIconHolder.gameObject.SetActive(false); } }
static void Postfix(WorldMapPlace __instance, int ___placeId) { if (!Main.enabled || !Main.settings.showStroyLevel) { return; } if (__instance.storyTime.text == "99") { return; } DateFile df = DateFile.instance; int pid = ___placeId; int partId = df.mianPartId; if (df.HaveShow(partId, pid) <= 0) { return; } if (!DateFile.instance.HaveStory(partId, pid)) { return; } if (!df.worldMapState[partId].ContainsKey(pid)) { return; } int storyId = df.worldMapState[partId][pid][0]; string level = df.baseStoryDate[storyId][3]; if (int.Parse(level) < 1) { return; } int storyTime = df.worldMapState[partId][pid][1]; if (storyTime > 0) { __instance.storyTime.text = "难度:" + level + "时间:" + storyTime; __instance.storyTime.text = string.Format("难度:{0}时间{1}", level, storyTime); } else { __instance.storyTime.text = "难度:" + level; } }
static void Postfix(WorldMapPlace __instance, int ___placeId) { if (!Main.enabled || !Main.settings.showStroyLevel || __instance.storyTime.text == "99" || DateFile.instance.HaveShow(DateFile.instance.mianPartId, ___placeId) < 1 || !DateFile.instance.HaveStory(DateFile.instance.mianPartId, ___placeId) || !DateFile.instance.worldMapState[DateFile.instance.mianPartId].ContainsKey(___placeId)) { return; } int storyId = DateFile.instance.worldMapState[DateFile.instance.mianPartId][___placeId][0]; string level = DateFile.instance.baseStoryDate[storyId][3]; if (int.Parse(level) < 1) { return; } int storyTime = DateFile.instance.worldMapState[DateFile.instance.mianPartId][___placeId][1]; __instance.storyTime.text = storyTime > 0 ? string.Format("难度:{0}时间{1}", level, storyTime) : $"难度:{level}"; }
public static void Postfix(WorldMapPlace __instance, int ___placeId) { if (!Main.enabled || !Main.settings.showStroyLevel || __instance.storyTime.text == "99" || DateFile.instance.HaveShow(DateFile.instance.mianPartId, ___placeId) < 1 || !DateFile.instance.HaveStory(DateFile.instance.mianPartId, ___placeId) || !DateFile.instance.worldMapState[DateFile.instance.mianPartId].TryGetValue(___placeId, out var storyInfo)) { return; } int storyId = storyInfo[0]; string level = DateFile.instance.baseStoryDate[storyId][3]; if (int.Parse(level) < 1) { return; } int storyTime = storyInfo[1]; __instance.storyTime.text = storyTime > 0 ? $"难度:{level}时间{storyTime}" : $"难度:{level}"; }
/* * //声明 AutoPatchHandlers 字段(把所有要在游戏启动时加载 PatchHandler 的全部放进去) * //注意区分 AutoPatchHandlers 和 PatchHandlers,以及代码顺序最好别弄错,毕竟从上往下执行的 * /// <summary>AutoPatchHandlers自动补丁仓库</summary> * public static readonly Dictionary<string, PatchHandler> AutoPatchHandlers = new Dictionary<string, PatchHandler> * { * //在这里加入,如下示例 * //(?注意最好不要在 AutoPatchHandlers仓库 和 后续的 PatchHandlers仓库 中重复加入同一个PatchHandler?)这点不确定,俺还没研究透、俺太彩了 * * ////对应【string, PatchHandler】 * //{ "显示丰富资源", new PatchHandler() * // { * // TargetType = typeof(WorldMapPlace), * // TargetMethonName = "UpdatePaceResource", * // Postfix = AccessTools.Method(PatchesType,"UpdatePaceResource_Postfix") * // } * //}, * * //新的PatchHandler可以继续往下加 * //GOD代码示例里部分是new PatchHandler,部分是new PatchHandler()。后者是允许传参的?俺新手不是很懂代码 * * }; * * /// <summary> * /// 初始化多线程加载补丁 * /// </summary> * public static void Init() * { * Main.Logger.LogInfo($"多线程 Patch 开始"); * //遍历 AutoPatchHandlers 自动补丁仓库内的所有条目 * foreach (var patch in AutoPatchHandlers) * { * //尝试 * try * { * Main.Logger.LogInfo($"Patch { patch.Key }"); * //调用“条目的值”的Patch方法(以harmony为阐述) * patch.Value.Patch(harmony); * } * //异常捕获(当上方执行出错时,输出错误原因,而不是MOD直接崩溃) * catch (Exception ex) * { * Main.Logger.LogError($"{ patch.Key } Patch Failed"); * Main.Logger.LogError(ex); * } * } * * //无参PatchAll方法会自动搜索本程序集内的所有HarmonyPatch补丁(当然要按照它所提供的指定格式声明才行) * harmony.PatchAll(); * Main.Logger.LogInfo($"Patch 完成"); * } */ #endregion #region 采用 YanLib 中 PatchHandler 的新式补丁(Patch)方式,支持Unpatch(需要YanCore前置插件) //接收游戏本身在UpdatePaceResource时使用的的placeId,并传导调用本MOD的资源图标刷新方式去再刷新一次 //以及这个“Pace”是游戏本身的茄子代码、就这样写错的,所以这边也只能跟着用 //这其实是一个对游戏中WorldMapPlace类下的UpdatePaceResource /// <summary></summary> /// <param name="__instance"></param> public static void UpdatePaceResource_Postfix(WorldMapPlace __instance) { int placeId = Int32.Parse(Main.GetInstanceField(typeof(WorldMapPlace), __instance, "placeId").ToString()); Main.SetResourcesIcon(placeId); }