private void Server_EventPluginMessageOnProcess(string command, string action, EsObject eso) { if (command == "getHandRobot") { if (eso.variableExists("players")) { foreach (EsObject obj in eso.getEsObjectArray("players")) { string username = obj.getString("userName"); PlayerControllerChan p = GameModelChan.GetPlayer(username); if (obj.getIntegerArray("hand").Length != p.mCardHand.Count) { Debug.LogWarning("Số lượng card không phù hợp giũa client và server: " + p.username); } else { if (p.mCardHand.FindAll(c => c.CardId == -1).Count == 0) { return; } foreach (int cardId in obj.getIntegerArray("hand")) { ECard card = p.mCardHand.Find(c => c.CardId == cardId); if (card == null) { p.mCardHand.Find(c => c.CardId == -1).CardId = cardId; } } } } } } }
public bool CanDiscard(ECard card) { if (CardStolen.Find(c => c.Id == card.CardId) != null) { return(false); } List <CardLib.Model.Card> cardHand = CardHand; cardHand.Remove(CardHand.Find(c => c.Id == card.CardId)); try { PhomLib.Models.MeldsAndRemainingCards summary = PhomLib.Utility.PhomLogicCenter.caculateExistingMelds(cardHand, CardStolen); foreach (CardLib.Model.Card c in CardStolen) { if (summary == null) { return(false); } else if (summary.RemainingCards.Find(c1 => c1 != null && c1.Id == c.Id) != null) { return(false); } } return(true); } catch { return(false); } }
// public static Dictionary<int, ECard> CardMap { get; set; } public static List <ECard> InitNewCards() { var Cards = new List <ECard>(); for (int i = 1; i <= 52; i++) { int ct = (i / 13) + 1; var type = (CardType)ct; var v = (i % 13); if (v == 0) { v = 13; } if (v == 1) { v = 14; } var card = new ECard { No = i, Value = v, CardType = type, }; Cards.Add(card); } return(Cards); }
/// <summary> /// Khi có người chơi gửi phỏm /// </summary> /// <param name="index">Người gửi phỏm</param> /// <param name="indexTo">Gửi phỏm đến người chơi</param> /// <param name="cardValue">Card sẽ gửi</param> /// <param name="melds">Phỏm ké gửi vào</param> public static void AddMeld(int index, int indexTo, int cardValue, int[] melds) { Meld meld = GetPlayer(indexTo).GetMeld(melds); if (meld != null) { ECard card = GetCard_FromHandPlayer(index, cardValue); GetPlayer(index).mCardHand.Remove(card); meld.meld.Add(card); game.UpdateHand(index, 0.5f); game.UpdateHand(indexTo, 0.5f); CheckRemoveGiveCard(index); card.UpdateParent(indexTo); return; } if (YourController.slotServer == index) { game.canRequestSort = true; } Debug.Log(index); Debug.Log(indexTo); foreach (Meld m in GameModelTLMN.GetPlayer(indexTo).mCardMelds) { Debug.Log(m.meld); } Debug.Log(cardValue); Debug.Log(melds); Debug.LogError("LỖI: Không thể tìm thấy phỏm để gửi"); }
void _Discard(int index, int cardValue) { ECard card = GetCard_FromHandPlayer(index, cardValue); GetPlayer(index).mCardHand.Remove(card); GetPlayer(index).mCardTrash.Add(card); if (YourController.slotServer == index) { game.canRequestSort = true; } game.fullLaying = false; if (game.listGiveCard.Count > 0) { game.listGiveCard.Clear(); } if (YourController.slotServer == index) { GameModelPhom.IndexInTurn = GetNextPlayer(index).slotServer; GameModelPhom.IndexLastInTurn = index; } MiniState = EGameStateMini.stealCard_or_draw; card.UpdateParent(index); game.UpdateHand(index, 0.5f); SoundGamePhom.Instances.PlaySoundDisCard(GetPlayer(index), GetNextPlayer(index)); }
/// <summary> /// Khi có người chơi ăn bài /// </summary> /// <param name="index">Index Người chơi ăn</param> /// <param name="indexLast">Index người chơi đánh bài</param> public static void StealCard(int index, int indexLast) { int indexTrash = GetPlayer(indexLast).mCardTrash.Count - 1; ECard card = GetPlayer(indexLast).mCardTrash[indexTrash]; card.ChangeSide(index); GetPlayer(indexLast).mCardTrash.RemoveAt(indexTrash); GetPlayer(index).mCardHand.Add(card); if (YourController.slotServer == index) { game.canRequestSort = true; } game.stolen = false; game.HideClickCard(); MiniState = EGameStateMini.discard; if (YourController.slotServer == index) { game.OnClickSort(game.btSorted.gameObject); } else { game.UpdateHand(index, 0.5f); } game.UpdateHand(GameModelTLMN.IndexLastInTurn, 0.5f); card.UpdateParent(index); }
public static bool CanDiscard(ECard check) { return(GameModelPhom.IsYourTurn && GameModelPhom.game.cardController.CanDiscard(check) && ( GameModelPhom.MiniState == GameModelPhom.EGameStateMini.discard && GameModelPhom.game.cardController.CanDiscard(check) || (GameModelPhom.MiniState == GameModelPhom.EGameStateMini.lay_meld && GameModelPhom.YourController.mCardHand.TrueForAll(c => c.originSide == c.currentSide) ? true : false) )); }
/// <summary> /// Khi có người chơi đánh bài /// </summary> /// <param name="index">Người đánh bài</param> /// <param name="cardValue">Card đã đánh</param> public static void Discard(int index, int cardValue) { ECard card = GetCard_FromHandPlayer(index, cardValue); //Kiểm tra có quân bài đó trên tay không thì mới đánh. //Nếu không có trên tay thì có thể là do quân bài đã được đánh ra rồi. if (card != null) { model._Discard(index, cardValue); } }
public CardData(ECard _ID) { ID = _ID; if (ID == ECard.None) { Suit = ESuit.None; } else { Suit = CardManager.m_kCardSuits[ID - 1]; } }
/// <summary> /// Lấy thông tin card của người chơi /// </summary> /// <param name="indexPlayer"></param> /// <param name="cardId"></param> /// <returns></returns> public static ECard GetCard_FromHandPlayer(int indexPlayer, int cardId) { ECard card = GetPlayer(indexPlayer).mCardHand.Find(c => c.CardId == cardId); if (card == null) { card = GetPlayer(indexPlayer).mCardHand.Find(c => c.CardId == -1); if (card != null) { card.CardId = cardId; } } return(card); }
/// <summary> /// Di chuyển các card khi lần đầu pick /// </summary> void MoveCard_FirstPick(ECard card) { #region THÔNG BÁO VỚI SERVER LÀ ĐÃ THỰC HIỆN XONG BƯỚC 1 if (!serverRequestUpdateHandStep1 && GameModelChan.YourController != null && GameModelChan.IndexInTurn == GameModelChan.YourController.slotServer) { int index = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject); GameManager.Server.DoRequestPluginGame(Utility.SetEsObject(Fields.GAMEPLAY.PLAY, new object[] { Fields.ACTION, "firstPick", "slotChoice", Utility.SetEsObject(null, "firstPick", indexPick) })); } #endregion int indexPicked = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject); int currentIndex = -1; for (int i = 0; i < GameModelChan.game.mPlaymat.locationRotation.Length - 1; i++) { if (indexPick == i) { currentIndex = GetNextGroupCard(i); listPickObject[currentIndex].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i]; } else { if (currentIndex != -1) { currentIndex = GetNextGroupCard(currentIndex); listPickObject[currentIndex].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i]; } else { listPickObject[i].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i]; } } } //Di chuyển ra giữa và destroy những cái ko cần thiết đi //Tới Công rảnh thì code hộ anh mấy cái đoạn trên vứt vào dưới này luôn nhé. DealCardRotation.GetListRotation.ForEach(dealCard => { MoveAllChildToCenter(dealCard.transform, 0.5f); if (GameModelChan.ListPlayerInGame.Find(p => p.IsHasQuit == false && p.mSide == dealCard.sideStart) == null) { GameObject.Destroy(dealCard.transform.GetChild(0).gameObject); } } ); }
void OnDoubleClick() { if (gameObject.GetComponent <iTween>() && gameObject.GetComponent <iTween>().isRunning) { return; } if (enabled && card.CardId != -1) { if (GameModelTLMN.CurrentState != GameModelTLMN.EGameState.playing) { return; } int index = 0; int indexOfList = 0; List <List <int> > allList = GameModelTLMN.model.CardCollections.FindAll(l => l.Contains(card.CardId)); if (allList.Count > 0) { while (GameModelTLMN.game.ListClickCard.Count > 0) { GameModelTLMN.game.CardClick(GameModelTLMN.game.ListClickCard[0]); } for (int i = 0; i < allList.Count; i++) { List <int> list = allList[i]; if (list.IndexOf(card.CardId) < indexOfList || i == 0) { indexOfList = list.IndexOf(card.CardId); index = i; } } allList[index].ForEach(cardId => { ECard cardClick = GameModelTLMN.YourController.mCardHand.Find(c => c.CardId == cardId); if (cardClick != null) { GameModelTLMN.game.CardClick(cardClick); } }); } } }
public void CardClick(ECard card) { if (card != null && currentStep == StepDealCard.WAIT_PICK) { if (pickAfterDealcard == null) { indexPick = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject); pickAfterDealcard = card; MoveCard_FirstPick(pickAfterDealcard); pickAfterDealcard.gameObject.SetActive(false); } else if (pickAfterDealcard != card) { currentStep = StepDealCard.PICKED; GameModelChan.game.StartCoroutine(OnPickDone(card)); } } }
public Meld(int[] lst, EPlayerController p) { player = p; foreach (int value in lst) { ECard card = p.mCardHand.Find(c => c.CardId == value); if (card == null) { card = p.mCardHand.Find(c => c.CardId == -1); if (card != null) { card.CardId = value; } } p.mCardHand.Remove(card); meld.Add(card); } }
private void OnTriggerEnter(Collider other) { if (other.gameObject.layer == LayerMask.NameToLayer("CardEffect")) { ECard card = other.GetComponentInParent <Card>().GetCardID(); if (card == ECard.DiamondEffect) { m_diamondEffectTriggers++; m_diamondEffect = true; } else if (card == ECard.HeartEffect) { m_heartEffectTriggers++; m_heartEffect = true; } } }
/// <summary> /// Tự động pick các card /// </summary> public void AutoPick() { List <ECard> listCard = new List <ECard>(); if (GameModelTLMN.game.ListClickCard.Count == 2) { List <ECard> listClickCard = new List <ECard>(GameModelTLMN.game.ListClickCard); listClickCard.Sort((c1, c2) => c1.CompareTo(c2)); ECard cardStart = listClickCard[0], cardEnd = listClickCard[1]; List <ECard> pickCardOnHand = (from c in GameModelTLMN.YourController.mCardHand where c.CompareTo(cardStart) >= 0 && c.CompareTo(cardEnd) <= 0 select c).ToList <ECard>(); pickCardOnHand.Sort((c1, c2) => c1.CompareTo(c2)); listCard = new List <ECard>(GetStaight(pickCardOnHand)); if (listCard.Count >= 3) { if (listCard[listCard.Count - 1].parentCard.Suit.Value != cardEnd.parentCard.Suit.Value) { listCard.RemoveAt(listCard.Count - 1); listCard.Add(cardEnd); } if (listCard[0].parentCard.Suit.Value != cardStart.parentCard.Suit.Value) { listCard.RemoveAt(0); listCard.Add(cardStart); } } //string str = ""; //foreach (Card c in listCard) // str += c.parentCard.ToString(); //Debug.Log(str); } foreach (TLMNCard c in listCard) { if (!GameModelTLMN.game.ListClickCard.Contains(c)) { GameModelTLMN.game.CardClick(c); } } }
//Dính mực rồi (Đánh quân đỏ sau lại ăn chẵn đỏ) private bool checkDinhMucRoi(int[] listCardID, PlayerControllerChan currentPlayer) { if (isFirstRound(currentPlayer)) { if (currentPlayer.mCardDiscarded.Count > 0) { ECard card = currentPlayer.mCardDiscarded[currentPlayer.mCardDiscarded.Count - 1]; //???? if (GameUtil.IscardRed(card.CardId)) // cây đánh ngay trước là cây đỏ { if (listCardID.Length == 2) { if (listCardID[0] == listCardID[1] && GameUtil.IscardRed(listCardID[0]))// ăn chắn đỏ { return(true); } } } } } return(false); }
/// <summary> /// Khi có người chơi ăn bài /// </summary> /// <param name="index">Index Người chơi ăn</param> /// <param name="indexLast">Index người chơi đánh bài</param> public static void StealCard(int index, int indexLast) { int indexTrash = GetPlayer(indexLast).mCardTrash.Count - 1; ECard card = GetPlayer(indexLast).mCardTrash[indexTrash]; card.ChangeSide(index); bool isStealCard = SoundGamePhom.Instances.PlaySoundStealCard(GetPlayer(index), GetPlayer(indexLast)); GetPlayer(indexLast).mCardTrash.RemoveAt(indexTrash); GetPlayer(index).mCardHand.Add(card); if (YourController.slotServer == index) { game.canRequestSort = true; } game.stolen = false; game.HideClickCard(); MiniState = EGameStateMini.discard; if (YourController.slotServer == index) { if (isStealCard) { game.btSorted.gameObject.AddComponent <UIContainerAnonymous>(); } game.OnClickSort(game.btSorted.gameObject); } else { game.UpdateHand(index, 0.5f); } game.UpdateHand(GameModelPhom.IndexLastInTurn, 0.5f); card.UpdateParent(index); }
public override int CompareTo(ECard c) { return(CardId - c.CardId); }
/// <summary> /// Thực hiện sau khi người chơi pick lần thứ 2 /// </summary> IEnumerator OnPickDone(ECard card) { #region THÔNG BÁO VỚI SERVER LÀ ĐÃ THỰC HIỆN XONG BƯỚC 2 if (!serverRequestUpdateHandStep2 && GameModelChan.YourController != null && GameModelChan.IndexInTurn == GameModelChan.YourController.slotServer) { int index = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject); GameManager.Server.DoRequestPluginGame(Utility.SetEsObject(Fields.GAMEPLAY.PLAY, new object[] { Fields.ACTION, "getHand", "slotChoice", Utility.SetEsObject(null, "donePick", index) })); } #endregion #region CHỜ SERVER TRẢ VỀ THÔNG TIN NGƯỜI CHƠI while (string.IsNullOrEmpty(firstPlayer) || firstCardServerResponse == -1) { yield return(new WaitForEndOfFrame()); } pickAfterDealcard.CardId = firstCardServerResponse; pickAfterDealcard.gameObject.transform.parent = card.gameObject.transform.parent; pickAfterDealcard.gameObject.transform.localPosition = Vector3.zero; pickAfterDealcard.gameObject.SetActive(true); pickAfterDealcard.gameObject.transform.localPosition = new Vector3(pickAfterDealcard.gameObject.transform.localPosition.x, pickAfterDealcard.gameObject.transform.localPosition.y, -2f); iTween.RotateTo(pickAfterDealcard.gameObject, new Vector3(0f, 0f, 0f), 0.5f); yield return(new WaitForSeconds(0.5f)); #endregion List <DealCardRotation> listDealcard = new List <DealCardRotation>(); #region QUY ĐỊNH VỊ TRÍ SẼ ĐẾN CỦA CÁC MÔ BÀI PlayerControllerChan playerFirst = GameModelChan.ListPlayerInGame.Find(p => p.username == firstPlayer); DealCardRotation dealFirst = DealCardRotation.GetListRotation.Find(d => d.transform.childCount == 2); listDealcard.Add(dealFirst); dealFirst.StartRotate(playerFirst.mSide); PlayerControllerChan nextPlayer = GameModelChan.GetNextPlayer(playerFirst.slotServer); DealCardRotation nextDeal = dealFirst.GetNextAvalible; for (int i = 0; i < GameModelChan.ListPlayerInGame.Count - 1; i++) { listDealcard.Add(nextDeal); nextDeal.StartRotate(nextPlayer.mSide); nextPlayer = GameModelChan.GetNextPlayer(nextPlayer.slotServer); nextDeal = nextDeal.GetNextAvalible; } #endregion while (!listDealcard.TrueForAll(d => d.isComplete)) { yield return(new WaitForFixedUpdate()); } #region DI CHUYỂN VỀ VỊ TRÍ CÓ AVATAR DealCardRotation.GetListRotation.ForEach(dealCard => { if (dealCard.transform.childCount > 0) { MoveAllChildToTransform(dealCard.transform, GameModelChan.ListPlayerInGame.Find(p => p.mSide == dealCard.sideEnd).cuiPlayer.transform, 0.5f); } } ); #endregion yield return(new WaitForSeconds(0.6f)); currentStep = StepDealCard.DONE; Array.ForEach <GameObject>(listPickObject, obj => GameObject.Destroy(obj)); }
public abstract int CompareTo(ECard c);
public override int CompareTo(ECard c) { return(RankValue - ((TLMNCard)c).RankValue); }
public bool CanDiscard(ECard card) { throw new System.NotImplementedException(); }
void OnDragCard(DragGesture gesture) { FingerGestures.Finger finger = gesture.Fingers[0]; if (!GameModelTLMN.DealCardDone) { return; } if (gesture.Phase == ContinuousGesturePhase.Started) { dragObject = gesture.Selection; if (dragObject == null) { return; } if (dragObject.GetComponent <ECardTexture>() == null) { return; } if (gameObject.GetComponent <iTween>() && gameObject.GetComponent <iTween>().isRunning) { return; } //set depth to top dragObject.GetComponent <ECardTexture>().texture.depth = 15; beginPosition = dragObject.transform.localPosition; // Lưu lại ngón đang drag dragFingerIndex = finger.Index; } else if (finger.Index == dragFingerIndex) //Xử lý drag. Đảm bảo chắc là đối tượng đang kéo là đối tượng bạn đang chọn. { if (finger.Index != 0) { return; } if (gesture.Phase == ContinuousGesturePhase.Updated) { dragObject.gameObject.transform.position = GetWorldPos(gesture.Position); } else { //Thiết lập lại khi kết thúc drag dragFingerIndex = -1; dragObject.transform.localPosition = beginPosition; GameObject obj = gesture.PickObject(gameObject.GetComponent <ScreenRaycaster>(), gesture.Position); if (obj == null) { return; } if (obj.name == "MainDesk") { if (GameModelTLMN.CanDiscard(new List <ECard>(new ECard[] { dragObject.GetComponent <ECardTexture>().card }))) { dragObject.gameObject.transform.position = GetWorldPos(gesture.Position); GameModelTLMN.game.OnDiscard(new List <ECard>(new ECard[] { dragObject.GetComponent <ECardTexture>().card })); } } else { ECard dragCard = dragObject.GetComponent <ECardTexture>().card; bool isChange = false; if (obj.name == "Hand-Left") { GameModelTLMN.YourController.mCardHand.Remove(dragCard); GameModelTLMN.YourController.mCardHand.Insert(0, dragCard); isChange = true; } else if (obj.name == "Hand-Right") { GameModelTLMN.YourController.mCardHand.Remove(dragCard); GameModelTLMN.YourController.mCardHand.Add(dragCard); isChange = true; } else if (obj.GetComponent <ECardTexture>() != null) { int indexOf = GameModelTLMN.YourController.mCardHand.IndexOf(GameModelTLMN.YourController.mCardHand.Find(c => c == obj.GetComponent <ECardTexture>().card)); int indexOfDrag = GameModelTLMN.YourController.mCardHand.IndexOf(GameModelTLMN.YourController.mCardHand.Find(c => c == dragCard)); if (indexOfDrag > indexOf && indexOf + 1 < GameModelTLMN.YourController.mCardHand.Count) { indexOf++; } GameModelTLMN.YourController.mCardHand.Remove(dragCard); GameModelTLMN.YourController.mCardHand.Insert(indexOf, dragCard); isChange = true; } if (isChange) { GameModelTLMN.model.GetCardCollection(); } } GameModelTLMN.game.UpdateHand(GameModelTLMN.YourController.slotServer, 0.5f); //Debug.Log(obj.name); } } }
/// <summary> /// Khi có người chơi ăn bài /// </summary> /// <param name="index">Index Người chơi ăn</param> /// <param name="indexLast">Index người chơi đánh bài</param> public static void StealCard(int soundId, int index, int indexLast, int[] cardId) { StealCard stealCard = new StealCard(); stealCard.player = GetPlayer(index); stealCard.steals.Clear(); #region FIND CARD STEAL ECard cardSteal = GetPlayer(indexLast).mCardTrash[GetPlayer(indexLast).mCardTrash.Count - 1]; GetPlayer(indexLast).mCardTrash.Remove(cardSteal); cardSteal.ChangeSide(index); stealCard.steals.Add(cardSteal); #endregion #region FIND CARD STEAL ON HAND for (int i = 1; i < cardId.Length; i++) { ECard cardOnHand = GetPlayer(index).mCardHand.Find(c => c.CardId == cardId[1]); if (cardOnHand != null) { GetPlayer(index).mCardHand.Remove(cardOnHand); if (GameModelChan.YourController != null && GameModelChan.YourController.slotServer != index) { Debug.LogError("Tìm thấy card trên tay người chơi: " + GetPlayer(index).username); } } else if (cardOnHand == null && (GameModelChan.YourController == null || GameModelChan.YourController.slotServer != index)) { cardOnHand = new ChanCard(index, cardId[1]); cardOnHand.Instantiate(); } else { Debug.LogError("Không tìm thấy card phù hợp!!!"); } stealCard.steals.Add(cardOnHand); } #endregion GetPlayer(index).mCardSteal.Add(stealCard); for (int i = 0; i < stealCard.steals.Count; i++) { stealCard.steals[i].cardTexture.texture.depth = i; } stealCard.steals.ForEach(c => c.UpdateParent(index)); MiniState = EGameStateMini.discard; if (GameModelChan.YourController != null && YourController.slotServer == index) { game.OnClickSort(game.btSorted.gameObject); } else { game.UpdateHand(index, 0.5f); } game.UpdateHand(GameModelChan.IndexLastInTurn, 0.5f); if (soundId == -1) { SoundGameplay.Instances.PlaySoundStealCard(cardId, GetPlayer(index), GetLastPlayer(index)); } else { SoundGameplay.Instances.PlaySoundInGame(soundId, GetPlayer(index)); } }
public static void GiveCard(int _player, ECard _card) { m_cards[_player].Add(new CardData(_card)); UpdateUI(_player); }
/// <summary> /// Khi có người chơi đánh bài /// </summary> /// <param name="index">Người đánh bài</param> /// <param name="cardValue">Card đã đánh</param> public static void Discard(int soundId, int index, int cardValue, params string[] discardToPlayer) { ECard card = GetCard_FromHandPlayer(index, cardValue); if (GameModelChan.YourController == null || GameModelChan.YourController.slotServer != index) { card = new ChanCard(index, cardValue); card.Instantiate(game.mPlaymat.locationPlayer[(int)GetPlayer(index).mSide]); GetPlayer(index).mCardHand.Add(card); card.UpdateParent(index); } GetPlayer(index).mCardDiscardedAndDraw.Add(card); GetPlayer(index).mCardDiscarded.Add(card); GetPlayer(index).mCardHand.Remove(card); if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null) { PlayerControllerChan p = GetPlayer(discardToPlayer[0]); GetPlayer(discardToPlayer[0]).mCardTrash.Add(card); card.ChangeSide(p.slotServer); card.UpdateParent(p.slotServer); } else { GetPlayer(index).mCardTrash.Add(card); } game.fullLaying = false; card.UpdateParent(index); if (YourController != null && YourController.slotServer == index) { game.OnClickSort(game.btSorted.gameObject); } else { game.UpdateHand(index, 0.5f); } if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null) { game.UpdateHand(GetPlayer(discardToPlayer[0]).slotServer, 0.5f); } if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null)// co' chiu' tra? cua { Debug.Log(GameModelChan.GetPlayer(discardToPlayer[0]).username + " PlayerState " + GameModelChan.GetPlayer(index).PlayerState.ToString()); if (GameModelChan.GetPlayer(discardToPlayer[0]).PlayerState == EPlayerController.EPlayerState.inTurnStealOrIgnore) { // Chíu cây bốc MiniState = EGameStateMini.stealCard_or_skip; //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetPlayer(discardToPlayer[0]), null); } else { // Chíu cây bốc đánh MiniState = EGameStateMini.stealCard_or_draw; //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetNextPlayer(discardToPlayer[0]), null); } } else { MiniState = EGameStateMini.stealCard_or_draw; //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetNextPlayer(index), GetLastPlayer(index)); } SoundGameplay.Instances.PlaySoundInGame(soundId, GetPlayer(index)); }
/// <summary> /// Hiện thông tin, kết quả khi hết trận. /// </summary> private IEnumerator _FinishGame() { #region SHOW OTHER HAND foreach (PlayerControllerChan p in GameModelChan.ListPlayerInGame) { if (GameModelChan.YourController != null && p.slotServer == YourController.slotServer) { continue; } //Đặt những card ăn vào danh sách card của bản thân (Fix trường hợp có người Ù giữa trận card ăn bị kẹt chèn đè lên) p.mCardHand.ForEach(c => { c.originSide = c.currentSide; c.originSlot = c.currentSlot; }); List <int> lst = new List <int>(); while (p.summary.inHand.Count > 0) { if (p.mCardHand.Find(c => c.CardId == p.summary.inHand[0]) == null) { lst.Add(p.summary.inHand[0]); } p.summary.inHand.RemoveAt(0); } foreach (int _value in lst) { ECard card = p.mCardHand.Find(c => c.CardId == -1); if (card != null) { card.CardId = _value; } } p.mCardHand.Sort((c1, c2) => c1.CardId.CompareTo(c2.CardId)); } game.UpdateHand(); #endregion //0.5s cho Start Game mới. O.5s cho Gameplay Process Command Update Hand float time = game.TimeCountDown; float timeShowPoint = (time - 1) / 3f; float timeShowResult = timeShowPoint, timeShowMoney = timeShowPoint; MiniState = EGameStateMini.summary_point; GameModelChan.game.UpdateUI(); yield return(new WaitForSeconds(timeShowPoint)); #region PLAY SOUNDS #endregion MiniState = EGameStateMini.summary_result; GameModelChan.game.UpdateUI(); yield return(new WaitForSeconds(timeShowResult)); MiniState = EGameStateMini.summary_exchange; //GameModel.game.UpdateUserInfo(); //GameModel.game.UpdateUI(); //yield return new WaitForSeconds(timeShowMoney); MiniState = EGameStateMini.summary_end; GameModelChan.game.UpdateUI(); yield return(new WaitForSeconds(0.5f)); //DestroyObject(); game.lbDiscard.text = ""; ListResultXuongView.Close(); game.fullLayingEffect.Destroy(); GameModelChan.CreateNewGame(); ListPlayerInGame.ForEach(p => { p.warningMessage = ""; p.Reset(); p.summary.result = PlayerControllerChan.FinishGame.ResultSprite.None; }); game.IsProcesResonseDone = true; }
/// <summary> /// Hiện thông tin, kết quả khi hết trận. /// </summary> private IEnumerator _FinishGame() { #region SET RESULT if (game.gameFinishType == GamePlayPhom.EFinishType.NORMAL) { GamePlayPhom.Summary sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_2); if (sum != null) { GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHAT; GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHI; } else { if (game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.MOM) != null) { GameModelPhom.GetPlayer(game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.MOM).targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHAT; } else if (game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.XAO_KHAN) != null) { GamePlayPhom.Summary xaoKhan = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.XAO_KHAN); GameModelPhom.GetPlayer(xaoKhan.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.XAO_KHAN; ListPlayerInGame.ForEach(p => { if (p.username != xaoKhan.targetPlayer) { p.summary.result = PlayerControllerPhom.FinishGame.ResultSprite.MOM; } }); } } sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_3); if (sum != null) { GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_BA; } sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_4); if (sum != null) { GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_TU; } List <GamePlayPhom.Summary> lstSum = game.summaryGame.FindAll(o => o.action == GamePlayPhom.Summary.EAction.MOM); if (lstSum.Count > 0) { foreach (GamePlayPhom.Summary s in lstSum) { GameModelPhom.GetPlayer(s.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.MOM; } } } else { GamePlayPhom.Summary sum; if (game.gameFinishType == GamePlayPhom.EFinishType.U_THUONG || game.gameFinishType == GamePlayPhom.EFinishType.U_DEN_THUONG) { sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_THUONG || o.action == GamePlayPhom.Summary.EAction.U_TRON || o.action == GamePlayPhom.Summary.EAction.DEN_LANG); if (sum != null) { GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U; } } else if (game.gameFinishType == GamePlayPhom.EFinishType.U_TRON || game.gameFinishType == GamePlayPhom.EFinishType.U_DEN_TRON) { sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_TRON || o.action == GamePlayPhom.Summary.EAction.DEN_LANG); if (sum != null) { GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U_TRON; } } else if (game.gameFinishType == GamePlayPhom.EFinishType.U_XUONG) { sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_XUONG); if (sum != null) { GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U_XUONG; } } } #endregion #region SHOW OTHER HAND foreach (PlayerControllerPhom p in GameModelPhom.ListPlayerInGame) { if (p.slotServer == YourController.slotServer) { continue; } //Đặt những card ăn vào danh sách card của bản thân (Fix trường hợp có người Ù giữa trận card ăn bị kẹt chèn đè lên) p.mCardHand.ForEach(c => { c.originSide = c.currentSide; c.originSlot = c.currentSlot; }); List <int> lst = new List <int>(); while (p.summary.inHand.Count > 0) { if (p.mCardHand.Find(c => c.CardId == p.summary.inHand[0]) == null) { lst.Add(p.summary.inHand[0]); } p.summary.inHand.RemoveAt(0); } foreach (int _value in lst) { ECard card = p.mCardHand.Find(c => c.CardId == -1); if (card != null) { card.CardId = _value; } } p.mCardHand.Sort((c1, c2) => c1.CardId.CompareTo(c2.CardId)); } game.UpdateHand(); #endregion #region CHUYỂN CÁC QUÂN BÀI THẮNG TRẮNG RA GIỮA MÀN HÌNH if (game.gameFinishType != GamePlayPhom.EFinishType.NORMAL && YourController.mCardHand.Count == 0) { int i = 0; YourController.mCardMelds.ForEach(meld => { for (int j = 0; j < meld.meld.Count; j++) { ECard card = meld.meld[j]; card.SetHightlight(); Hashtable hash = new Hashtable(); hash.Add("islocal", true); hash.Add("time", 0.75f); hash.Add("position", game.mPlaymat.GetLocationFulllaying(YourController, i, j)); iTween.MoveTo(card.gameObject, hash); iTween.ScaleTo(card.gameObject, Vector3.one * 1.5f, 0.75f); } i++; }); } #endregion //0.5s cho Start Game mới. O.5s cho GamePlayPhom Process Command Update Hand float time = game.TimeCountDown; float timeShowPoint = (time - 1) / 3f; float timeShowResult = timeShowPoint, timeShowMoney = timeShowPoint; MiniState = EGameStateMini.summary_point; GameModelPhom.game.UpdateUI(); yield return(new WaitForSeconds(timeShowPoint)); #region PLAY SOUNDS SoundGamePhom.Instances.PlaySound(game); #endregion MiniState = EGameStateMini.summary_result; GameModelPhom.game.UpdateUI(); yield return(new WaitForSeconds(timeShowResult)); MiniState = EGameStateMini.summary_exchange; GameModelPhom.game.UpdateUserInfo(); GameModelPhom.game.UpdateUI(); yield return(new WaitForSeconds(timeShowMoney)); MiniState = EGameStateMini.summary_end; GameModelPhom.game.UpdateUI(); yield return(new WaitForSeconds(0.5f)); //DestroyObject(); game.IsProcesResonseDone = true; }