Ejemplo n.º 1
0
        public PlayerEntry(GenericReader reader, YahtzeeGame game)
        {
            int version = reader.ReadInt();

            Game   = game;
            Player = reader.ReadMobile() as PlayerMobile;

            Aces          = reader.ReadInt();
            Twos          = reader.ReadInt();
            Threes        = reader.ReadInt();
            Fours         = reader.ReadInt();
            Fives         = reader.ReadInt();
            Sixes         = reader.ReadInt();
            ThreeOfAKind  = reader.ReadInt();
            FourOfAKind   = reader.ReadInt();
            FullHouse     = reader.ReadInt();
            SmallStraight = reader.ReadInt();
            LargeStraight = reader.ReadInt();
            Yahtzee       = reader.ReadInt();
            Chance        = reader.ReadInt();

            YahtzeeBonus = reader.ReadInt();
            Score        = reader.ReadInt();
            Completed    = reader.ReadDateTime();
            ScoreCard    = reader.ReadItem() as YahtzeeScoreCard;

            if (game != null)
            {
                ScoreCard.Entry = this;
                ScoreCard.Game  = game;
            }
        }
Ejemplo n.º 2
0
        public YahtzeeScoreCard(PlayerEntry entry, YahtzeeGame game)
            : base(0xE17)
        {
            Entry = entry;
            Game  = game;

            Name = "Yahtzee Score Card";
        }
Ejemplo n.º 3
0
        public void RollDice(PlayerMobile pm)
        {
            if (CurrentRoll == null || RollIndex == 0)
            {
                CurrentRoll = Roll();
            }
            else
            {
                CurrentRoll.Reroll();
            }

            RollIndex++;
            string roll      = RollIndex == 1 ? "1st" : RollIndex == 2 ? "2nd" : "final";
            bool   isYahtzee = PlayerEntry.ValidateTypeFromRoll(CurrentRoll, ScoreType.Yahtzee);

            Players.ForEach(e =>
            {
                if (pm == e.Player)
                {
                    if (isYahtzee)
                    {
                        YahtzeeGame.SendMessage(e.Player, "You have rolled a Yahtzee!!!");
                    }
                    else
                    {
                        YahtzeeGame.SendMessage(e.Player, String.Format("You have made your {0} roll.", roll));
                    }
                }
                else
                {
                    if (isYahtzee)
                    {
                        YahtzeeGame.SendMessage(e.Player, String.Format("{0} has rolled a Yahtzee!!!", e.Player.Name));
                    }
                    else
                    {
                        YahtzeeGame.SendMessage(e.Player, String.Format("{0} has made thier {1} roll.", e.Player.Name, roll));
                    }
                }
            });

            if (Board != null)
            {
                if (isYahtzee)
                {
                    Effects.PlaySound(Board.GetWorldLocation(), Board.Map, 0x3D);
                }
                else
                {
                    DoRollEffects(pm);
                }
            }

            Timer.DelayCall(TimeSpan.FromSeconds(.25), SendGumps);
        }
Ejemplo n.º 4
0
        public void CompleteTurn()
        {
            if (CurrentRoll != null)
            {
                CurrentRoll.Clear();
            }

            if (UsingJoker)
            {
                UsingJoker = false;
            }

            if (TurnIndex == Players.Count - 1)
            {
                Round++;
                TurnIndex = 0;
            }
            else
            {
                TurnIndex++;
            }

            if (Round >= Rounds)
            {
                EndGame();
                return;
            }

            PlayerEntry next = Players[TurnIndex];

            if (Players.Count > 1)
            {
                Players.ForEach(e =>
                {
                    if (e.Player == next.Player)
                    {
                        YahtzeeGame.SendMessage(e.Player, "It's your turn!", 75);
                    }
                    else
                    {
                        if (next.Player.NetState == null)
                        {
                            YahtzeeGame.SendMessage(e.Player, String.Format("It is now {0}'s turn, however they are no longer online!", next.Player.Name), 75);
                        }
                        else
                        {
                            YahtzeeGame.SendMessage(e.Player, String.Format("It is now {0}'s turn!", next.Player.Name), 75);
                        }
                    }
                });
            }

            RollIndex = 0;
            Timer.DelayCall(TimeSpan.FromSeconds(.5), SendGumps);
        }
Ejemplo n.º 5
0
        private void GiveScorecards()
        {
            Players.ForEach(e =>
            {
                var card = new YahtzeeScoreCard(e, this);

                e.Player.Backpack.DropItem(card);
                e.ScoreCard = card;
                YahtzeeGame.SendMessage(e.Player, "A score card has been added to your backpack.");

                e.ScoreCard.InvalidateProperties();
            });
        }
Ejemplo n.º 6
0
        public void EndGame()
        {
            TallyScore();

            Timer.DelayCall(TimeSpan.FromSeconds(.5), SendGumps);

            if (Games.Contains(this))
            {
                Games.Remove(this);
            }

            if (Board != null)
            {
                Board.Game = null;
                Board.InvalidateProperties();
            }

            Players.ForEach(e =>
            {
                e.Game      = null;
                e.Completed = DateTime.Now;

                if (e.ScoreCard.Game != null)
                {
                    e.ScoreCard.Game = null;
                }

                e.ScoreCard.InvalidateProperties();
                e.ScoreCard = null;

                if (YahtzeeStats.CheckScore(e))
                {
                    Players.ForEach(entry =>
                    {
                        if (entry.Player == e.Player)
                        {
                            YahtzeeGame.SendMessage(entry.Player, String.Format("Your score of {0} has been entered into the Yahtzee top 10!", e.Score.ToString()));
                        }
                        else
                        {
                            YahtzeeGame.SendMessage(entry.Player, String.Format("{0}'s score of {1} has been entered into the Yahtzee Top 10!", e.Player.Name, e.Score.ToString()));
                        }
                    });
                }
            });

            Timer.DelayCall(TimeSpan.FromSeconds(1), Players.Clear);
        }
Ejemplo n.º 7
0
        public PlayerEntry(PlayerMobile pm, YahtzeeGame game)
        {
            Player = pm;
            Game   = game;

            Aces   = -1;
            Twos   = -1;
            Threes = -1;
            Fours  = -1;
            Fives  = -1;
            Sixes  = -1;

            ThreeOfAKind  = -1;
            FourOfAKind   = -1;
            FullHouse     = -1;
            SmallStraight = -1;
            LargeStraight = -1;
            Yahtzee       = -1;
            Chance        = -1;
        }
Ejemplo n.º 8
0
        public void CancelGame()
        {
            Players.ForEach(entry =>
            {
                YahtzeeGame.SendMessage(entry.Player, "Your current yahtzee game has been canceled.", 2118);
            });


            if (Board != null)
            {
                Board.Game = null;
                Board.InvalidateProperties();
            }

            CloseGumps();

            Timer.DelayCall(TimeSpan.FromSeconds(1), Players.Clear);

            if (Games.Contains(this))
            {
                Games.Remove(this);
            }
        }
Ejemplo n.º 9
0
        public void BeginGame()
        {
            if (Players.Count < 1)
            {
                CancelGame();
                return;
            }

            if (Players.Count > 0)
            {
                switch (RollOrder)
                {
                case RollOrder.AsIs:
                    break;

                case RollOrder.Random:
                    if (Players.Count == 2)
                    {
                        if (Utility.RandomDouble() > 0.5)
                        {
                            PlayerEntry entry = Players[1];
                            Players.Remove(entry);
                            Players.Insert(0, entry);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < 25; i++)
                        {
                            int random = Utility.Random(Players.Count);

                            if (random > 0)
                            {
                                PlayerEntry entry = Players[random];
                                Players.Remove(entry);
                                Players.Insert(0, entry);
                            }
                        }
                    }

                    break;

                case RollOrder.Roll:
                    Dictionary <PlayerMobile, int> table = new Dictionary <PlayerMobile, int>();
                    foreach (PlayerEntry e in Players)
                    {
                        table.Add(e.Player, SumRoll(Roll().ToArray()));
                    }

                    Players.Clear();
                    foreach (KeyValuePair <PlayerMobile, int> kvp in table.OrderBy(k => - k.Value))
                    {
                        YahtzeeGame.SendMessage(kvp.Key, String.Format("You have rolled a {0}!", kvp.Value));
                        Players.Add(new PlayerEntry(kvp.Key, this));
                    }

                    table.Clear();
                    break;
                }
            }

            TurnIndex = 0;
            RollIndex = 0;
            Round     = 1;

            Players.ForEach(e => YahtzeeGame.SendMessage(e.Player, "Yahtzee has begun!"));

            GiveScorecards();

            if (Board != null)
            {
                Board.InvalidateProperties();
            }

            Timer.DelayCall(TimeSpan.FromSeconds(.5), new TimerCallback(SendGumps));
        }
Ejemplo n.º 10
0
 public YahtzeeGump(PlayerEntry entry, PlayerMobile pm, YahtzeeGame game) : base(pm, 200, 120)
 {
     Game  = game;
     Entry = entry;
 }
Ejemplo n.º 11
0
        public void ApplyScore(ScoreType type, int total)
        {
            if (Game == null)
            {
                return;
            }

            bool yahtzeebonus = false;

            switch (type)
            {
            default:
            case ScoreType.Aces:
                Aces = total;
                break;

            case ScoreType.Twos:
                Twos = total;
                break;

            case ScoreType.Threes:
                Threes = total;
                break;

            case ScoreType.Fours:
                Fours = total;
                break;

            case ScoreType.Fives:
                Fives = total;
                break;

            case ScoreType.Sixes:
                Sixes = total;
                break;

            case ScoreType.ThreeOfAKind:
                ThreeOfAKind = total;
                break;

            case ScoreType.FourOfAKind:
                FourOfAKind = total;
                break;

            case ScoreType.FullHouse:
                if (total > 0)
                {
                    Player.PlaySound(Player.Female ? FemaleHappy : MaleHappy);
                }
                FullHouse = total;
                break;

            case ScoreType.SmallStraight:
                if (total > 0)
                {
                    Player.PlaySound(Player.Female ? FemaleHappy : MaleHappy);
                }
                SmallStraight = total;
                break;

            case ScoreType.LargeStraight:
                if (total > 0)
                {
                    Player.PlaySound(Player.Female ? FemaleHappy : MaleHappy);
                }
                LargeStraight = total;
                break;

            case ScoreType.Yahtzee:
                if (total > 0)
                {
                    Player.PlaySound(Player.Female ? FemaleHappy : MaleHappy);
                }
                if (HasScored(ScoreType.Yahtzee) && Yahtzee > 0)
                {
                    yahtzeebonus = true;
                    YahtzeeBonus++;
                }
                else
                {
                    Yahtzee = total;
                }
                break;

            case ScoreType.Chance:
                Chance = total;
                break;
            }

            Game.Players.ForEach(e =>
            {
                if (e.Player != null)
                {
                    if (e.Player != this.Player)
                    {
                        YahtzeeGame.SendMessage(e.Player, String.Format("{0} takes a score of {1} for {2}.", this.Player.Name, total.ToString(), GetScoreForType(type)));
                    }
                    else
                    {
                        YahtzeeGame.SendMessage(Player, String.Format("You take a score of {0} for {1}.", total.ToString(), GetScoreForType(type)));
                    }
                }
            });

            if (!yahtzeebonus)
            {
                Game.CompleteTurn();
            }
            else
            {
                YahtzeeGame.SendMessage(Player, "Apply your joker to any unused box!");
                Game.UsingJoker = true;

                Game.SendGumps();
            }
        }