private void OnSelectBattleCmd(GameServerPacket packet) { packet.ReadByte(); // player _duel.BattlePhase = new BattlePhase(); BattlePhase battle = _duel.BattlePhase; int count = packet.ReadByte(); for (int i = 0; i < count; ++i) { packet.ReadInt32(); // card id int con = GetLocalPlayer(packet.ReadByte()); CardLocation loc = (CardLocation)packet.ReadByte(); int seq = packet.ReadByte(); int desc = packet.ReadInt32(); ClientCard card = _duel.GetCard(con, loc, seq); if (card != null) { card.ActionIndex[0] = i; battle.ActivableCards.Add(card); battle.ActivableDescs.Add(desc); } } count = packet.ReadByte(); for (int i = 0; i < count; ++i) { packet.ReadInt32(); // card id int con = GetLocalPlayer(packet.ReadByte()); CardLocation loc = (CardLocation)packet.ReadByte(); int seq = packet.ReadByte(); packet.ReadByte(); // diratt ClientCard card = _duel.GetCard(con, loc, seq); if (card != null) { card.ActionIndex[1] = i; battle.AttackableCards.Add(_duel.GetCard(con, loc, seq)); } } battle.CanMainPhaseTwo = packet.ReadByte() != 0; battle.CanEndPhase = packet.ReadByte() != 0; Connection.Send(CtosMessage.Response, _ai.OnSelectBattleCmd(battle).ToValue()); }
private void OnSelectBattleCmd(BinaryReader packet) { packet.ReadByte(); // player _duel.BattlePhase = new BattlePhase(); BattlePhase battle = _duel.BattlePhase; int count = packet.ReadByte(); for (int i = 0; i < count; ++i) { packet.ReadInt32(); // card id int con = GetLocalPlayer(packet.ReadByte()); CardLocation loc = (CardLocation)packet.ReadByte(); int seq = packet.ReadByte(); int desc = packet.ReadInt32(); ClientCard card = _duel.GetCard(con, loc, seq); if (card != null) { card.ActionIndex[0] = i; battle.ActivableCards.Add(card); battle.ActivableDescs.Add(desc); } } count = packet.ReadByte(); for (int i = 0; i < count; ++i) { packet.ReadInt32(); // card id int con = GetLocalPlayer(packet.ReadByte()); CardLocation loc = (CardLocation)packet.ReadByte(); int seq = packet.ReadByte(); int diratt = packet.ReadByte(); ClientCard card = _duel.GetCard(con, loc, seq); if (card != null) { card.ActionIndex[1] = i; if (diratt > 0) { card.CanDirectAttack = true; } else { card.CanDirectAttack = false; } battle.AttackableCards.Add(card); card.Attacked = false; } } List <ClientCard> monsters = _duel.Fields[0].GetMonsters(); foreach (ClientCard monster in monsters) { if (!battle.AttackableCards.Contains(monster)) { monster.Attacked = true; } } battle.CanMainPhaseTwo = packet.ReadByte() != 0; battle.CanEndPhase = packet.ReadByte() != 0; Connection.Send(CtosMessage.Response, _ai.OnSelectBattleCmd(battle).ToValue()); }