using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.Item; using GCGame; using GCGame.Table; using Games.ChatHistory; using System; using System.Collections.Generic; public class ChatLinkCallFunc : ChatLinkItem { private static string _InputTeamStr = StrDictionary.GetClientDictionaryString("#{5138}"); private string _ShowText; private string _ClassName; private string _FuncName; private string[] _ParamNames; private int _LinkLevel = 0; private int _StaticFuncID; public void SetLinkCallFunc(string showText, string className, string funcName, params string[] paramNames) { _ClassName = className; _FuncName = funcName; _ParamNames = paramNames; _ShowText = showText; StrInput = showText; StrSend = StrSendStart + ((int)ChatLinkType.CallFunc).ToString() + StrSplit + _ShowText + StrSplit + _ClassName + StrSplit + _FuncName; for (int i = 0; i < _ParamNames.Length; ++i) { StrSend += StrSplit + _ParamNames[i]; } StrSend += StrSendEnd; } public override void SetLinkBySendStr(Text text, ChatHistoryItem chatHistory, string linkStr, string[] linkParams) { StrSend = linkStr; _LinkLevel = 0; if (linkParams.Length < 4) { _ShowText = (linkParams[1]); if (!int.TryParse(linkParams[2], out _StaticFuncID)) { return; } Tab_StaticFunc staticFuncRecord = TableManager.GetStaticFuncByID(_StaticFuncID, 0); _LinkLevel = staticFuncRecord.OpenLevel; _ClassName = staticFuncRecord.ClassName; _FuncName = staticFuncRecord.FunctionName; List strList = new List(); for (int i = 0; i < staticFuncRecord.getParamCount(); ++i) { string strParam = staticFuncRecord.GetParambyIndex(i); if (!string.IsNullOrEmpty(strParam)) { strList.Add(strParam); } } _ParamNames = strList.ToArray(); } else { _ShowText = (linkParams[1]); _ClassName = (linkParams[2]); _FuncName = (linkParams[3]); int paramLength = linkParams.Length - 4; _ParamNames = new string[paramLength]; for (int i = 4; i < linkParams.Length; ++i) { _ParamNames[i - 4] = linkParams[i]; } } StrInput = _ShowText; StrShow = _ShowText; } protected override void LinkClick(int linkindex) { if (_LinkLevel > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level) { GUIData.AddNotifyData("#{42697}"); return; } var classType = Type.GetType(_ClassName); if (classType == null) return; var method = classType.GetMethod(_FuncName, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); if (method != null) method.Invoke(null, _ParamNames); } public static void CallStaticFunc(int staticFuncID) { Tab_StaticFunc staticFuncRecord = TableManager.GetStaticFuncByID(staticFuncID, 0); var linkLevel = staticFuncRecord.OpenLevel; if (linkLevel > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level) { GUIData.AddNotifyData("#{42697}"); return; } var className = staticFuncRecord.ClassName; var funcName = staticFuncRecord.FunctionName; List strList = new List(); for (int i = 0; i < staticFuncRecord.getParamCount(); ++i) { string strParam = staticFuncRecord.GetParambyIndex(i); if (!string.IsNullOrEmpty(strParam)) { strList.Add(strParam); } } var paramStrs = strList.ToArray(); var classType = Type.GetType(className); if (classType == null) return; var method = classType.GetMethod(funcName, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); if (method != null) method.Invoke(null, paramStrs); } }