using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; using Games.ChatHistory; using Games.Fellow; using Games.GlobeDefine; using Games.Item; using Games.TitleInvestitive; using Games.UserCommonData; using GCGame.Table; using Module.Log; using UnityEngine; using UnityEngine.AI; using UnityEngine.UI; using Object = UnityEngine.Object; using Random = UnityEngine.Random; namespace GCGame { public class Utils { public enum ChatGender { Male, Female } public enum RemainTimesType { Day = 1, Day_Hour = 2, Day_Hour_Minutes = 3, Day_Hour_Minutes_Second = 4, Hour_Minute = 5, Hour_Minute_Second = 6 } public enum ShareType { ShareType_Invalid = -1, ShareType_SNS = 0, //SNS ShareType_NanGua = 1, //南瓜 ShareType_Num } public enum SysIconType { None, AI, Sys, Guild } private static readonly int _gradeDescStrId = 43070; public static DateTime m_startTime = new DateTime(1970, 1, 1); //本次登陆是否提示 private static bool tipsState = true; /// /// 按照规则严格进行分割 /// /// 原始字符 /// 字符串类型 /// 规则词,只有一个 /// 返回分割的词 public static string[] MySplit(string str, string[] nTypeList, string regix) { if (string.IsNullOrEmpty(str)) return null; var content = new string[nTypeList.Length]; var nIndex = 0; var nstartPos = 0; while (nstartPos <= str.Length) { var nsPos = str.IndexOf(regix, nstartPos); if (nsPos < 0) { var lastdataString = str.Substring(nstartPos); if (string.IsNullOrEmpty(lastdataString) && nTypeList[nIndex].ToLower() != "string") content[nIndex++] = "--"; else content[nIndex++] = lastdataString; break; } if (nstartPos == nsPos) { if (nTypeList[nIndex].ToLower() != "string") content[nIndex++] = "--"; else content[nIndex++] = ""; } else { content[nIndex++] = str.Substring(nstartPos, nsPos - nstartPos); } nstartPos = nsPos + 1; } return content; } public static string GetPlayerStringGuid() { var GUID = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid; var serverId = (short) (GUID >> 48); var low = (int) (GUID & 0xFFFFFFFF); var result = new StringBuilder(); while (low > 0) { var remainder = low % 26; result.Append((char) (remainder + 97)); //A -> 65 low /= 26; } for (var index = 0; index < result.Length / 2; index++) { var temp = result[index]; result[index] = result[result.Length - index - 1]; result[result.Length - index - 1] = temp; } var str = result.ToString(); return string.Format("{0}{1}", serverId, str); } public static string GetPlayerStringGuid(ulong GUID) { var serverId = (short) (GUID >> 48); var low = (int) (GUID & 0xFFFFFFFF); var result = new StringBuilder(); while (low > 0) { var remainder = low % 26; result.Append((char) (remainder + 97)); //A -> 65 low /= 26; } for (var index = 0; index < result.Length / 2; index++) { var temp = result[index]; result[index] = result[result.Length - index - 1]; result[result.Length - index - 1] = temp; } var str = result.ToString(); return string.Format("{0}{1}", serverId, str); } // 复制一个obj并绑定到父节点 public static GameObject BindObjToParent(GameObject resObject, GameObject parentObject, string name = null) { if (null == resObject || null == parentObject) return null; var newObj = Object.Instantiate(resObject); newObj.transform.parent = parentObject.transform; newObj.transform.localPosition = Vector3.zero; newObj.transform.localScale = Vector3.one; if (null != name) newObj.name = name; return newObj; } public static Color GetColorByString(string strColor) { var r = 0; var g = 0; var b = 0; if (strColor.Length == 8 && strColor.IndexOf("[") == 0 && strColor.IndexOf("]") == 7) strColor = strColor.Substring(1, 6); if (strColor.Length == 6) { var strR = strColor[0] + strColor[1].ToString(); var strG = strColor[2] + strColor[3].ToString(); var strB = strColor[4] + strColor[5].ToString(); r = Convert.ToInt32(strR, 16); g = Convert.ToInt32(strG, 16); b = Convert.ToInt32(strB, 16); } return new Color((float) r / 255, (float) g / 255, (float) b / 255); } // 界面道具等级颜色 public static string GetItemQualityColor(int nQuality, bool isFrenzy = false) { var strColor = StrDictionary.GetClientDictionaryString("#{5500}"); //if (isFrenzy) //{ // strColor = StrDictionary.GetClientDictionaryString("#{5803}"); //} //else //{ switch ((ItemQuality) nQuality) { case ItemQuality.QUALITY_WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5500}"); } break; case ItemQuality.QUALITY_GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5501}"); } break; case ItemQuality.QUALITY_BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5502}"); } break; case ItemQuality.QUALITY_PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5503}"); } break; case ItemQuality.QUALITY_PINK: { strColor = StrDictionary.GetClientDictionaryString("#{5504}"); } break; case ItemQuality.QUALITY_GOLD: { strColor = StrDictionary.GetClientDictionaryString("#{5505}"); } break; } //} return strColor; } /// /// 提示界面中道具品质颜色,其他界面的道具颜色,请用 GetItemQualityColor /// /// /// public static string GetQualityColorInTip(int nQuality, bool isFrenzy = false) { var strColor = StrDictionary.GetClientDictionaryString("#{5565}"); //if(isFrenzy) //{ // strColor= StrDictionary.GetClientDictionaryString("#{5804}"); //} //else //{ switch ((ItemQuality) nQuality) { case ItemQuality.QUALITY_WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5565}"); } break; case ItemQuality.QUALITY_GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5566}"); } break; case ItemQuality.QUALITY_BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5567}"); } break; case ItemQuality.QUALITY_PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5568}"); } break; case ItemQuality.QUALITY_PINK: { strColor = StrDictionary.GetClientDictionaryString("#{5569}"); } break; case ItemQuality.QUALITY_GOLD: { strColor = StrDictionary.GetClientDictionaryString("#{5570}"); } break; } //} return strColor; } public static string GetItemNameColor(int itemData, bool isBlack = false) { var commonItem = TableManager.GetCommonItemByID(itemData); if (commonItem != null) return GetItemQualityName(commonItem.Quality, commonItem.Name, isBlack); return ""; } public static string GetColorDisableRed() { return StrDictionary.GetClientDictionaryString("#{5526}"); } public static string GetColorEnableGreen() { return StrDictionary.GetClientDictionaryString("#{5525}"); } //时间戳转年月日 public static DateTime TimesToDateTime(long times) { var date = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); var span = new TimeSpan(times * 10000000L); var newTime = date.Add(span); return newTime; } public static string GetGradeString(int grade) { var strId = "#{" + (_gradeDescStrId + grade - 1) + "}"; return StrDictionary.GetClientDictionaryString(strId); } public static string GetTimeStr1(int needTime) { var hour = needTime / 3600; var min = (needTime - hour * 3600) / 60; var sec = needTime - hour * 3600 - min * 60; var needtimeStr = ""; if (hour <= 0) needtimeStr = string.Format("{0:D2}:{1:D2}", min, sec); else needtimeStr = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, min, sec); return needtimeStr; } public static string GetTimeStr(int needTime) { var hour = needTime / 3600; var min = (needTime - hour * 3600) / 60; var sec = needTime - hour * 3600 - min * 60; var needtimeStr = ""; if (hour <= 0) needtimeStr = StrDictionary.GetClientDictionaryString("#{1648}", min, sec); else needtimeStr = StrDictionary.GetClientDictionaryString("#{3195}", hour, min, sec); return needtimeStr; } /// /// 获取截止时间戳,计算剩余时间,返回的是String /// /// 截止时间戳 /// RemainTimesType /// public static string GetRemaintimeByEndTime(int endTime, RemainTimesType type = RemainTimesType.Day_Hour_Minutes_Second) { var remainTime = endTime - GlobalData.ServerAnsiTime; if (remainTime > 0) { var day = remainTime / 3600 / 24; var hour = (remainTime - day * 3600 * 24) / 3600; var min = (remainTime - day * 3600 * 24 - hour * 3600) / 60; var sec = remainTime - day * 3600 * 24 - hour * 3600 - min * 60; switch (type) { case RemainTimesType.Day: return StrDictionary.GetClientDictionaryString("#{86805}", day.ToString().PadLeft(2, '0')); case RemainTimesType.Day_Hour: return StrDictionary.GetClientDictionaryString("#{86806}", day.ToString().PadLeft(2, '0'), hour.ToString().PadLeft(2, '0')); case RemainTimesType.Day_Hour_Minutes: return StrDictionary.GetClientDictionaryString("#{86807}", day.ToString().PadLeft(2, '0'), hour.ToString().PadLeft(2, '0'), min.ToString().PadLeft(2, '0')); case RemainTimesType.Day_Hour_Minutes_Second: return StrDictionary.GetClientDictionaryString("#{86808}", day.ToString().PadLeft(2, '0'), hour.ToString().PadLeft(2, '0'), min.ToString().PadLeft(2, '0'), sec.ToString().PadLeft(2, '0')); case RemainTimesType.Hour_Minute: { hour = remainTime / 3600; min = (remainTime - hour * 3600) / 60; return StrDictionary.GetClientDictionaryString("#{86810}", hour.ToString().PadLeft(2, '0'), min.ToString().PadLeft(2, '0')); } case RemainTimesType.Hour_Minute_Second: { hour = remainTime / 3600; min = (remainTime - hour * 3600) / 60; sec = remainTime - hour * 3600 - min * 60; return StrDictionary.GetClientDictionaryString("#{86811}", hour.ToString().PadLeft(2, '0'), min.ToString().PadLeft(2, '0'), sec.ToString().PadLeft(2, '0')); } default: return "0"; } } return "0"; } public static string GetRareItemNameColor(int nQuality, bool isFrenzy = false) { var strColor = StrDictionary.GetClientDictionaryString("#{5506}"); if (isFrenzy) strColor = StrDictionary.GetClientDictionaryString("#{5805}"); else switch ((ItemQuality) nQuality) { case ItemQuality.QUALITY_WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5506}"); } break; case ItemQuality.QUALITY_GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5507}"); } break; case ItemQuality.QUALITY_BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5508}"); } break; case ItemQuality.QUALITY_PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5509}"); } break; case ItemQuality.QUALITY_PINK: { strColor = StrDictionary.GetClientDictionaryString("#{5510}"); } break; case ItemQuality.QUALITY_GOLD: { strColor = StrDictionary.GetClientDictionaryString("#{5511}"); } break; } return strColor; } public static string GetRareItemNameColorBlack(int nQuality) { var strColor = StrDictionary.GetClientDictionaryString("#{5548}"); switch ((ItemQuality) nQuality) { case ItemQuality.QUALITY_WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5548}"); } break; case ItemQuality.QUALITY_GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5549}"); } break; case ItemQuality.QUALITY_BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5550}"); } break; case ItemQuality.QUALITY_PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5551}"); } break; case ItemQuality.QUALITY_PINK: { strColor = StrDictionary.GetClientDictionaryString("#{5552}"); } break; case ItemQuality.QUALITY_GOLD: { strColor = StrDictionary.GetClientDictionaryString("#{5553}"); } break; } return strColor; } public static string GetItemQualityFrame(Tab_CommonItem tabItem) { //if (tabItem.ClassID == (int)ItemClass.EQUIP // || tabItem.ClassID == (int)ItemClass.MAGICITEM) { return GetItemQualityFrame(tabItem.Quality); } //return "quality_1"; } // isFrenzy 是否经过狂化 public static string GetItemQualityFrame(int quality, bool isSuper = false, bool isFrenzy = false) { switch ((ItemQuality) quality) { case ItemQuality.QUALITY_WHITE: return "quality_1"; case ItemQuality.QUALITY_GREEN: return "quality_2"; case ItemQuality.QUALITY_BLUE: return "quality_3"; case ItemQuality.QUALITY_PURPLE: return "quality_4"; case ItemQuality.QUALITY_PINK: if (isFrenzy) return "quality_7"; else return "quality_5"; case ItemQuality.QUALITY_GOLD: if (isFrenzy) return "quality_8"; else return "quality_6"; default: return "quality_0"; } } // 获得物品的等级背景 - 长条形 // isFrenzy 是否经过狂化 public static string GetItemQualityBG(int quality, bool isFrenzy = false) { if (isFrenzy) return "quality_BG_6"; switch ((ItemQuality) quality) { case ItemQuality.QUALITY_WHITE: return "quality_BG_1"; case ItemQuality.QUALITY_GREEN: return "quality_BG_2"; case ItemQuality.QUALITY_BLUE: return "quality_BG_3"; case ItemQuality.QUALITY_PURPLE: return "quality_BG_4"; case ItemQuality.QUALITY_PINK: return "quality_BG_5"; case ItemQuality.QUALITY_GOLD: return "quality_BG_6"; default: return "quality_BG_0"; } } public static string GetItemQualityName(int quality, string name, bool isBGBlack = false) { if (isBGBlack) return GetQualityColorInTip(quality) + name + ""; return GetItemQualityColor(quality) + name + ""; } public static string GetDisableColorText(string text) { return StrDictionary.GetClientDictionaryString("#{5512}") + text + ""; } public static string GetFellowQuilityStr(FELLOWQUALITY quilityType) { var IconPath = "#{6276}"; if (quilityType >= FELLOWQUALITY.ORANGE) IconPath = "#{6279}"; switch (quilityType) { case FELLOWQUALITY.BLUE: { IconPath = "#{6276}"; } break; case FELLOWQUALITY.PURPLE: { IconPath = "#{6277}"; } break; case FELLOWQUALITY.RED: { IconPath = "#{6278}"; } break; case FELLOWQUALITY.ORANGE: { IconPath = "#{6279}"; } break; } return IconPath; } public static string GetFellowQuilityIcon(int nQuality) { var IconPath = "quality_3"; if (nQuality >= (int) FELLOWQUALITY.ORANGE) IconPath = "quality_6"; var quilityType = (FELLOWQUALITY) nQuality; switch (quilityType) { case FELLOWQUALITY.WHITE: { IconPath = "quality_1"; } break; case FELLOWQUALITY.GREEN: { IconPath = "quality_2"; } break; case FELLOWQUALITY.BLUE: { IconPath = "quality_3"; } break; case FELLOWQUALITY.PURPLE: { IconPath = "quality_4"; } break; case FELLOWQUALITY.RED: { IconPath = "quality_5"; } break; case FELLOWQUALITY.ORANGE: { IconPath = "quality_6"; } break; } return IconPath; } //1白 2绿 3蓝 4紫 5红 6金 public static FELLOWQUALITY GetQualityIndex(int Quality) { //float quility = Quality * 1.0f / 100.0f; //服务器发过来的是整数,并且有乘以100 if (Quality >= 10) Quality = Quality / 100; if (Quality == 0) return FELLOWQUALITY.WHITE; if (Quality == 1) return FELLOWQUALITY.GREEN; if (Quality == 2) return FELLOWQUALITY.BLUE; if (Quality == 3) return FELLOWQUALITY.PURPLE; if (Quality == 4) return FELLOWQUALITY.ORANGE; if (Quality == 5) return FELLOWQUALITY.RED; return FELLOWQUALITY.ORANGE; } public static string GetFellowNameColor(int nQuality) { var strColor = StrDictionary.GetClientDictionaryString("#{5513}"); switch ((FELLOWQUALITY) nQuality) { case FELLOWQUALITY.WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5513}"); } break; case FELLOWQUALITY.GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5514}"); } break; case FELLOWQUALITY.BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5515}"); } break; case FELLOWQUALITY.PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5516}"); } break; case FELLOWQUALITY.RED: { strColor = StrDictionary.GetClientDictionaryString("#{5517}"); } break; case FELLOWQUALITY.ORANGE: { strColor = StrDictionary.GetClientDictionaryString("#{5518}"); } break; } return strColor; } public static string GetFellowNameColorInBlack(int nQuality) { var strColor = StrDictionary.GetClientDictionaryString("#{5565}"); switch ((FELLOWQUALITY) nQuality) { case FELLOWQUALITY.WHITE: { strColor = StrDictionary.GetClientDictionaryString("#{5565}"); } break; case FELLOWQUALITY.GREEN: { strColor = StrDictionary.GetClientDictionaryString("#{5566}"); } break; case FELLOWQUALITY.BLUE: { strColor = StrDictionary.GetClientDictionaryString("#{5567}"); } break; case FELLOWQUALITY.PURPLE: { strColor = StrDictionary.GetClientDictionaryString("#{5568}"); } break; case FELLOWQUALITY.RED: { strColor = StrDictionary.GetClientDictionaryString("#{5569}"); } break; case FELLOWQUALITY.ORANGE: { strColor = StrDictionary.GetClientDictionaryString("#{5570}"); } break; } return strColor; } public static string GetTitleColor(int nColorLevel, string title) { var strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5519}")); switch ((TITLE_COLORLEVEL) nColorLevel) { case TITLE_COLORLEVEL.COLOR_WHITE: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5519}")); } break; case TITLE_COLORLEVEL.COLOR_GREEN: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5520}")); } break; case TITLE_COLORLEVEL.COLOR_BLUE: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5521}")); } break; case TITLE_COLORLEVEL.COLOR_PURPLE: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5522}")); } break; case TITLE_COLORLEVEL.COLOR_ORANGE: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5523}")); } break; case TITLE_COLORLEVEL.COLOR_GOLD: { strColor = string.Format("{1}{0}", title, StrDictionary.GetClientDictionaryString("#{5524}")); } break; } return strColor; } public static string GetItemType(int nClassID, int nSubClassID, int propLimit) { var strType = ""; var itemClassTabs = TableManager.GetItemClassNameByID(nClassID); if (itemClassTabs == null) return strType; foreach (var itemNameTab in itemClassTabs) if (itemNameTab.SubClassID == -1 && string.IsNullOrEmpty(strType)) { strType = itemNameTab.Name; } else if (itemNameTab.SubClassID == nSubClassID) { if (itemNameTab.ProLimit == -1 && string.IsNullOrEmpty(strType)) { strType = itemNameTab.Name; } else if (itemNameTab.ProLimit == propLimit) { strType = itemNameTab.Name; break; } } if (string.IsNullOrEmpty(strType)) LogModule.ErrorLog("找不到对应类型名称:" + nClassID + "," + nSubClassID + "," + propLimit); return strType; } /// /// 过滤字 /// /// 原始字符 /// 过滤类型参考STRFILTER_TYPE /// 返回空未没有找到,找到后返回相应字符 public static string GetStrFilter(string str, int nFilterType) { if (nFilterType < (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT || nFilterType > (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_NAME) return null; if (str == null) return null; foreach (var strFilter in TableManager.GetStrFilter().Values) if (strFilter.GetTypebyIndex(nFilterType) && str.Contains(strFilter.SzString, StringComparison.Ordinal)) return strFilter.SzString; //return GameManager.gameManager.PlayerDataPool.GetAbuseFilter(str); return null; } public static void SendCGChatPak(string text, ChatHistoryItem historyReply, bool isGuidEnlist = false) { var packet = (CG_CHAT) PacketDistributed.CreatePacket(MessageID.PACKET_CG_CHAT); packet.Chattype = (int) historyReply.EChannel; if (packet.Chattype == (int) CG_CHAT.CHATTYPE.CHAT_TYPE_TELL || packet.Chattype == (int) CG_CHAT.CHATTYPE.CHAT_TYPE_FRIEND) { var tellGuid = GlobeVar.INVALID_GUID; var tellName = ""; tellGuid = historyReply.ReceiverGuid; tellName = historyReply.ReceiverName; // 设置私聊对象同时去掉聊天信息中的"/对象名" packet.Receiverguid = tellGuid; packet.Receivername = tellName; } packet.Chatinfo = text; LogModule.DebugLog("send chat:" + text); if (isGuidEnlist) //任意值标示当前是帮派招募 packet.AddIntdata(1); packet.SendPacket(); } public static void SendLoudSpeaker(string text, int num) { var packet = (CG_CHAT) PacketDistributed.CreatePacket(MessageID.PACKET_CG_CHAT); packet.Chattype = (int) CG_CHAT.CHATTYPE.CHAT_TYPE_LOUDSPEAKER; //text = LoudSpeakerLogic.Instance().InsertLinkSymbols(text); packet.Chatinfo = text; packet.LoudSpeakerNum = num; //WriteLinkToCGChat(packet, LoudSpeakerLogic.Instance().ChatLinkType, true); // LoudSpeakerLogic.Instance().ClearLinkBuffer(); packet.SendPacket(); } public static void SendGMCommand(string cmd) { var packet = (CG_GMCOMMAND) PacketDistributed.CreatePacket(MessageID.PACKET_CG_GMCOMMAND); packet.Cmd = cmd; packet.SendPacket(); } // 将时间间隔格式化对应标签上 public static void SetTimeDiffToLabel(Text label, int timeDiff) { if (timeDiff <= 0) label.text = "00:00:00"; else label.text = string.Format("{0,2:D2}:{1,2:D2}:{2,2:D2}", timeDiff / 3600, timeDiff % 3600 / 60, timeDiff % 60); } public static string GetTimeDiffFormatString(int timeDiff) { if (timeDiff <= 0) return "00:00:00"; return string.Format("{0,2:D2}:{1,2:D2}:{2,2:D2}", timeDiff / 3600, timeDiff % 3600 / 60, timeDiff % 60); } // 清除GRID所有子ITEM public static void CleanGrid(GameObject grid) { if (null == grid) return; for (int i = 0, count = grid.transform.childCount; i < count; i++) Object.Destroy(grid.transform.GetChild(i).gameObject); grid.transform.DetachChildren(); } public static string StrFilter_Chat(string strChat) { var text = strChat; var strFilter = GetStrFilter(text, (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT); var count = 20; while (strFilter != null && count > 0) { text = text.Replace(strFilter, "*"); strFilter = GetStrFilter(text, (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT); count--; } return text; } public static bool IsStrFilter_Chat(string strChat) { var text = strChat; var strFilter = GetStrFilter(text, (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT); if (strFilter != null) return true; return false; } public static string StrFilter_Abuse(string strChat) { var text = strChat; var strFilter = GameManager.gameManager.PlayerDataPool.GetAbuseFilter(text); var count = 20; while (strFilter != null && count > 0) { text = text.Replace(strFilter, "*"); strFilter = GameManager.gameManager.PlayerDataPool.GetAbuseFilter(text); count--; } return text; } public static bool IsStrFilter_Abuse(string strChat) { var text = strChat; var strFilter = GameManager.gameManager.PlayerDataPool.GetAbuseFilter(text); if (strFilter != null) return true; return false; } public static string StrFilter_Mail(string strMailText) { var text = strMailText; var strFilter = GetStrFilter(text, (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT); var count = 20; while (strFilter != null && count > 0) { text = text.Replace(strFilter, "*"); strFilter = GetStrFilter(text, (int) GameDefine_Globe.STRFILTER_TYPE.STRFILTER_CHAT); count--; } return text; } // public static GameObject LoadUIItem(GameObject parent, string name, UIPathData uiData) // { // GameObject resObj = ResourceManager.LoadResource(uiData.path) as GameObject; // GameObject curItem = Utils.BindObjToParent(resObj, parent); // curItem.name = name; // return curItem; // } // 简单的获取表中的一个ID对应的文字。 public static string GetDicByID(int dicID) { return StrDictionary.GetClientDictionaryString("#{" + dicID + "}"); } public static Quaternion DirServerToClient(float rad) { return Quaternion.Euler(0, 90.0f - rad * 180.0f / Mathf.PI, 0); } public static float DirClientToServer(Quaternion rotate) { return Mathf.PI * 0.5f - rotate.eulerAngles.y * Mathf.PI / 180.0f; } //转化到0-2PI范围内 public static float NormaliseDirection(float fDirection) { var _2PI = (float) (Math.PI * 2); var fRetValue = fDirection; if (fRetValue >= _2PI) { fRetValue -= (int) (fDirection / _2PI) * _2PI; fRetValue = fRetValue > 0.0F ? fRetValue : 0.0f; fRetValue = fRetValue < _2PI ? fRetValue : _2PI; } else if (fRetValue < 0) { fRetValue += ((int) (-fDirection / _2PI) + 1) * _2PI; fRetValue = fRetValue > 0.0F ? fRetValue : 0.0f; fRetValue = fRetValue < _2PI ? fRetValue : _2PI; } return fRetValue; } //获取当前平台StreamingAsset路径 public static string GetStreamingAssetPath() { var strStreamingPath = ""; if (Application.platform == RuntimePlatform.IPhonePlayer) strStreamingPath = Application.dataPath + "/Raw"; else if (Application.platform == RuntimePlatform.Android) strStreamingPath = Application.streamingAssetsPath; else //strStreamingPath = "file://" + Application.streamingAssetsPath; WWW strStreamingPath = Application.streamingAssetsPath; //File return strStreamingPath; } // 获取属性类型字典 public static string GetAttrTypeString(int type) { if (CharacterDefine.AttrTable.ContainsKey(type)) return GetDicByID(CharacterDefine.AttrTable[type]); return ""; } public static void CheckTargetPath(string targetPath) { targetPath = targetPath.Replace('\\', '/'); var dotPos = targetPath.LastIndexOf('.'); var lastPathPos = targetPath.LastIndexOf('/'); if (dotPos > 0 && lastPathPos < dotPos) targetPath = targetPath.Substring(0, lastPathPos); if (Directory.Exists(targetPath)) return; var subPath = targetPath.Split('/'); var curCheckPath = ""; var subContentSize = subPath.Length; for (var i = 0; i < subContentSize; i++) { curCheckPath += subPath[i] + '/'; if (!Directory.Exists(curCheckPath)) Directory.CreateDirectory(curCheckPath); } } public static void CheckTargetPath(string root, string targetPath) { if (!Directory.Exists(root)) Directory.CreateDirectory(root); targetPath = targetPath.Replace('\\', '/'); var dotPos = targetPath.LastIndexOf('.'); var lastPathPos = targetPath.LastIndexOf('/'); if (dotPos > 0 && lastPathPos < dotPos && lastPathPos > 0) targetPath = targetPath.Substring(0, lastPathPos); if (Directory.Exists(root + targetPath)) return; if (lastPathPos < 0) return; var subPath = targetPath.Split('/'); var curCheckPath = root; var subContentSize = subPath.Length; for (var i = 0; i < subContentSize; i++) { curCheckPath += subPath[i] + '/'; if (!Directory.Exists(curCheckPath)) Directory.CreateDirectory(curCheckPath); } } public static void DeleteFolder(string path) { if (!Directory.Exists(path)) return; string[] strTemp; //先删除该目录下的文件 strTemp = Directory.GetFiles(path); foreach (var str in strTemp) File.Delete(str); //删除子目录,递归 strTemp = Directory.GetDirectories(path); foreach (var str in strTemp) DeleteFolder(str); } // 拷贝一个路径下所有的文件,不包含子目录 public static void CopyPathFile(string srcPath, string distPath) { if (!Directory.Exists(srcPath)) return; CheckTargetPath(distPath); var strLocalFile = Directory.GetFiles(srcPath); foreach (var curFile in strLocalFile) File.Copy(curFile, distPath + "/" + Path.GetFileName(curFile), true); } // 获取MD5 public static string GetMD5Hash(string pathName) { var strResult = ""; var strHashData = ""; #if !UNITY_WP8 byte[] arrbytHashValue; #endif FileStream oFileStream = null; var oMD5Hasher = new MD5CryptoServiceProvider(); try { oFileStream = new FileStream(pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); #if UNITY_WP8 strHashData = oMD5Hasher.ComputeHash(oFileStream); oFileStream.Close(); #else arrbytHashValue = oMD5Hasher.ComputeHash(oFileStream); oFileStream.Close(); strHashData = BitConverter.ToString(arrbytHashValue); strHashData = strHashData.Replace("-", ""); #endif strResult = strHashData; } catch (Exception ex) { LogModule.ErrorLog("read md5 file error :" + pathName + " e: " + ex); } return strResult; } //登录场景播放音乐,其他地方不要使用 public static void PlaySceneMusic(int nSoundID) { if (null == GameManager.gameManager.SoundManager) return; // // Tab_Sounds soundsTab = TableManager.GetSoundsByID(nSoundID, 0); // if (soundsTab == null) // { // return; // } GameManager.gameManager.SoundManager.PlayBGMusic(nSoundID); } public static string ConvertLargeNumToString(int num) { if (num >= 1000000) // 超过100w的显示xx万 return StrDictionary.GetClientDictionaryString("#{2224}", num / 10000); return num.ToString(); } public static string ConvertLargeNumToString(long num) { if (num >= 1000000) // 超过100w的显示xx万 return StrDictionary.GetClientDictionaryString("#{2224}", num / 10000); return num.ToString(); } public static string ConvertLargeNumToPretty(int num) { if (num >= 100000000) // 超过100w的显示xx万 return StrDictionary.GetClientDictionaryString("#{6757}", num / 100000000); if (num >= 10000) return StrDictionary.GetClientDictionaryString("#{2224}", num / 10000); return num.ToString(); } public static int GetIntNumber(int src, int start, int len) { if (start < 0 || start > 9) return GlobeVar.INVALID_ID; if (len < 1) return GlobeVar.INVALID_ID; var result = 0; for (var i = 0; i < len; i++) result += src / (int) Mathf.Pow(10, start + i) % 10 * (int) Mathf.Pow(10, i); return result; } public static bool SetIntNumber(ref int src, int start, int len, int val) { if (start < 0 || start > 9) return false; if (len < 1) return false; if (val >= Mathf.Pow(10, len)) return false; for (var i = 0; i < len; i++) { src -= src / (int) Mathf.Pow(10, start + i) % 10 * (int) Mathf.Pow(10, start + i); src += val / (int) Mathf.Pow(10, i) % 10 * (int) Mathf.Pow(10, start + i); } return true; } public static string NumStr(int Num) { if (Num > 10 && Num < 100) { var tens = Num / 10; var tensStr = NumToStr(tens); var single = Num % 10; var singleStr = NumToStr(single); var tenStr = NumToStr(10); if (tens == 1) tensStr = ""; if (single == 0) singleStr = ""; return tensStr + tenStr + singleStr; } return NumToStr(Num); } private static string NumToStr(int Num) { switch (Num) { case 0: return StrDictionary.GetClientDictionaryString("#{9921}"); case 1: return StrDictionary.GetClientDictionaryString("#{9907}"); case 2: return StrDictionary.GetClientDictionaryString("#{9908}"); case 3: return StrDictionary.GetClientDictionaryString("#{9909}"); case 4: return StrDictionary.GetClientDictionaryString("#{9910}"); case 5: return StrDictionary.GetClientDictionaryString("#{9911}"); case 6: return StrDictionary.GetClientDictionaryString("#{9912}"); case 7: return StrDictionary.GetClientDictionaryString("#{9913}"); case 8: return StrDictionary.GetClientDictionaryString("#{9914}"); case 9: return StrDictionary.GetClientDictionaryString("#{9915}"); case 10: return StrDictionary.GetClientDictionaryString("#{9916}"); case 100: return StrDictionary.GetClientDictionaryString("#{9917}"); case 1000: return StrDictionary.GetClientDictionaryString("#{9918}"); case 10000: return StrDictionary.GetClientDictionaryString("#{9919}"); case 100000000: return StrDictionary.GetClientDictionaryString("#{9920}"); } return ""; } public static bool GetFileInt(string path, out int retInt) { try { if (!File.Exists(path)) { retInt = 0; return false; } var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); var sr = new StreamReader(fs); var text = sr.ReadToEnd(); sr.Close(); fs.Close(); if (!int.TryParse(text, out retInt)) { LogModule.ErrorLog("parse int error path:" + path); return false; } return true; } catch (Exception ex) { LogModule.ErrorLog(ex.ToString()); retInt = 0; return false; } } public static bool GetFileLong(string path, out long retLong) { try { if (!File.Exists(path)) { retLong = 0; return false; } var text = File.ReadAllText(path); if (!long.TryParse(text, out retLong)) { LogModule.ErrorLog("parse int error path:" + path); return false; } return true; } catch (Exception ex) { LogModule.ErrorLog(ex.ToString()); retLong = 0; return false; } } public static bool WriteStringToFile(string path, string text) { var result = false; try { File.WriteAllText(path, text); result = true; } catch (Exception ex) { LogModule.ErrorLog(ex.ToString()); } return result; } // public static bool GenerateResFileList(string path, Dictionary dicFileInfo) // { // try // { // CheckTargetPath(path); // // var streamWriter = new StreamWriter(path); // // foreach (var dicFile in dicFileInfo) // streamWriter.WriteLine(dicFile.Key + ":" + dicFile.Value.md5 + ":" + dicFile.Value.size + ":" + // dicFile.Value.resLevel); // streamWriter.Close(); // // // return true; // } // catch (Exception ex) // { // LogModule.ErrorLog(ex.ToString()); // return false; // } // } // // public static void GetResFileList(string path, ref Dictionary dicFileInfo) // { // var xmlRemote = new XmlDocument(); // xmlRemote.Load(path); // // // var fileRootRemote = (XmlElement) xmlRemote.FirstChild; // // foreach (XmlElement fileInfoNode in fileRootRemote.ChildNodes) // { // var fileInfo = new UpdateHelper.FileInfo(); // foreach (XmlElement fileInfoChildNode in fileInfoNode.ChildNodes) // if (fileInfoChildNode.Name == "path") // dicFileInfo.Add(fileInfoChildNode.InnerText, fileInfo); // else if (fileInfoChildNode.Name == "md5") // fileInfo.md5 = fileInfoChildNode.InnerText; // else if (fileInfoChildNode.Name == "size") // fileInfo.size = long.Parse(fileInfoChildNode.InnerText); // else if (fileInfoChildNode.Name == "level") fileInfo.level = int.Parse(fileInfoChildNode.InnerText); // } // } public static Tab_SkillEx GetSkillidByLevel(int skillid, int level) { var _skillExinfo = TableManager.GetSkillExByID(skillid); if (_skillExinfo == null) return null; var nextSkill = _skillExinfo; for (var i = 0; i < level; i++) { nextSkill = TableManager.GetSkillExByID(nextSkill.NextSkillId); if (nextSkill == null) return null; } return nextSkill; } public static void GetSweepCounts(ref int curCount, ref int maxCount) { curCount = 0; maxCount = 0; var nSweep = GameManager.gameManager.PlayerDataPool.CommonData.GetCommonData( (int) USER_COMMONDATA.CD_COPYSCENE_CANGJINGGE_SWEEP); var nMul = GameManager.gameManager.PlayerDataPool.CommonData.GetCopySceneMultiple(14); maxCount = nMul * 3; //策划要求不显示花费元宝的那些次数,计算参照OnSweepClick //curCount = maxCount - nSweep; if (nSweep >= nMul) curCount = 0; else curCount = nMul - nSweep; } public static string GenCodeWithSelfGuid(ShareType nShareType) { if (Singleton.Instance.MainPlayer != null) { var guid = Singleton.Instance.MainPlayer.GUID; var high = (uint) (guid >> 32); var serial = (uint) (guid & 0xffffffff); var worldId = (ushort) ((high >> 16) & 0xffff); var carry = (byte) (high & 0xff); var randKey = (uint) Random.Range(1000, 10000); randKey = randKey & 0xfffc7fff; if (nShareType == ShareType.ShareType_SNS) randKey = randKey | 0x00000000; else if (nShareType == ShareType.ShareType_NanGua) randKey = randKey | 0x00008000; else randKey = randKey | 0x00038000; return string.Format("{0}-{1}-{2}-{3}", worldId, carry, serial, randKey); } return ""; } public static string GenServerNameWithSelfGuid() { if (Singleton.Instance.MainPlayer != null) { var guid = Singleton.Instance.MainPlayer.GUID; var high = (uint) (guid >> 32); var worldId = (ushort) ((high >> 16) & 0xffff); var curData = LoginData.GetServerListDataByID(worldId); if (null != curData) return curData.m_name; } return ""; } public static string GetMarryRingString(GameItem item) { if (item != null && item.DataID == GlobeVar.MARRY_RING_ITEMID) { //no data if (item.DynamicData[0] == 0 && item.DynamicData[1] == 0 && item.DynamicData[2] == 0 && item.DynamicData[3] == 0 && item.DynamicData[4] == 0 && item.DynamicData[5] == 0) return ""; //(6/8)Dynamic const int LEN = 6; var byteArray = new byte[4 * LEN]; for (var i = 0; i < LEN; ++i) { var temp = BitConverter.GetBytes(item.DynamicData[i]); Array.Copy(temp, 0, byteArray, 0 + 4 * i, 4); } #if UNITY_WP8 string desString = System.Text.Encoding.UTF8.GetString(byteArray,0,byteArray.Length); #else var desString = Encoding.UTF8.GetString(byteArray); #endif return "\n" + StrDictionary.GetClientDictionaryString("#{3290}", desString); } return ""; } public static ulong GetMarryRingGUID(GameItem item) { if (item.DataID == GlobeVar.MARRY_RING_ITEMID) { } return GlobeVar.INVALID_GUID; } public static DateTime GetServerDateTime() { var curDate = new DateTime(GlobalData.ServerAnsiTime * 10000000L + m_startTime.Ticks, DateTimeKind.Utc); curDate = curDate.AddHours(8); //调到北京时间 //curDate = curDate.ToLocalTime(); return curDate; } public static DateTime GetServerDateTime(int serverTime) { var curDate = new DateTime(serverTime * 10000000L + m_startTime.Ticks, DateTimeKind.Utc); curDate = curDate.AddHours(8); //调到北京时间 //curDate = curDate.ToLocalTime(); return curDate; } public static DateTime GetServerDateTime(long serverTime) { var curDate = new DateTime(serverTime * 10000000L + m_startTime.Ticks, DateTimeKind.Utc); curDate = curDate.AddHours(8); //调到北京时间 //curDate = curDate.ToLocalTime(); return curDate; } public static ulong DateTimeToServerTime(DateTime dateTime) { var serverTime = (ulong) ((dateTime.Ticks - m_startTime.Ticks) / 10000000L); return serverTime; } public static int GetRemainTime(ulong overTime) { return (int) overTime - GlobalData.ServerAnsiTime; } public static string GetProfession(int nProfession) { switch ((CharacterDefine.PROFESSION) nProfession) { case CharacterDefine.PROFESSION.TIANJI: { return StrDictionary.GetClientDictionaryString("#{1178}"); } case CharacterDefine.PROFESSION.SHUSHAN: { return StrDictionary.GetClientDictionaryString("#{1180}"); } case CharacterDefine.PROFESSION.LIUSHAN: { return StrDictionary.GetClientDictionaryString("#{1179}"); } case CharacterDefine.PROFESSION.XUANNV: { return StrDictionary.GetClientDictionaryString("#{1181}"); } default: return ""; } } public static string GetProfessionSpriteName(int nProfession) { switch ((CharacterDefine.PROFESSION) nProfession) { case CharacterDefine.PROFESSION.TIANJI: { return "TianJiHead"; } case CharacterDefine.PROFESSION.SHUSHAN: { return "ShuShanHead"; } case CharacterDefine.PROFESSION.LIUSHAN: { return "LiuSanHead"; } case CharacterDefine.PROFESSION.XUANNV: { return "XuannvHead"; } default: return ""; } } public static string GetProfessionIconName(CharacterDefine.PROFESSION nProfession) { switch (nProfession) { case CharacterDefine.PROFESSION.TIANJI: { return "ProTianji"; } case CharacterDefine.PROFESSION.SHUSHAN: { return "ProShushan"; } case CharacterDefine.PROFESSION.LIUSHAN: { return "ProLiushan"; } case CharacterDefine.PROFESSION.XUANNV: { return "ProXuannv"; } default: return ""; } } public static string GetCaptainLevelIcon(int captainLevel) { var teamLeaderAwardLevelTab = TableManager.GetTeamLeaderAwardLevelByID(captainLevel); if (teamLeaderAwardLevelTab == null) return ""; return teamLeaderAwardLevelTab.IconPath; //return string.Format("captainlevel{0}", Mathf.Clamp(GameManager.gameManager.PlayerDataPool.TeamInfo.CaptainLevel, 1, 6)); } public static string GetProfessionIconName2(CharacterDefine.PROFESSION nProfession) { switch (nProfession) { case CharacterDefine.PROFESSION.TIANJI: { return "ProTianji2"; } case CharacterDefine.PROFESSION.SHUSHAN: { return "ProShushan2"; } case CharacterDefine.PROFESSION.LIUSHAN: { return "ProLiushan2"; } case CharacterDefine.PROFESSION.XUANNV: { return "ProXuannv2"; } default: return ""; } } public static ChatGender GetProfessionGender(int nProfession) { if (nProfession == (int) CharacterDefine.PROFESSION.LIUSHAN || nProfession == (int) CharacterDefine.PROFESSION.XUANNV) return ChatGender.Female; return ChatGender.Male; } public static string GetSysIconName(SysIconType sysIcon) { switch (sysIcon) { case SysIconType.None: return "shenmiren"; case SysIconType.AI: return "AIHead"; case SysIconType.Sys: return "SystemHead"; case SysIconType.Guild: return "GuildHead"; } return ""; } //Unity物体操作有关 克隆物体 public static GameObject CloneObj(GameObject OldObj) { if (OldObj == null) return null; var newObj = Object.Instantiate(OldObj); if (newObj == null) return null; newObj.SetActive(true); newObj.transform.SetParent(OldObj.transform.parent); newObj.transform.localPosition = OldObj.transform.localPosition; newObj.transform.localScale = OldObj.transform.localScale; return newObj; } public static void AddChildObj() { } public static string GetTimeChinaStr(int timeSeconds) { var hou = timeSeconds / 3600; var mm = (timeSeconds - hou * 3600) / 60; var sec = timeSeconds - hou * 3600 - mm * 60; if (hou <= 0 && mm <= 0) return StrDictionary.GetClientDictionaryString("#{1794}", sec); if (hou <= 0) return StrDictionary.GetClientDictionaryString("#{2448}", mm) + StrDictionary.GetClientDictionaryString("#{1794}", sec); return StrDictionary.GetClientDictionaryString("#{2447}", hou) + StrDictionary.GetClientDictionaryString("#{2448}", mm) + StrDictionary.GetClientDictionaryString("#{1794}", sec); } public static string GetTimeStr(float timeSeconds) { var day = 0; var hour = 0; var minute = 0; var second = 0; if (timeSeconds <= 0) return "00:00"; day = Mathf.FloorToInt(timeSeconds / (3600 * 24)); hour = Mathf.FloorToInt((timeSeconds - day * 3600 * 24) / 3600); minute = Mathf.FloorToInt((timeSeconds - day * 3600 * 24 - hour * 3600) / 60); second = Mathf.FloorToInt(timeSeconds - day * 3600 * 24 - hour * 3600 - minute * 60); var result = ""; if (day > 0) result = string.Format("{0}:{1}", result, day); if (hour > 0) result = string.Format("{0}:{1}", result, GetNumStr(hour)); result = string.Format("{0}:{1}", result, GetNumStr(minute)); result = string.Format("{0}:{1}", result, GetNumStr(second)); while (result.Length > 0) if (result[0] == ':') result = result.Remove(0, 1); else break; return result; } public static string GetNumStr(int data) { if (data >= 10) return data.ToString(); return string.Format("0{0}", data); } public static string GetChinaNum(char ch) { switch (ch) { case '1': return StrDictionary.GetClientDictionaryString("#{9907}"); case '2': return StrDictionary.GetClientDictionaryString("#{9908}"); case '3': return StrDictionary.GetClientDictionaryString("#{9909}"); case '4': return StrDictionary.GetClientDictionaryString("#{9910}"); case '5': return StrDictionary.GetClientDictionaryString("#{9911}"); case '6': return StrDictionary.GetClientDictionaryString("#{9912}"); case '7': return StrDictionary.GetClientDictionaryString("#{9913}"); case '8': return StrDictionary.GetClientDictionaryString("#{9914}"); case '9': return StrDictionary.GetClientDictionaryString("#{9915}"); case '0': return StrDictionary.GetClientDictionaryString("#{9921}"); } return ""; } public static string GetChinaNumStr(int num) { return string.Empty; // ??????????????? //string data = ""; //int index = 0; //while(num>0) //{ // int residue = num % 10; //} //return data; } public static void ResetShader(GameObject newObj) { #if UNITY_EDITOR && UNITY_ANDROID var renders = newObj.GetComponentsInChildren(); for (var i = 0; i < renders.Length; i++) { var render = renders[i]; if (render == null) continue; for (var j = 0; j < render.sharedMaterials.Length; j++) if (render.sharedMaterials[j] != null && render.sharedMaterials[j].shader != null) { var shader = Shader.Find(render.sharedMaterials[j].shader.name); render.sharedMaterials[j].shader = shader; } } #endif } // public static bool InitMeshRenderWeapon(GameObject ModelObj,GameObject weaponModel, string strWeaponPoint) // { // if (ModelObj == null || weaponModel == null) // return false; // // Transform weaponOld = null; // // //加 脚本节点方式先不使用,看后面需求 // WeaponAddPoint[] points = ModelObj.GetComponentsInChildren(); // for (int i = 0; i < points.Length; i++) // { // WeaponAddPoint point = points[i]; // if (point.pointName == strWeaponPoint) // { // weaponOld = point.transform; // WeaponAddPoint pointNew = weaponModel.GetComponent(); // if (pointNew == null) // { // pointNew = weaponModel.AddComponent(); // } // if (pointNew != null) // { // pointNew.pointName = strWeaponPoint; // } // break; // } // } // Transform weaponParent = null; // if (weaponOld == null) // { // Transform Model = ModelObj.transform.Find("Model"); // if (Model == null) // return false; // weaponParent = Model.Find(strWeaponPoint); // if (weaponParent == null) // return false; // if (weaponParent.childCount <= 0) // return false; // weaponOld = weaponParent.GetChild(0); // } // if (weaponParent == null) // { // return false; // } // // weaponModel.transform.parent = weaponParent; // weaponModel.layer = weaponOld.parent.gameObject.layer; // Transform[] transforms = weaponModel.GetComponentsInChildren(); // for (int i = 0; i < transforms.Length; i++) // { // transforms[i].gameObject.layer = weaponOld.parent.gameObject.layer; // } // weaponModel.transform.localPosition = weaponOld.localPosition; // weaponModel.transform.localScale = weaponOld.localScale; // weaponModel.transform.localRotation = weaponOld.localRotation; // weaponOld.parent = null; // weaponOld.gameObject.SetActive(false); // GameObject.Destroy(weaponOld.gameObject); // return true; // } // // public static bool InitSkinMeshRenderWeapon(GameObject ModelObj, GameObject weaponModel, string strWeaponPoint) // { // if (ModelObj == null || weaponModel == null) // return false; // // Transform weaponOld = null; // // //加 脚本节点方式先不使用,看后面需求 // WeaponAddPoint[] points = ModelObj.GetComponentsInChildren(); // WeaponAddPoint pointNew = weaponModel.GetComponent(); // for (int i = 0; i < points.Length; i++) // { // WeaponAddPoint point = points[i]; // if (point.pointName.ToLower() == strWeaponPoint.ToLower()) // { // weaponOld = point.transform; // if (pointNew == null) // { // pointNew = weaponModel.AddComponent(); // } // if (pointNew != null) // { // pointNew.pointName = strWeaponPoint; // } // break; // } // } // // if (weaponOld == null) // { // Transform Model = null; // if (ModelObj.name == "Model") // { // Model = ModelObj.transform; // } // else // { // Model = ModelObj.transform.Find("Model"); // } // if (Model == null) // return false; // Transform weaponParent = Model.transform.Find(strWeaponPoint); // if (weaponParent == null) // return false; // if (weaponParent.childCount <= 0) // return false; // weaponOld = weaponParent.GetChild(0); // } // Transform wesponParent = weaponOld.parent; // if (wesponParent == null) // { // return false; // } // weaponModel.transform.parent = wesponParent; // weaponModel.layer = weaponOld.parent.gameObject.layer; // Transform[] transforms = weaponModel.GetComponentsInChildren(); // for (int i = 0; i < transforms.Length; i++) // { // transforms[i].gameObject.layer = weaponOld.parent.gameObject.layer; // } // weaponModel.transform.localPosition = weaponOld.localPosition; // weaponModel.transform.localScale = weaponOld.localScale; // weaponModel.transform.localEulerAngles = weaponOld.localEulerAngles; // // SkinnedMeshRenderer skinNew = weaponModel.GetComponentInChildren(); // SkinnedMeshRenderer skinOld = weaponOld.GetComponentInChildren(); // if (skinNew == null || skinOld == null) // return false; // // Transform[] Bones = new Transform[skinNew.bones.Length]; // Transform[] ModelBones = ModelObj.transform.GetComponentsInChildren(true); // int iCount = skinNew.bones.Length; // for (int i = 0; i < iCount; i++) // { // if (skinNew.bones[i]) // { // if (skinOld.bones.Length <= i || skinOld.bones[i]==null) // break; // Bones[i] = Utils.FindNode(ModelBones, skinOld.bones[i].name); // } // } // // skinNew.rootBone = skinOld.rootBone; // skinNew.bones = Bones; // skinNew.updateWhenOffscreen = skinOld.updateWhenOffscreen; // skinNew.localBounds = skinOld.localBounds; // weaponOld.parent = null; // weaponOld.gameObject.SetActive(false); // GameObject.Destroy(weaponOld.gameObject); // return true; // } //寻找子物体 public static Transform FindChild(Transform parent, string childPath) { if (parent == null) return null; var child = parent.Find(childPath); return child; } public static Transform FindNode(Transform[] nodes, string name) { for (var i = 0; i < nodes.Length; i++) if (nodes[i].name == name) return nodes[i]; return null; } public static T GetChildComponent(Transform parant, string childPath) { if (parant != null) { var child = FindChild(parant, childPath); if (child != null) return child.gameObject.GetComponent(); } return default(T); } public static bool EnterCopy(int fubenID) { if (fubenID == GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID) { GUIData.AddNotifyData("#{49030}"); return false; } var req = (CG_REQ_ENTER_COPY) PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ENTER_COPY); req.SetCopyid(fubenID); req.SendPacket(); return true; } public static bool IsCanPK(int nSceneClassID) { var tabSceneClass = TableManager.GetSceneClassByID(nSceneClassID); if (tabSceneClass != null) { var nPVPRule = tabSceneClass.PVPRule; var tabRule = TableManager.GetPVPRuleByID(nPVPRule); if (tabRule != null) return true; } return false; } public static bool IsIncPKValue(int nSceneClassID) { var tabSceneClass = TableManager.GetSceneClassByID(nSceneClassID); if (tabSceneClass != null) { var nPVPRule = tabSceneClass.PVPRule; var tabRule = TableManager.GetPVPRuleByID(nPVPRule); if (tabRule != null) return tabRule.IsIncPKValue == 1 ? true : false; } return false; } public static Vector3 GetInputPostion(int fingerId = -1) { var pos = Vector3.zero; if (Input.touchPressureSupported) { if (Input.touchCount > 0) { if (fingerId >= 0) for (var i = 0; i < Input.touchCount; i++) if (Input.touches[i].fingerId == fingerId) { pos = Input.touches[i].position; return pos; } var touch = Input.GetTouch(Input.touchCount - 1); pos = touch.position; } } else { pos = Input.mousePosition; } return pos; } public static Vector3 PositionToRectLocal(RectTransform rect, Vector3 position) { if (rect == null) return Vector3.zero; if (UIManager.Instance().Canvas.renderMode == RenderMode.ScreenSpaceCamera) { var localPosition = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, position, UIManager.Instance().UICamera, out localPosition); return new Vector3(localPosition.x, localPosition.y, 0); } return rect.InverseTransformPoint(position); } //constType == 3 物品 constSubType为物品ID //constType == 4 金钱 constSubType货币类型ID public static int GetConstPrice(int constType, int constSubType, int moneyType, out int omoneyType) { omoneyType = (int) MONEYTYPE.MONEYTYPE_YUANBAO; switch (constType) { case 3: { var shops = TableManager.GetYuanBaoShop().Values; foreach (var shop in shops) if ((moneyType == -1 || shop.MoneyType == moneyType) && shop.ItemID == constSubType) { omoneyType = shop.MoneyType; return shop.PriceForever; } } break; case 4: { return 1; } } return 0; } public static Texture2D CaptureScreen(Camera came = null, string savePath = "") { if (came == null) came = Camera.main; if (came == null) return null; var r = new Rect(0, 0, Screen.width, Screen.height); if (came.pixelRect.x != 1 || came.pixelRect.y != 1) r = came.pixelRect; var rt = new RenderTexture((int) r.width, (int) r.height, 0); var Old = came.clearFlags; came.clearFlags = CameraClearFlags.Depth; came.targetTexture = rt; came.Render(); RenderTexture.active = rt; var screenShot = new Texture2D((int) r.width, (int) r.height, TextureFormat.ARGB32, false); screenShot.ReadPixels(r, 0, 0); screenShot.Apply(); came.targetTexture = null; RenderTexture.active = null; came.clearFlags = Old; Object.Destroy(rt); var bytes = screenShot.EncodeToPNG(); File.WriteAllBytes(savePath, bytes); return screenShot; } public static string GetconstQuilityStr(int constType, int constSubType) { switch (constType) { case 3: { var commonItem = TableManager.GetCommonItemByID(constSubType); if (commonItem != null) return GetItemQualityFrame(commonItem.Quality); } break; case 4: { return GetItemQualityFrame(3); } } return GetItemQualityFrame(1); } public static string GetConstIcon(int constType, int constSubType) { switch (constType) { case 3: { var commonItem = TableManager.GetCommonItemByID(constSubType); if (commonItem != null) return commonItem.Icon; } break; case 4: { return UICurrencyItem.GetCurrencySprite((MONEYTYPE) constSubType); } } return ""; } public static string GetConstName(int constType, int constSubType) { switch (constType) { case 3: { var commonItem = TableManager.GetCommonItemByID(constSubType); if (commonItem != null) return commonItem.Name; } break; case 4: { return StrDictionary.GetClientStrMoneyType((MONEYTYPE) constSubType); } } return ""; } public static long GetConstHas(int constType, int constSubType) { switch (constType) { case 3: { return GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(constSubType); } case 4: { return GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType((MONEYTYPE) constSubType); } } return -1; } public static bool SetObjInputPosition(GameObject child, RectTransform rect = null) { var pos = GetInputPostion(); if (child != null && child.transform.parent != null) { if (rect == null) rect = child.transform.parent.GetComponent(); if (rect != null) { child.transform.localPosition = PositionToRectLocal(rect, pos); return true; } } return false; } public static string GetMoneyName(int moneyType) { switch (moneyType) { case (int) MONEYTYPE.MONEYTYPE_COIN: return StrDictionary.GetClientDictionaryString("#{6003}"); case (int) MONEYTYPE.MONEYTYPE_YUANBAO: return StrDictionary.GetClientDictionaryString("#{6001}"); case (int) MONEYTYPE.MONEYTYPE_YUANBAO_BIND: return StrDictionary.GetClientDictionaryString("#{6002}"); case (int) MONEYTYPE.MONEYTYPE_COIN_BIND: return StrDictionary.GetClientDictionaryString("#{6004}"); } return ""; } //帮会权限判断 public static int GuildJobPowerFull(int index) { var job = -1; var guildJobs = TableManager.GetGuildJurisdiction(); foreach (var guildjob in guildJobs) if (guildjob.Value.getAuthorityCount() > index && guildjob.Value.GetAuthoritybyIndex(index) == 1) job = guildjob.Value.Id; else break; return job; } //帮会权限判断 public static bool IsGuildPowerFull(int index, bool istip = true) { var table = GameManager.gameManager.PlayerDataPool.GuildInfo.GetMemberJurisdic(GameManager.gameManager .PlayerDataPool.MainPlayerBaseAttr.Guid); if (table == null || table.GetAuthoritybyIndex(index) == 0) { //无权进行此操作 if (istip) { var job = GuildJobPowerFull(index); if (Guild.GuildJobName.ContainsKey(job)) GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{2513}", StrDictionary.GetClientDictionaryString(Guild.GuildJobName[job]))); } return false; } return true; } //高昌报名的 public static void SignUp() { var activityBase = ActivityDataManager.Instance.GetActivityTabByServerType(ActivityDataManager.Activity_Type .ACTIVITY_TYPE_TREASURE_GLOD); if (activityBase == null) return; if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < activityBase.Level) { GUIData.AddNotifyData("#{9024}"); return; } UIManager.ShowUI(UIInfo.TreasureSignUp); } //计算两个点的路径长度 public static float GetNavMeshDistance(Vector3 Start, Vector3 End) { var path = new NavMeshPath(); if (NavMesh.CalculatePath(Start, End, -1, path)) { if (path.corners.Length < 2) return 0f; //initialize variables var previousCorner = path.corners[0]; var lengthSoFar = 0.0f; var i = 1; //iterate over corners for the full path length while (i < path.corners.Length) { var currentCorner = path.corners[i]; lengthSoFar += Vector3.Distance(previousCorner, currentCorner); previousCorner = currentCorner; i++; } return lengthSoFar; } return 0; } //字符串字符个数 public static int StrCharLength(string strText) { var len = 0; for (var i = 0; i < strText.Length; i++) len += (int) strText[i] > 127 ? 2 : 1; return len; } /// /// 获取货币的可以替代类型 /// /// 消耗类型 /// 消耗子类型 /// 取代的消耗类型 /// 取代的消耗子类型 /// /// true:存在可替换类型 /// false:不存在可替代类型 /// public static bool ConsumeTypeExchange(int consumeType, int consumeID, out int cConsumeType, out int cConsumeId) { cConsumeType = -1; cConsumeId = -1; if ((int) CONSUM_TYPE.MONEY == consumeType) switch ((MONEYTYPE) consumeID) { case MONEYTYPE.MONEYTYPE_COIN_BIND: cConsumeType = (int) CONSUM_TYPE.MONEY; cConsumeId = (int) MONEYTYPE.MONEYTYPE_COIN; return true; case MONEYTYPE.MONEYTYPE_YUANBAO_BIND: cConsumeType = (int) CONSUM_TYPE.MONEY; cConsumeId = (int) MONEYTYPE.MONEYTYPE_YUANBAO; return true; } if ((int) PropID.PropertyID.BIND_YINLIANG == consumeID) { cConsumeType = (int) CONSUM_TYPE.MONEY; cConsumeId = (int) MONEYTYPE.MONEYTYPE_COIN; return true; } if ((int) PropID.PropertyID.BIND_YUANBAO == consumeID) { cConsumeType = (int) CONSUM_TYPE.MONEY; cConsumeId = (int) MONEYTYPE.MONEYTYPE_YUANBAO_BIND; return true; } return false; } // public static void CaptureScreen(Camera came = null, string savePath = "", CaptureOver fun = null) // { // if (came != null) // { // CameraCapture capTure = came.gameObject.AddComponent(); // if (capTure != null) // { // capTure.AddCaptureOver(fun); // capTure.Capture(savePath); // } // } // } /// /// 判断两个时间是否跨天 /// /// 其中一个时间:距离1970经过的毫秒数 /// 另一个时间:距离1970经过的毫秒数 /// true: 跨天 false: 不跨天 public static bool IsCrossDay(long one, long other) { var oneTime = new DateTime(one); var otherTime = new DateTime(other); if (oneTime.Year != otherTime.Year || oneTime.Month != otherTime.Month || oneTime.Day != otherTime.Day) return true; return false; } public static void HideMainTopRightUI(bool closeMap = true, bool closeSHBtn = true) { if (closeMap) UIManager.CloseUI(UIInfo.MiniMapRoot); if (FunctionButtonLogic.Instance()) { FunctionButtonLogic.Instance().HideBaseBtns(); if (closeSHBtn) FunctionButtonLogic.Instance().ShowOrHideBtn.SetActive(false); } else { FunctionButtonLogic._IsShowInit = false; } if (ActiveBtns.Instance()) ActiveBtns.Instance().HidePanel(); if (GuanningAreaLogic.Instance()) GuanningAreaLogic.Instance().ShowPanel(); MarketingActsRoot.HideBtns(); if (SuperBenefitFirstRechargeTip.Instance == true) SuperBenefitFirstRechargeTip.Instance.HideBtns(); } public static void ShowMainTopRightUI() { if (FunctionButtonLogic.Instance()) { if (FunctionButtonLogic.Instance().ShowBaseBtns() == false) return; FunctionButtonLogic.Instance().ShowOrHideBtn.SetActive(true); } else { FunctionButtonLogic._IsShowInit = true; } UIManager.ShowUI(UIInfo.MiniMapRoot); if (ActiveBtns.Instance()) ActiveBtns.Instance().ShowPanel(); if (GuanningAreaLogic.Instance()) GuanningAreaLogic.Instance().HidePanel(); MarketingActsRoot.ShowBtns(); if (SuperBenefitFirstRechargeTip.Instance) SuperBenefitFirstRechargeTip.Instance.ShowBtns(); } public static void CheckFubenShowUI() { var fuben = TableManager.GetFubenByID( GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID); if (fuben == null) return; //世界BOSS和BOSS之家的副本 if (fuben.IsShowInfoUI == 2) { UIManager.ShowUI(UIInfo.CrossServerBossInfo); if (WorldBossData.Instance.BossSceneType == 1 && tipsState) //是世界boss、没有队伍、没关闭提示 AutoCreateTeam(); } //进入跨服BOSS活动副本 if (GameManager.gameManager.RunningScene == GlobeVar.CROSSSERVERSCENEID && ActivityDataManager.Instance.IsActivityState( (int) ActivityDataManager.Activity_Type.ACTIVITY_TYPE_CROSSSERVERBOSS, ActivityDataManager.ActivityState.Playing)) { UIManager.ShowUI(UIInfo.CrossServerBossInfo); PvpMatchRulePanel.OPenUI("#{49101}"); } } //自动创建队伍 private static void AutoCreateTeam() { if (Singleton.GetInstance().MainPlayer != null) { Singleton.GetInstance().MainPlayer.StopMove(); GameManager.gameManager.AutoSearch.Stop(); if (GameManager.gameManager.PlayerDataPool.IsHaveTeam() && GameManager.gameManager.PlayerDataPool.TeamInfo.IsCaptain() || !GameManager.gameManager.PlayerDataPool.IsHaveTeam()) MessageBoxLogic.OpenOKCancelToggleBox("boss实力过于强大,是否免费一键招募助战帮您攻击boss(不影响BOSS的相关掉落)", state => { tipsState = state; }, tipsState, "招募", "否", null, () => { if (!GameManager.gameManager.PlayerDataPool.IsHaveTeam()) GameManager.gameManager.PlayerDataPool.TeamInfo.CreaetTeam(-1, -1, -1, () => { UIManager.ShowUI(UIInfo.TeamInfoRoot, (bSuccess, param) => { if (bSuccess) AutoAddRobote(); }); }); else UIManager.ShowUI(UIInfo.TeamInfoRoot, (bSuccess, param) => { if (bSuccess) AutoAddRobote(); }); }); } } //自动雇佣机器人 private static void AutoAddRobote() { if (TeamInfoWindow.Instance()) { var targetTabs = TableManager.GetTeamTarget().Values; foreach (var item in targetTabs) if (item.CopySceneId1 == GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID) { TeamInfoWindow.Instance().SelectedTargets(item, item.MinLV, item.MaxLv, () => { TeamInfoWindow.Instance().OnBtnInvateRobot(); }); break; } } } #region vip icon public static int VipFreeLiveLeave() { var VipCanUseLevel = 0; var vipId = TableManager.GetVipIdoitInChargeByID(GameManager.gameManager.PlayerDataPool.VipIdoitId); if (vipId != null) VipCanUseLevel = vipId.Param; Tab_PrivilegeFunction tab_PrivilegeFunction = null; foreach (var tab in TableManager.GetPrivilegeFunction()) if (tab.Value.PrivilegeId == 20) { tab_PrivilegeFunction = tab.Value; break; } if (VipCanUseLevel < GameManager.gameManager.PlayerDataPool.VipCost) VipCanUseLevel = GameManager.gameManager.PlayerDataPool.VipCost; int freeTimes; if (tab_PrivilegeFunction != null && int.TryParse(tab_PrivilegeFunction.GetVipbyIndex(VipCanUseLevel), out freeTimes)) return freeTimes - GameManager.gameManager.PlayerDataPool.VipFreeLive; return 0; } public static string GetVipIcon(int vipLevel) { if (vipLevel >= 1 && vipLevel <= 4) return "ChatVip1"; if (vipLevel >= 5 && vipLevel <= 8) return "ChatVip2"; if (vipLevel >= 9 && vipLevel <= 12) return "ChatVip3"; return ""; } public static string GetPrivilegeVipIcon(int privilegeVip) { if (privilegeVip == 1) return "ChatPrivilegeVip1"; if (privilegeVip == 2) return "ChatPrivilegeVip2"; if (privilegeVip == 3) return "ChatPrivilegeVip3"; return ""; } #endregion #region HTTP Sign(POST Sign + ParamDataStream) private static readonly string _randomString = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"; private static readonly int _randomStringLength = 8; //固定长度8 private static readonly string _tokenStr = "ZYAPI"; //固定TOKEN private static string _timeAttr = ""; private static string _randomStrAttr = ""; public static string GetHttpSingStr() { return string.Format("t={0}&r={1}&sign={2}", GetTimeStamp(), GetRandomStr(), GetSignString(_timeAttr, _randomStrAttr, _tokenStr)); } public static string GetMD5SingStr(string tkey, string signKey, string key) { return string.Format("\"{0}\":\"{1}\",\"{2}\":\"{3}\"", tkey, GetTimeStamp(), signKey, GetMd5_32(_timeAttr + key)); } public static string GetHttpSingJSONStr(string tkey, string rkey, string signKey) { return string.Format("\"{0}\":\"{1}\",\"{2}\":\"{3}\",\"{4}\":\"{5}\"", tkey, GetTimeStamp(), rkey, GetRandomStr(), signKey, GetSignString(_timeAttr, _randomStrAttr, _tokenStr)); } public static string GetHttpSingStr(string tkey, string rkey, string signKey) { return string.Format("{0}={1}&{2}={3}&{4}={5}", tkey, GetTimeStamp(), rkey, GetRandomStr(), signKey, GetSignString(_timeAttr, _randomStrAttr, _tokenStr)); } public static string GetTimeStamp() { _timeAttr = GlobalData.ServerAnsiTime.ToString(); if (GlobalData.ServerAnsiTime <= 0) { var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区 var timeStamp = (long) (DateTime.Now - startTime).TotalSeconds; // 相差秒数 _timeAttr = timeStamp.ToString(); } return _timeAttr; } //获取随机字符串 public static string GetRandomStr() { _randomStrAttr = ""; for (var index = 0; index < _randomStringLength; index++) { var statrtIndex = Random.Range(0, _randomString.Length - 1); _randomStrAttr += _randomString.Substring(statrtIndex, 1); } return _randomStrAttr; } //获取签名 public static string GetSignString(string _timeStamp, string _randomString, string apiKey) { var _strList = new List(); _strList.Add(_timeStamp); _strList.Add(_randomString); _strList.Add(apiKey); //首字母升序排序 //_strList.Sort((string strA, string strB) => //{ // return string.Compare(strA, strB, false); //}); return GetSignString(_strList.ToArray()); } public static string GetSignString(params string[] strList) { //拼接 var _formatString = ""; for (var index = 0; index < strList.Length; index++) _formatString += strList[index]; //sha1加密 _formatString = SHA1(_formatString); //md5加密 _formatString = GetMd5_32(_formatString); var _signAttr = _formatString.ToUpper(); return _signAttr; } /// /// SHA1 加密,返回大写字符串 /// /// 需要加密字符串 /// 返回40位UTF8 大写 public static string SHA1(string content) { SHA1 sha1 = new SHA1CryptoServiceProvider(); var bytes_old_string = Encoding.Default.GetBytes(content); var bytes_new_string = sha1.ComputeHash(bytes_old_string); var new_string = BitConverter.ToString(bytes_new_string); new_string = new_string.Replace("-", ""); return new_string; } //MD5加密 public static string GetMd5_32(string str) { MD5 md5 = new MD5CryptoServiceProvider(); var bytes_old_string = Encoding.Default.GetBytes(str); var bytes_new_string = md5.ComputeHash(bytes_old_string); var new_string = BitConverter.ToString(bytes_new_string); new_string = new_string.Replace("-", ""); return new_string; } #endregion #region For lua public static int RandomRange_int(int min, int max) { return Random.Range(min, max); } public static float RandomRange_float(float min, float max) { return Random.Range(min, max); } public static int EnumToLua(object em) { return (int) em; } #endregion } }