public static void Player_LV(CClientActionData Data)
    {
        LogMgr.DebugLog("[ClientAction.Player_LV]");
        int PlayerLV = System.Convert.ToInt32(Data.m_Value);

        PlayerAttr.PlayerLV = PlayerLV;
    }
    public static void Game_Money(CClientActionData Data)
    {
        LogMgr.DebugLog("[ClientAction.Game_Money]");
        int GameMoney = System.Convert.ToInt32(Data.m_Value);

        PlayerAttr.GameMoney = GameMoney;
    }
    public static void Game_Coin(CClientActionData Data)
    {
        LogMgr.DebugLog("[ClientAction.Game_Gem]");
        int GameCoin = System.Convert.ToInt32(Data.m_Value);

        PlayerAttr.GameCoin = GameCoin;
    }
    public static void Player_Name(CClientActionData Data)
    {
        LogMgr.DebugLog("[ClientAction.Player_Name]");
        string PlayerName = Data.m_Value.ToString();

        PlayerAttr.PlayerName = PlayerName;
    }
    // Login
    public static void ToLogin(CClientActionData Data)
    {
        LogMgr.DebugLog("[ClientAction.ToLogin]");
        // 先把 Login 面版關閉
        GameUtility.HideUI(Const.Panel_Login);
        // 記錄帳號 (Memory)
        string Account = Data.m_dictProtocol["Account"].ToString();

        PlayerAttr.Account = Account;
        // 記錄 AccountID
        int AccountID = System.Convert.ToInt32(Data.m_dictProtocol["AccountID"].ToString());

        PlayerAttr.AccountID = AccountID;
        // 記錄 PlayerID
        int PlayerID = System.Convert.ToInt32(Data.m_dictProtocol["PlayerID"].ToString());

        PlayerAttr.PlayerID = PlayerID;
        // 記錄 SessionKey
        string SessionKey = Data.m_dictProtocol["SessionKey"].ToString();

        PlayerAttr.SessionKey = SessionKey;
        // 記錄密碼
        ClientSaveMgr.SetString(Const.Input_Account, Account);
        ClientSaveMgr.SetString(Const.Input_Password, Data.m_dictProtocol["Password"].ToString());
        // 拉出 Panel
        GameUtility.ShowUI(Const.Panel_Main);
        // 從網路要資料
        ClientService.Player_GetAttr();
    }
    public static void RunClientAction(CClientActionData Data)
    {
        // 做轉換的動作
        string MethodName = Data.m_CID.ToString();
        // 取得 Reflection
        Type       MyType = typeof(ClientAction);
        MethodInfo method = MyType.GetMethod(MethodName);

        if (method == null)
        {
            LogMgr.ErrorLog("[ClientAction.RunClientAction] Error!! Cannot found [{0}]", MethodName);
            return;
        }
        method.Invoke(null, BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder, new object[] { Data }, null);
    }
    // 計算數量

    #endregion

    // 更新
    public void Update()
    {
        // 處理 callback
        WebPost.ProcessCallback();
        // 沒有 Client Action 不需要處理
        if (m_ClientAction.Count == 0)
        {
            return;
        }
        // 取得要 Update 的資料
        CClientActionData Data = ModifyClientAction();

        if (Data == null)
        {
            return;
        }
        ClientAction.RunClientAction(Data);
    }
    // 塞入一個 / 取出一個
    static CClientActionData ModifyClientAction(CClientActionData Action = null)
    {
        m_MutexClientAction.WaitOne();
        // 塞入一個
        if (Action != null)
        {
            m_ClientAction.Add(Action);
            m_MutexClientAction.ReleaseMutex();
            return(null);
        }
        // 取出一個
        CClientActionData Data = null;

        if (m_ClientAction.Count > 0)
        {
            Data = m_ClientAction[0];
            m_ClientAction.RemoveAt(0);
        }
        m_MutexClientAction.ReleaseMutex();
        return(Data);
    }
 // 創角行為
 public static void ToNewPlayer(CClientActionData Data)
 {
     LogMgr.DebugLog("[ClientAction.ToNewPlayer]");
     GameUtility.ShowMessageBox("還沒有創角流程, 請連絡開發者建立角色");
 }
 // 顯示 MessageBox
 public static void ShowMessage(CClientActionData Data)
 {
     LogMgr.DebugLog("[ClientAction.ShowMessage]");
     GameUtility.ShowMessageBox(Data.m_Value.ToString());
 }