/// <summary> /// 当收到加倍已经结束的信息 /// </summary> protected virtual void OnDoubleOver(object sender, DdzbaseEventArgs args) { if (UserDataTemp == null) { return; } var data = args.IsfObjData; var rates = data.GetIntArray("jiabei"); var len = rates.Length; var thisUserSeat = UserDataTemp.GetInt(RequestKey.KeySeat); for (int i = 0; i < len; i++) { if (thisUserSeat != i) { continue; } if (rates[i] > 1) { SetSpeakSpState(true, SpkJiabei); ShowJiaBeiSp.gameObject.SetActive(true); } else { SetSpeakSpState(true, SpkBuJiabei); } break; } StopCoroutine("HideJiabeiSp"); StartCoroutine("HideJiabeiSp"); }
/// <summary> /// 从服务器获得底牌信息 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public override void OnGetDipai(object sender, DdzbaseEventArgs args) { base.OnGetDipai(sender, args); var selfCdsNum = UserDataTemp.GetInt(NewRequestKey.KeyCardNum); App.GetGameData <GlobalData>().UserSelfData.PutInt(NewRequestKey.KeyCardNum, selfCdsNum); }
/// <summary> /// 当是上家出牌时,之前说的话要消失 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnTypeOutCard(object sender, DdzbaseEventArgs args) { if (UserDataTemp == null) { return; } var data = args.IsfObjData; var curSeat = data.GetInt(RequestKey.KeySeat); if (curSeat == UpSeatInt) { SetSpeakSpState(false); } else if (curSeat == OwnSeatInt) { SetSpeakSpState(false); var cdsLen = data.GetIntArray(RequestKey.KeyCards).Length; var curselfCdsNum = UserDataTemp.GetInt(NewRequestKey.KeyCardNum) - cdsLen; UserDataTemp.PutInt(NewRequestKey.KeyCardNum, curselfCdsNum); var globalUserInfoLeft = App.GetGameData <GlobalData>().GetUserInfo(curSeat); if (globalUserInfoLeft != null) { globalUserInfoLeft.PutInt(NewRequestKey.KeyCardNum, curselfCdsNum); } App.GetGameData <GlobalData>().OnSomePlayerHdcdsChange(curSeat, curselfCdsNum); CdNumLabel.text = curselfCdsNum.ToString(CultureInfo.InvariantCulture); if (curselfCdsNum > 0 && curselfCdsNum < 2 & JingDengAnim != null) { JingDengAnim.SetActive(true); } } }
/// <summary> /// 根据缓存的信息刷新用户信息ui /// </summary> public override void RefreshUiInfo() { if (UserDataTemp == null) { return; } base.RefreshUiInfo(); //多一个显示牌数的组件 if (CdNumLabel != null && UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { var selfhdCdsNum = UserDataTemp.GetInt(NewRequestKey.KeyCardNum); CdNumLabel.text = selfhdCdsNum.ToString(CultureInfo.InvariantCulture); if (selfhdCdsNum > 0 && selfhdCdsNum < 2 && JingDengAnim != null) { JingDengAnim.SetActive(true); } } gameObject.SetActive(true); if (UserDataTemp != null && UserDataTemp.ContainsKey(NewRequestKey.KeyNetWork)) { SetDuanXianSp(!UserDataTemp.GetBool(NewRequestKey.KeyNetWork)); } }
protected virtual void OnUserOut(object sender, DdzbaseEventArgs args) { if (UserDataTemp == null) { return; } var data = args.IsfObjData; if (data == null || !data.ContainsKey(RequestKey.KeySeat)) { return; } if (UserDataTemp != null && data.GetInt(RequestKey.KeySeat) == UserDataTemp.GetInt(RequestKey.KeySeat)) { //如果已经开始游戏了,则不做玩家离开设置 if (App.GetGameData <GlobalData>().IsStartGame) { SetDuanXianSp(true); } else { gameObject.SetActive(false); } } }
/// <summary> /// 当有人叫分抢地主时 /// </summary> protected void OnTypeGrab(object sender, DdzbaseEventArgs args) { var data = args.IsfObjData; if (!DDzUtil.IsServDataContainAllKey( new[] { RequestKey.KeySeat, RequestKey.KeyScore }, data)) { Debug.LogError("有人叫分时,信息key不全"); return; } var seat = data.GetInt(RequestKey.KeySeat); var score = data.GetInt(RequestKey.KeyScore); if (UserDataTemp != null && UserDataTemp.GetInt(RequestKey.KeySeat) == seat) { //叫的分值 switch (score) { case 0: { SetSpeakSpState(true, SpkBuJiao); break; } case 1: { SetSpeakSpState(true, Spk1Fen); break; } case 2: { SetSpeakSpState(true, Spk2Fen); break; } case 3: { SetSpeakSpState(true, Spk3Fen); break; } default: { Debug.LogError("叫了一个超出预估的分值,所以不显示"); SetSpeakSpState(false); break; } } } }
protected virtual void OnUserReady(object sender, DdzbaseEventArgs args) { ShowJiaBeiSp.SetActive(false); DizhuSp.SetActive(false); SetSpeakSpState(false); var data = args.IsfObjData; if (UserDataTemp != null && data.GetInt(RequestKey.KeySeat) == UserDataTemp.GetInt(RequestKey.KeySeat)) { GameReadySp.gameObject.SetActive(true); } }
/// <summary> /// 当游戏结算时清空GameReadySp 和 ShowSpeakSp /// </summary> /// <param name="sender"></param> /// <param name="args"></param> protected virtual void OnTypeGameOver(object sender, DdzbaseEventArgs args) { if (GameReadySp != null) { GameReadySp.gameObject.SetActive(false); } SetSpeakSpState(false); if (UserDataTemp != null && UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { UserDataTemp.PutInt(NewRequestKey.KeyCardNum, 0); } }
/// <summary> /// 当玩家分数改变时 /// </summary> /// <param name="seat"></param> /// <param name="scoreGold"></param> private void OnUserScoreChanged(int seat, int scoreGold) { if (UserDataTemp == null) { return; } if (seat == UserDataTemp.GetInt(RequestKey.KeySeat)) { var curGold = UserDataTemp.GetLong(NewRequestKey.KeyTtGold) + scoreGold; UserDataTemp.PutLong(NewRequestKey.KeyTtGold, curGold); ScoreLabel.text = curGold.ToString(CultureInfo.InvariantCulture); } }
/// <summary> /// 当收到加倍信息 /// </summary> private void OnDouble(object sender, DdzbaseEventArgs args) { if (UserDataTemp == null) { return; } var data = args.IsfObjData; int seat = data.GetInt(RequestKey.KeySeat); if (seat == UserDataTemp.GetInt(RequestKey.KeySeat)) { SeltingDoublelabel.text = ""; } }
/// <summary> /// 当给这个玩家发牌时 /// </summary> protected virtual void OnAlloCateCds(object sender, DdzbaseEventArgs args) { //进入发牌阶段,隐藏掉准备状态 GameReadySp.gameObject.SetActive(false); var data = args.IsfObjData; //此处不用判断是不是给自己发牌,因为服务器实际只给 游戏玩家自己发牌,其他玩家不发,但是每个玩家的牌数发的是一样的。所以可以赋值,擦 if (UserDataTemp == null) { return; } var cardsLen = data.GetIntArray(GlobalConstKey.C_Cards).Length; UserDataTemp.PutInt(NewRequestKey.KeyCardNum, cardsLen); }
/// <summary> /// 根据玩家自己座位号存储其他玩家信息 /// </summary> /// <param name="servData">服务器信息</param> protected override void SetOtherPlayerData(ISFSObject servData) { UpSeatInt = App.GetGameData <GlobalData>().GetSelfSeat; OwnSeatInt = App.GetGameData <GlobalData>().GetRightPlayerSeat; var dataDic = GetOtherUsesDic(servData); var seat = OwnSeatInt; if (dataDic.ContainsKey(seat)) { UserDataTemp = dataDic[seat]; if (UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { App.GetGameData <GlobalData>().OnSomePlayerHdcdsChange(OwnSeatInt, UserDataTemp.GetInt(NewRequestKey.KeyCardNum)); } RefreshUiInfo(); } }
/// <summary> /// 当用户进入房间时,刷新用户数据 /// </summary> /// <param name="userData"></param> protected void UpdateUserdata(ISFSObject userData) { //存储牌数 var cdnumTemp = 0; if (UserDataTemp != null && UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { cdnumTemp = UserDataTemp.GetInt(NewRequestKey.KeyCardNum); } UserDataTemp = userData; //如果是用户重练进来可能不含有NewRequestKey.KeyCardNum参数,这时候需要重置牌数 if (!UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { UserDataTemp.PutInt(NewRequestKey.KeyCardNum, cdnumTemp); } }
/// <summary> /// 当是上家出牌时,之前说的话要消失 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnTypeOutCard(object sender, DdzbaseEventArgs args) { var data = args.IsfObjData; var curSeat = data.GetInt(RequestKey.KeySeat); if (curSeat == App.GetGameData <GlobalData>().GetSelfSeat) { SetSpeakSpState(false); var cdsLen = data.GetIntArray(RequestKey.KeyCards).Length; var curselfCdsNum = UserDataTemp.GetInt(NewRequestKey.KeyCardNum) - cdsLen; UserDataTemp.PutInt(NewRequestKey.KeyCardNum, curselfCdsNum); App.GetGameData <GlobalData>().UserSelfData.PutInt(NewRequestKey.KeyCardNum, curselfCdsNum); App.GetGameData <GlobalData>().OnSomePlayerHdcdsChange(curSeat, curselfCdsNum); } else if (curSeat == UpSeatInt) { SetSpeakSpState(false); } }
//更新手牌数 private void UpdateCdsNum() { if (UserDataTemp == null || !UserDataTemp.ContainsKey(NewRequestKey.KeyCardNum)) { return; } var cdNum = UserDataTemp.GetInt(NewRequestKey.KeyCardNum); CdNumLabel.text = cdNum.ToString(CultureInfo.InvariantCulture); if (!UserDataTemp.ContainsKey(RequestKey.KeySeat)) { return; } var globalUserInfo = App.GetGameData <GlobalData>().GetUserInfo(UserDataTemp.GetInt(RequestKey.KeySeat)); if (globalUserInfo != null) { globalUserInfo.PutInt(NewRequestKey.KeyCardNum, cdNum); } }
/// <summary> /// 检查加倍 /// </summary> /// <param name="data"></param> public override void OnCheckSelectDouble(ISFSObject data) { if (UserDataTemp == null) { return; } //如果加倍 if (!data.ContainsKey(NewRequestKey.KeyJiaBei) || !data.GetBool(NewRequestKey.KeyJiaBei)) { return; } var globaldata = App.GetGameData <GlobalData>(); if (globaldata.JiaBeiType != 2 || (globaldata.JiaBeiType == 2 && UserDataTemp.GetInt(RequestKey.KeySeat) != data.GetInt(RequestKey.KeySeat))) { SetSpeakSpState(false); SeltingDoublelabel.gameObject.SetActive(true); SeltingDoublelabel.text = "正在选择加倍"; } }
private void OnTypeBombScore(object sender, DdzbaseEventArgs args) { var data = args.IsfObjData; if (UserDataTemp != null && UserDataTemp.ContainsKey(RequestKey.KeySeat) && data.ContainsKey(RequestKey.KeySeat)) { if (UserDataTemp.GetInt(RequestKey.KeySeat) == data.GetInt(RequestKey.KeySeat)) { if (data.ContainsKey(NewRequestKey.KeyWin)) { PlayShowScore(data.GetInt(NewRequestKey.KeyWin)); } } else { if (data.ContainsKey(NewRequestKey.KeyLost)) { PlayShowScore(data.GetInt(NewRequestKey.KeyLost)); } } } }