예제 #1
0
        /// <summary>
        /// Tiến hành khiêu chiến giữa 2 người.
        /// </summary>
        /// <param name="lower">Người chơi có thứ hạng cao hơn (số nhỏ hơn).</param>
        /// <param name="upper">Người chơi có thứ hạng thấp hơn (số lớn hơn).</param>
        /// <param name="lowerId">ID của người chơi thứ hạng cao.</param>
        /// <param name="lowerRank">Thứ hạng của người chơi thứ hạng cao.</param>
        /// <returns>True nếu khiêu chiến thành công.</returns>
        private async Task <bool> DuelAsync(IPacketWriter lower, IPacketWriter upper, long lowerId, int lowerRank)
        {
            // Chọn trận trường xà.
            var p0 = await lower.SetDefaultFormationAsync(10);

            if (p0 == null)
            {
                return(false);
            }
            Debug.Assert(p0.CommandId == "42104");

            // Gỡ bỏ toàn bộ tướng.
            var p1 = await lower.RemoveAllHeroesFromFormationAsync(10);

            if (p1 == null)
            {
                return(false);
            }
            Debug.Assert(p1.CommandId == "42107");

            // Chọn trận truỳ hình (không trống).
            var p2 = await upper.SetDefaultFormationAsync(13);

            if (p2 == null)
            {
                return(false);
            }
            Debug.Assert(p2.CommandId == "42104");

            // Khiêu chiến.
            var p3 = await upper.DuelArenaAsync(lowerId, lowerRank);

            if (p3 == null)
            {
                return(false);
            }
            Debug.Assert(p3.CommandId == "64007");
            // FIXME: kiểm tra trận có tướng không?
            // FIXME: kiểm tra thứ hạng thay đổi không?

            // Chọn lại trận truỳ hình.
            var p4 = await lower.SetDefaultFormationAsync(13);

            if (p4 == null)
            {
                return(false);
            }
            Debug.Assert(p4.CommandId == "42104");
            return(true);
        }