public override void Init(object[] data)
    {
        JSONObject jsonData = (JSONObject)data[1];

        InitPayouts(jsonData.GetString("payouts"));

        StopFreeSpinAnimation();
        EventDelegate.Set(btnBack.onClick, EventBackToSelectGame);

        slotMachine.Init(jsonData.GetString("betPerLines"));
        EventDelegate.Set(btnBetPerLine.onClick, EventBetPerLine);
        EventDelegate.Set(btnLines.onClick, EventBetLines);
        EventDelegate.Set(btnMaxBet.onClick, EventMaxBet);
        EventDelegate.Set(btnPayout.onClick, EventOpenPopupPayout);

        SetBetPerLine(DEFAULT_BET_PER_LINE_INDEX);
        SetNumbLine(1);

        // Init other players if have
        Debug.Log("### " + data[1].ToString());
        JSONArray otherPlayerDatas = jsonData.GetArray("otherPlayers");

        roomData = jsonData.GetObject("roomData");
        int count = 0;

        for (int i = 0; i < otherPlayerDatas.Length; i++)
        {
            if (!AccountManager.Instance.IsYou(otherPlayerDatas[i].Obj.GetString("username")))
            {
                otherPlayers[count].Init(otherPlayerDatas[i].Obj.GetString("username"), otherPlayerDatas[i].Obj.GetString("displayName"), otherPlayerDatas[i].Obj.GetLong("cash"), otherPlayerDatas[i].Obj.GetString("avatar"));
                count++;
            }
        }

        for (int i = 0; i < otherPlayers.Length; i++)
        {
            if (otherPlayers[i].IsEmpty())
            {
                otherPlayers[i].InitEmpty();
            }
        }

        roomId = jsonData.GetString("roomId");

        UpdateUserCashLabel(0);
        UpdateUserGemLabel(0);
        UpdateUserKillLabel();
        if (AccountManager.Instance.avatarLink != string.Empty)
        {
            Utils.SetActive(userAvatarTexture.gameObject, true);
            StartCoroutine(DisplayAvatar());
            // avatarSprite.spriteName = avatarName;
        }
        else
        {
            Utils.SetActive(userAvatarTexture.gameObject, false);
        }
        bigWinPanel.Hide();
        bossManager.Init(roomData.GetInt("dIndex"), roomData.GetInt("dHP"), roomData.GetInt("dMaxHP"), this, "BossGetHitCallback");

        if (Global.ENABLE_CHEAT)
        {
            Utils.SetActive(cheatPanel, true);
            // TEST CODE -- test skill
            EventDelegate.Set(btnTestSkill.onClick, EventTestSkill);
            // Set Bet Filter
            for (int i = 1; i < 10; i++)
            {
                btnTestSkillSelector.items.Add(i.ToString());
            }
            for (int i = 1; i <= 3; i++)
            {
                btnTestSkillLevelSelector.items.Add(i.ToString());
            }
            for (int i = 0; i < 4; i++)
            {
                btnTestSkillPosition.items.Add(i.ToString());
            }
        }
        else
        {
            Utils.SetActive(cheatPanel, false);
        }

        HideWinningLinesDisplay();
        base.Init(data);
    }