Beispiel #1
0
        public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List <Card> cards, out List <Player> players)
        {
            answerPending = new Semaphore(0, 1);
            int timeOut = _GetActualTimeoutSecond(verifier.Helper);

            proxy.AskForCardUsage(prompt, verifier, timeOut);
            skill   = null;
            cards   = null;
            players = null;
            if (answerPending.WaitOne(timeOut * 1000 /* + GameDelays.UiDelayCompensation*/))
            {
                skill   = answerSkill;
                cards   = answerCards;
                players = answerPlayers;
            }
            cards   = cards ?? new List <Card>();
            players = players ?? new List <Player>();
            return(verifier.FastVerify(HostPlayer, answerSkill, cards, players) == VerifierResult.Success);
        }
Beispiel #2
0
        public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List <Card> cards, out List <Player> players)
        {
            Trace.TraceInformation("Asking Card Usage to {0}.", HostPlayer.Id);
            TryAskForCardUsage(prompt, verifier);
            SimulateReplayDelay();
            NextQuestion();
            if (TryAnswerForCardUsage(prompt, verifier, out skill, out cards, out players))
            {
                uiProxy.Freeze();
                if (skill == null && (cards == null || cards.Count == 0) && (players == null || players.Count == 0))
                {
                    return(false);
                }
#if DEBUG
                if (verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
                {
                    Trace.Assert(false);
                }
#endif
                return(true);
            }
            uiProxy.Freeze();
            return(false);
        }
Beispiel #3
0
 public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     answerPending = new Semaphore(0, 1);
     proxy.AskForCardUsage(prompt, verifier, TimeOutSeconds);
     if (answerPending.WaitOne(TimeOutSeconds * 1000))
     {
         skill = answerSkill;
         cards = answerCards;
         players = answerPlayers;
     }
     else
     {
         skill = null;
         cards = null;
         players = null;
     }
     if (verifier.FastVerify(HostPlayer, answerSkill, answerCards, answerPlayers) == VerifierResult.Success)
     {
         return true;
     }
     return false;
 }
Beispiel #4
0
 public bool TryAskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     cards = null;
     skill = null;
     players = null;
     int timeOut = TimeOutSeconds + (verifier.Helper != null ? verifier.Helper.ExtraTimeOutSeconds : 0);
     Trace.TraceInformation("Asking Card Usage to {0}, timeout {1}.", HostPlayer.Id, timeOut);
     int? count;
     if (!server.ExpectNext(clientId, timeOut))
     {
         return false;
     }
     count = server.GetInt(clientId, 0);
     if (count == null || count == 0)
     {
         return false;
     }
     if (count == null)
     {
         return false;
     }
     count = server.GetInt(clientId, 0);
     if (count == 1)
     {
         skill = server.GetSkill(clientId, 0);
         if (skill == null)
         {
             return false;
         }
         if (!(skill is CheatSkill) && !HostPlayer.ActionableSkills.Contains(skill))
         {
             Trace.TraceWarning("Client DDOS!");
             return false;
         }
     }
     count = server.GetInt(clientId, 0);
     if (count == null)
     {
         return false;
     }
     cards = new List<Card>();
     while (count-- > 0)
     {
         Card item = server.GetCard(clientId, 0);
         if (item == null)
         {
             return false;
         }
         if (item.Owner != HostPlayer)
         {
             if (!(verifier.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType) ||
                 (skill != null && skill.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType))))
             {
                 Trace.TraceWarning("Client hacking cards!");
                 return false;
             }
         }
         cards.Add(item);
     }
     count = server.GetInt(clientId, 0);
     if (count == null)
     {
         return false;
     }
     players = new List<Player>();
     while (count-- > 0)
     {
         Player item = server.GetPlayer(clientId, 0);
         if (item == null)
         {
             return false;
         }
         players.Add(item);
     }
     bool requireUnique = true;
     if (skill is ActiveSkill)
     {
         if ((skill as ActiveSkill).Helper != null && (skill as ActiveSkill).Helper.IsPlayerRepeatable) requireUnique = false;
     }
     if ((players != null && players.Distinct().Count() != players.Count && requireUnique) ||
         verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
     {
         Trace.TraceWarning("Client seems to be sending invalid answers at us. DDOS?");
         cards = new List<Card>();
         skill = null;
         players = new List<Player>();
         return false;
     }
     return true;
 }
 public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     Trace.TraceInformation("Asking Card Usage to {0}.", HostPlayer.Id);
     TryAskForCardUsage(prompt, verifier);
     SimulateReplayDelay();
     NextQuestion();
     if (TryAnswerForCardUsage(prompt, verifier, out skill, out cards, out players))
     {
         uiProxy.Freeze();
         if (skill == null && (cards == null || cards.Count == 0) && (players == null || players.Count == 0))
         {
             return false;
         }
     #if DEBUG
         if (verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
         {
             Trace.Assert(false);
         }
     #endif
         return true;
     }
     uiProxy.Freeze();
     return false;
 }
Beispiel #6
0
        bool IUiProxy.AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
        {
            Player p = hostPlayer;
            Console.Write("I AM PLAYER {0}({1}): ", p.Id, p.Hero.Name);
            cards = new List<Card>();
            VerifierResult r = verifier.FastVerify(HostPlayer, null, null, null);
            skill = null;
            Console.Write("Ask for card usage, {0}: ", prompt);
            int i = 0;
            foreach (ICard card in Game.CurrentGame.Decks[p, DeckType.Hand])
            {
                Console.Write(" Card {0} {1}{2}{3}, ", i, card.Suit, card.Rank, card.Type.CardType);
                i++;
            }
            again:
            Console.Write("Card id, -1 to trigger");
            string ids = Console.ReadLine();
            if (ids == null) { Thread.Sleep(200); cards = null; players = null; return false; }
            int id = int.Parse(ids);
            if (id < -1)
            {
                cards = null;
                players = null;
            }
            else
            {
                if (id == -1)
                {
                    Console.Write("Skill ID:");
                    ids = Console.ReadLine();
                    id = int.Parse(ids);
                    if (id >= hostPlayer.Skills.Count || ((!(hostPlayer.Skills[id] is ActiveSkill)) && (!(hostPlayer.Skills[id] is CardTransformSkill))))
                    {
                        goto again;
                    }
                    skill = hostPlayer.Skills[id];
                    while (true)
                    {
                        Console.Write("Card id, -1 to end");
                        ids = Console.ReadLine();
                        id = int.Parse(ids);
                        if (id < 0)
                        {
                            break;
                        }
                        if (id >= Game.CurrentGame.Decks[p, DeckType.Hand].Count)
                        {
                            continue;
                        }
                        cards.Add(Game.CurrentGame.Decks[p, DeckType.Hand][id]);
                    }
                }
                else
                {
                    if (id < Game.CurrentGame.Decks[p, DeckType.Hand].Count)
                    {
                        cards.Add(Game.CurrentGame.Decks[p, DeckType.Hand][id]);
                    }
                }
                players = null;
                r = verifier.FastVerify(HostPlayer, skill, cards, players);
                if (r == VerifierResult.Success)
                {
                    return true;
                }
                if (r == VerifierResult.Fail)
                {
                    Console.Write("Failed check, again? 1 yes 0 no");
                    ids = Console.ReadLine();
                    id = int.Parse(ids);
                    if (id == 1)
                    {
                        goto again;
                    }
                }
            }
            {
                players = new List<Player>();
                while (true)
                {
                    Console.WriteLine("");
                    Console.Write("Target player: -1 to end");
                    ids = Console.ReadLine();
                    id = int.Parse(ids);
                    if (id < 0)
                    {
                        break;
                    }
                    if (id > Game.CurrentGame.Players.Count)
                    {
                        Console.WriteLine("out of range");
                    }
                    else
                    {
                        players.Add(Game.CurrentGame.Players[id]);
                    }
                    r = verifier.FastVerify(HostPlayer, skill, cards, players);
                    if (r == VerifierResult.Partial)
                    {
                        Console.WriteLine("Require more");
                    }
                    if (r == VerifierResult.Fail)
                    {
                        Console.WriteLine("Failed check");
                        players.Remove(Game.CurrentGame.Players[id]);
                    }
                }
                r = verifier.FastVerify(HostPlayer, skill, cards, players);
                if (r == VerifierResult.Success)
                {
                    return true;
                }
                if (r == VerifierResult.Fail)
                {
                    Console.Write("Failed check, again? 1 yes 0 no");
                    ids = Console.ReadLine();
                    id = int.Parse(ids);
                    if (id == 1)
                    {
                        goto again;
                    }
                }
                players = null;
                skill = null;
                cards = null;
                return false;

            }
        }
Beispiel #7
0
 public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     Trace.TraceInformation("Asking Card Usage to {0}.", HostPlayer.Id);
     TryAskForCardUsage(prompt, verifier);
     _SimulateReplayDelay();
     if (active)
     {
         NextQuestion();
     }
     else
     {
         Trace.TraceInformation("Not active player, defaulting.");
     }
     if (TryAnswerForCardUsage(prompt, verifier, out skill, out cards, out players))
     {
         proxy.Freeze();
     #if DEBUG
         Trace.Assert(verifier.FastVerify(HostPlayer, skill, cards, players) == VerifierResult.Success);
     #endif
         return true;
     }
     proxy.Freeze();
     return false;
 }
        public bool TryAskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
        {
            cards = null;
            skill = null;
            players = null;
            int timeOut = TimeOutSeconds + (verifier.Helper != null ? verifier.Helper.ExtraTimeOutSeconds : 0);
            Trace.TraceInformation("Asking Card Usage to {0}, timeout {1}.", HostPlayer.Id, timeOut);
            var answerReady = new Semaphore(0, Int16.MaxValue);
            CardUsageAnsweredEventHandler handler = (s, c, p) =>
                {
                    skillAnswer = s;
                    cardsAnswer = c;
                    playersAnswer = p;
                    answerReady.Release(1);
                };
            proxy.CardUsageAnsweredEvent += handler;
            proxy.AskForCardUsage(prompt, verifier, timeOut);
            bool noAnswer = false;
            if (!answerReady.WaitOne(timeOut * 1000)) noAnswer = true;
            proxy.CardUsageAnsweredEvent -= handler;
            proxy.Freeze();
            if (noAnswer) return false;

            skill = skillAnswer;
            cards = cardsAnswer;
            players = playersAnswer;

            if (skill != null && !(skill is CheatSkill) && !HostPlayer.ActionableSkills.Contains(skill))
            {
                Trace.TraceWarning("Client DDOS!");
                return false;
            }
            if (cards != null)
            {
                foreach (var item in cards)
                {
                    if (item == null)
                    {
                        return false;
                    }
                    if (item.Owner != HostPlayer)
                    {
                        if (!(verifier.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType) ||
                            (skill != null && skill.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType)) ||
                            (verifier.Helper.OtherGlobalCardDeckUsed.Any(dc => dc.Key.Player == item.Place.Player && dc.Key.DeckType == item.Place.DeckType)) ||
                            (skill != null && skill.Helper.OtherGlobalCardDeckUsed.Any(dc => dc.Key.Player == item.Place.Player && dc.Key.DeckType == item.Place.DeckType))))
                        {
                            Trace.TraceWarning("Client hacking cards!");
                            return false;
                        }
                    }
                }
            }
            else
            {
                cards = new List<Card>();
            }
            if (players != null)
            {
                foreach (var item in players)
                {
                    if (item == null)
                    {
                        return false;
                    }
                }
            }
            else
            {
                players = new List<Player>();
            }
            bool requireUnique = true;
            if (skill is ActiveSkill)
            {
                if ((skill as ActiveSkill).Helper != null && (skill as ActiveSkill).Helper.IsPlayerRepeatable) requireUnique = false;
            }
            if ((players != null && players.Distinct().Count() != players.Count && requireUnique) ||
                verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
            {
                Trace.TraceWarning("Client seems to be sending invalid answers at us. DDOS?");
                cards = new List<Card>();
                skill = null;
                players = new List<Player>();
                return false;
            }
            return true;
        }
Beispiel #9
0
 public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     answerPending = new Semaphore(0, 1);
     int timeOut = TimeOutSeconds + (verifier.Helper != null ? verifier.Helper.ExtraTimeOutSeconds : 0);
     proxy.AskForCardUsage(prompt, verifier, timeOut);
     skill = null;
     cards = null;
     players = null;
     if (answerPending.WaitOne(timeOut * 1000))
     {
         skill = answerSkill;
         cards = answerCards;
         players = answerPlayers;
     }
     cards = cards ?? new List<Card>();
     players = players ?? new List<Player>();
     return (verifier.FastVerify(HostPlayer, answerSkill, cards, players) == VerifierResult.Success);
 }
 public bool AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     answerPending = new Semaphore(0, 1);
     int timeOut = _GetActualTimeoutSecond(verifier.Helper);
     proxy.AskForCardUsage(prompt, verifier, timeOut);
     skill = null;
     cards = null;
     players = null;
     if (answerPending.WaitOne(timeOut * 1000/* + GameDelays.UiDelayCompensation*/))
     {
         skill = answerSkill;
         cards = answerCards;
         players = answerPlayers;
     }
     cards = cards ?? new List<Card>();
     players = players ?? new List<Player>();
     return (verifier.FastVerify(HostPlayer, answerSkill, cards, players) == VerifierResult.Success);
 }
Beispiel #11
0
        public bool TryAskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List <Card> cards, out List <Player> players)
        {
            cards   = null;
            skill   = null;
            players = null;
            int timeOut = TimeOutSeconds + (verifier.Helper != null ? verifier.Helper.ExtraTimeOutSeconds : 0);

            Trace.TraceInformation("Asking Card Usage to {0}, timeout {1}.", HostPlayer.Id, timeOut);
            var answerReady = new Semaphore(0, Int16.MaxValue);
            CardUsageAnsweredEventHandler handler = (s, c, p) =>
            {
                skillAnswer   = s;
                cardsAnswer   = c;
                playersAnswer = p;
                answerReady.Release(1);
            };

            proxy.CardUsageAnsweredEvent += handler;
            proxy.AskForCardUsage(prompt, verifier, timeOut);
            bool noAnswer = false;

            if (!answerReady.WaitOne(timeOut * 1000))
            {
                noAnswer = true;
            }
            proxy.CardUsageAnsweredEvent -= handler;
            proxy.Freeze();
            if (noAnswer)
            {
                return(false);
            }

            skill   = skillAnswer;
            cards   = cardsAnswer;
            players = playersAnswer;

            if (skill != null && !(skill is CheatSkill) && !HostPlayer.ActionableSkills.Contains(skill))
            {
                Trace.TraceWarning("Client DDOS!");
                return(false);
            }
            if (cards != null)
            {
                foreach (var item in cards)
                {
                    if (item == null)
                    {
                        return(false);
                    }
                    if (item.Owner != HostPlayer)
                    {
                        if (!(verifier.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType) ||
                              (skill != null && skill.Helper.OtherDecksUsed.Any(dc => dc == item.Place.DeckType)) ||
                              (verifier.Helper.OtherGlobalCardDeckUsed.Any(dc => dc.Key.Player == item.Place.Player && dc.Key.DeckType == item.Place.DeckType)) ||
                              (skill != null && skill.Helper.OtherGlobalCardDeckUsed.Any(dc => dc.Key.Player == item.Place.Player && dc.Key.DeckType == item.Place.DeckType))))
                        {
                            Trace.TraceWarning("Client hacking cards!");
                            return(false);
                        }
                    }
                }
            }
            else
            {
                cards = new List <Card>();
            }
            if (players != null)
            {
                foreach (var item in players)
                {
                    if (item == null)
                    {
                        return(false);
                    }
                }
            }
            else
            {
                players = new List <Player>();
            }
            bool requireUnique = true;

            if (skill is ActiveSkill)
            {
                if ((skill as ActiveSkill).Helper != null && (skill as ActiveSkill).Helper.IsPlayerRepeatable)
                {
                    requireUnique = false;
                }
            }
            if ((players != null && players.Distinct().Count() != players.Count && requireUnique) ||
                verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
            {
                Trace.TraceWarning("Client seems to be sending invalid answers at us. DDOS?");
                cards   = new List <Card>();
                skill   = null;
                players = new List <Player>();
                return(false);
            }
            return(true);
        }
Beispiel #12
0
 public bool TryAskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List<Card> cards, out List<Player> players)
 {
     cards = null;
     skill = null;
     players = null;
     Trace.TraceInformation("Asking Card Usage to {0}, timeout {1}.", HostPlayer.Id, TimeOutSeconds);
     int? count;
     if (!server.ExpectNext(clientId, TimeOutSeconds))
     {
         return false;
     }
     count = server.GetInt(clientId, 0);
     if (count == null || count == 0)
     {
         return false;
     }
     if (count == null)
     {
         return false;
     }
     count = server.GetInt(clientId, 0);
     if (count == 1)
     {
         skill = server.GetSkill(clientId, 0);
         if (skill == null)
         {
             return false;
         }
         if (!(skill is CheatSkill) && !HostPlayer.ActionableSkills.Contains(skill))
         {
             Trace.TraceWarning("Client DDOS!");
             return false;
         }
     }
     count = server.GetInt(clientId, 0);
     if (count == null)
     {
         return false;
     }
     if (count == 0)
     {
         cards = null;
     }
     else
     {
         cards = new List<Card>();
     }
     while (count-- > 0)
     {
         Card item = server.GetCard(clientId, 0);
         if (item == null)
         {
             return false;
         }
         if (item.Owner != HostPlayer)
         {
             Trace.TraceWarning("Client DDOS!");
             return false;
         }
         cards.Add(item);
     }
     count = server.GetInt(clientId, 0);
     if (count == null)
     {
         return false;
     }
     if (count == 0)
     {
         players = null;
     }
     else
     {
         players = new List<Player>();
     }
     while (count-- > 0)
     {
         Player item = server.GetPlayer(clientId, 0);
         if (item == null)
         {
             return false;
         }
         players.Add(item);
     }
     if (verifier.FastVerify(HostPlayer, skill, cards, players) != VerifierResult.Success)
     {
         Trace.TraceWarning("Client seems to be sending invalid answers at us. DDOS?");
         cards = null;
         skill = null;
         players = null;
         return false;
     }
     return true;
 }
        bool IPlayerProxy.AskForCardUsage(Prompt prompt, ICardUsageVerifier verifier, out ISkill skill, out List <Card> cards, out List <Player> players)
        {
            Player p = hostPlayer;

            Console.Write("I AM PLAYER {0}({1}): ", p.Id, p.Hero.Name);
            cards = new List <Card>();
            VerifierResult r = verifier.FastVerify(HostPlayer, null, null, null);

            skill = null;
            Console.Write("Ask for card usage, {0}: ", prompt);
            int i = 0;

            foreach (ICard card in Game.CurrentGame.Decks[p, DeckType.Hand])
            {
                Console.Write(" Card {0} {1}{2}{3}, ", i, card.Suit, card.Rank, card.Type.Name);
                i++;
            }
again:
            Console.Write("Card id, -1 to trigger");
            string ids = Console.ReadLine();

            if (ids == null)
            {
                Thread.Sleep(200); cards = null; players = null; return(false);
            }
            int id = int.Parse(ids);

            if (id < -1)
            {
                cards   = null;
                players = null;
            }
            else
            {
                if (id == -1)
                {
                    Console.Write("Skill ID:");
                    ids = Console.ReadLine();
                    id  = int.Parse(ids);
                    if (id >= hostPlayer.Skills.Count || ((!(hostPlayer.Skills[id] is ActiveSkill)) && (!(hostPlayer.Skills[id] is CardTransformSkill))))
                    {
                        goto again;
                    }
                    skill = hostPlayer.Skills[id];
                    while (true)
                    {
                        Console.Write("Card id, -1 to end");
                        ids = Console.ReadLine();
                        id  = int.Parse(ids);
                        if (id < 0)
                        {
                            break;
                        }
                        if (id >= Game.CurrentGame.Decks[p, DeckType.Hand].Count)
                        {
                            continue;
                        }
                        cards.Add(Game.CurrentGame.Decks[p, DeckType.Hand][id]);
                    }
                }
                else
                {
                    if (id < Game.CurrentGame.Decks[p, DeckType.Hand].Count)
                    {
                        cards.Add(Game.CurrentGame.Decks[p, DeckType.Hand][id]);
                    }
                }
                players = null;
                r       = verifier.FastVerify(HostPlayer, skill, cards, players);
                if (r == VerifierResult.Success)
                {
                    return(true);
                }
                if (r == VerifierResult.Fail)
                {
                    Console.Write("Failed check, again? 1 yes 0 no");
                    ids = Console.ReadLine();
                    id  = int.Parse(ids);
                    if (id == 1)
                    {
                        goto again;
                    }
                }
            }
            {
                players = new List <Player>();
                while (true)
                {
                    Console.WriteLine("");
                    Console.Write("Target player: -1 to end");
                    ids = Console.ReadLine();
                    id  = int.Parse(ids);
                    if (id < 0)
                    {
                        break;
                    }
                    if (id > Game.CurrentGame.Players.Count)
                    {
                        Console.WriteLine("out of range");
                    }
                    else
                    {
                        players.Add(Game.CurrentGame.Players[id]);
                    }
                    r = verifier.FastVerify(HostPlayer, skill, cards, players);
                    if (r == VerifierResult.Partial)
                    {
                        Console.WriteLine("Require more");
                    }
                    if (r == VerifierResult.Fail)
                    {
                        Console.WriteLine("Failed check");
                        players.Remove(Game.CurrentGame.Players[id]);
                    }
                }
                r = verifier.FastVerify(HostPlayer, skill, cards, players);
                if (r == VerifierResult.Success)
                {
                    return(true);
                }
                if (r == VerifierResult.Fail)
                {
                    Console.Write("Failed check, again? 1 yes 0 no");
                    ids = Console.ReadLine();
                    id  = int.Parse(ids);
                    if (id == 1)
                    {
                        goto again;
                    }
                }
                players = null;
                skill   = null;
                cards   = null;
                return(false);
            }
        }