Example #1
0
        void OnCardEffectSync(CBCardEffectSync msg)
        {
            var fromCard    = room.GetCard(msg.FromCardID);
            int cardTableID = fromCard.tableID;

            if (cardTableID == 1) // 侦察
            {
            }
            else if (cardTableID == 2) //混乱
            {
                var p = room.GetPlayer(msg.TargetID);
                p.ChangeCard(room.GetCard(msg.TargetCardID));
            }
            else if (cardTableID == 3) // 变革
            {
                var p = room.GetPlayer(msg.TargetID);
                p.ChangeCard(room.GetCard(msg.TargetCardID));
            }
            else if (cardTableID == 4) // 壁垒
            {
                var p = room.GetPlayer(msg.FromPlayerID);
                p.SetEffect(PlayerData.Effect.InvincibleOneRound);
            }
            else if (cardTableID == 5) // 猜卡牌TableID
            {
            }
            else if (cardTableID == 6) // 决斗
            {
            }
            else if (cardTableID == 7) // 霸道 太阳
            {
            }
            else if (cardTableID == 8) // 交换
            {
                var p = room.GetPlayer(msg.TargetID);
                p.ChangeCard(room.GetCard(msg.TargetCardID));
            }
            else if (cardTableID == 9) // 开溜(只限制出牌阶段,出牌类型,出牌后无效果)
            {
            }
            else if (cardTableID == 10)
            {
            }

            SendEvent(EventDef.SOS.CardEffect, msg);
        }
Example #2
0
        public float CardEffectLogic(Player from, Player target, Card card, int extend)
        {
            float            waitFor = 3;
            CBCardEffectSync msg     = new CBCardEffectSync();

            msg.FromPlayerID = from.id;
            msg.FromCardID   = card.id;
            int cardTableID = card.tableID;

            if (target != null && target.effect == Player.Effect.InvincibleOneRound)
            {
                Debug.LogError("玩家 {0} 无敌状态,技能 {1} 无效", target.name, card.table.effect);
                return(1);
            }

            if (cardTableID == 1) // 侦察
            {
                msg.TargetID     = target.id;
                msg.TargetCardID = target.oneCard.id;
                SendTo(from.id, msg);
            }
            else if (cardTableID == 2) //混乱
            {
                List <int> cardIds = new List <int>();
                var        players = alivePlayers;
                foreach (var p in players)
                {
                    cardIds.Add(p.oneCard.id);
                }
                cardIds = cardIds.OrderBy(a => Guid.NewGuid()).ToList();

                for (int i = 0; i < players.Count; i++)
                {
                    var p = players[i];
                    p.ChangeCard(GetCard(cardIds[i]));
                    msg.TargetID     = p.id;
                    msg.TargetCardID = cardIds[i];
                    SendTo(p.id, msg);
                }
            }
            else if (cardTableID == 3)              // 变革
            {
                m_cardMgr.PutCard(from.oneCard);    // 放回
                m_cardMgr.Shuffle();                // 洗牌
                var newCard = m_cardMgr.TakeCard(); // 抓牌
                from.ChangeCard(newCard);
                msg.TargetID     = from.id;
                msg.TargetCardID = newCard.id;
                SendTo(from.id, msg);
            }
            else if (cardTableID == 4) // 壁垒
            {
                from.SetEffect(Player.Effect.InvincibleOneRound);
                foreach (var p in alivePlayers)
                {
                    msg.TargetID = p.id;
                    SendTo(p.id, msg);
                }
            }
            else if (cardTableID == 5)                // 猜测
            {
                if (extend == target.oneCard.tableID) // 猜卡牌TableID
                {
                    PlayerOut(target);
                }
                waitFor = 5;
            }
            else if (cardTableID == 6) // 决斗
            {
                if (from.oneCard.point > target.oneCard.point)
                {
                    PlayerOut(target);
                }
                waitFor = 5;
            }
            else if (cardTableID == 7) // 霸道 太阳
            {
                bool isOut = false;
                if (target.oneCard.tableID == 10) // 弃置月亮航站,直接出局
                {
                    isOut = true;
                }
                DropCard(target);

                if (m_cardMgr.isEmpty || isOut)
                {
                    PlayerOut(target);
                }
                else
                {
                    SendCard(target);
                }
            }
            else if (cardTableID == 8) // 交换
            {
                Card tmp = from.oneCard;
                from.ChangeCard(target.oneCard);
                target.ChangeCard(tmp);

                msg.TargetID     = from.id;
                msg.TargetCardID = from.oneCard.id;
                SendTo(from.id, msg);

                msg.TargetID     = target.id;
                msg.TargetCardID = target.oneCard.id;
                SendTo(target.id, msg);
            }
            else if (cardTableID == 9) // 开溜(只限制出牌阶段,出牌类型,出牌后无效果)
            {
            }
            else if (cardTableID == 10) // 出局
            {
                PlayerOut(from);
            }

            LogStatus("出牌阶段");

            return(waitFor);
        }