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); }
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); }