Exemple #1
0
        public void AddMarker(Player player, Card card, Guid id, string name, ushort count, ushort oldCount, bool isScriptChange)
        {
            DataNew.Entities.Marker model = Program.GameEngine.GetMarkerModel(id);
            DefaultMarkerModel defaultMarkerModel = model as DefaultMarkerModel;
            if (defaultMarkerModel != null)
                (defaultMarkerModel).SetName(name);
            Marker marker = card.FindMarker(id, name);
            if (player != Player.LocalPlayer)
            {
                if (marker == null && oldCount != 0)
                {
                    Program.GameMess.Warning("Inconsistent state. Cannot create a marker when that marker already exists.");
                    return;
                }
                if (marker != null && oldCount != marker.Count)
                {
                    Program.GameMess.Warning("Inconsistent state.  Marker count invalid.");
                    return;
                }
                card.AddMarker(model, count);

            }
            if (count != 0)
            {
                int newCount = oldCount + count;
                Program.GameMess.PlayerEvent(player, "adds {0} {1} marker(s) on {2}", count, model.Name, card);
                if (isScriptChange == false)
                {
                    Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_0(card, model.ModelString(), oldCount, newCount, isScriptChange);
                    Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_1(card, model.ModelString(), oldCount, newCount, isScriptChange);
                }
            }
        }
Exemple #2
0
 public RandomRequest(Player player, int id, int min, int max)
 {
     _player = player;
     Id = id;
     _min = min;
     _max = max;
 }
Exemple #3
0
 internal Card(Player owner, int id, ulong key, Definitions.CardDef def, Data.CardModel model, bool mySecret)
     : base(owner)
 {
     this.id = id;
       this.Type = new CardIdentity(id) { alias = false, key = key, model = model, mySecret = mySecret };
       definition = def;
       All.Add(id, this);
 }
Exemple #4
0
        private int _state; // Value of this counter

        #endregion Fields

        #region Constructors

        public Counter(Player player, DataNew.Entities.Counter def)
        {
            _player = player;
            _state = def.Start;
            _name = def.Name;
            _id = def.Id;
            _defintion = def;
        }
Exemple #5
0
 // Resets the lPlayer list
 internal static void Reset()
 {
     lock (all)
     {
         all.Clear();
         spectators.Clear();
         LocalPlayer = GlobalPlayer = null;
     }
 }
Exemple #6
0
        /// <summary>Creates new cards on the table, as well as the corresponding CardIdentities.</summary>
        /// <param name="id">An array with the new CardIdentity ids</param>
        /// <param name="modelId"> </param>
        /// <param name="x">The x position of the cards on the table.</param>
        /// <param name="y">The y position of the cards on the table.</param>
        /// <param name="faceUp">Whether the cards are face up or not.</param>
        /// <param name="key"> </param>
        /// <param name="persist"> </param>
        public void CreateCardAt(int[] id, Guid[] modelId, int[] x, int[] y, bool faceUp, bool persist)
        {
            if (id.Length == 0)
            {
                Program.GameMess.Warning("[CreateCardAt] Empty id parameter.");
                return;
            }
            if (id.Length != x.Length || id.Length != y.Length || id.Length != modelId.Length)
            {
                Program.GameMess.Warning("[CreateCardAt] Inconsistent parameters length.");
                return;
            }
            var owner = Player.Find((byte)(id[0] >> 16));

            if (owner == null)
            {
                Program.GameMess.Warning("[CreateCardAt] Player not found.");
                return;
            }
            var table = Program.GameEngine.Table;

            // Bring cards created by oneself to top, for z-order consistency
            if (owner == Player.LocalPlayer)
            {
                for (var i = id.Length - 1; i >= 0; --i)
                {
                    var card = Card.Find(id[i]);
                    if (card == null)
                    {
                        Program.GameMess.Warning("[CreateCardAt] Card not found.");
                        return;
                    }
                    table.SetCardIndex(card, table.Count + i - id.Length);
                }
            }
            else
            {
                for (var i = 0; i < id.Length; i++)
                {
                    new CreateCard(owner, id[i], faceUp, Program.GameEngine.Definition.GetCardById(modelId[i]), x[i], y[i], !persist).Do();
                }
            }

            if (modelId.All(m => m == modelId[0]))
            {
                Program.GameMess.PlayerEvent(owner, "creates {1} '{2}'", owner, modelId.Length, owner == Player.LocalPlayer || faceUp ? Program.GameEngine.Definition.GetCardById(modelId[0]).Name : "card");
            }
            else
            {
                foreach (var m in modelId)
                {
                    Program.GameMess.PlayerEvent(owner, "{0} creates a '{1}'", owner, owner == Player.LocalPlayer || faceUp ? Program.GameEngine.Definition.GetCardById(m).Name : "card");
                }
            }
        }
Exemple #7
0
        public void MoveCardAt(Player player, int[] cards, int[] x, int[] y, int[] idx, bool[] faceUp, bool isScriptMove)
        {
            WriteReplayAction(player.Id);
            // Get the table control
            var table = Program.GameEngine.Table;

            var playCards = cards
                            .Select(cardId => {
                var playCard = Card.Find(cardId);
                if (playCard == null)
                {
                    Program.GameMess.Warning("Inconsistent state. Player {0} tried to move a card that does not exist.", player);
                    Program.GameMess.GameDebug("Missing Card ID={0}", cardId);
                }
                return(playCard);
            })
                            .Where(playCard => playCard != null)
                            .ToArray();

            if (playCards.Length == 0)
            {
                return;
            }

            // Because every player may manipulate the table at the same time, the index may be out of bound
            if (playCards[0].Group == table)
            {
                for (var index = 0; index < idx.Length; index++)
                {
                    if (idx[index] >= table.Count)
                    {
                        idx[index] = table.Count - 1;
                    }
                }
            }
            else
            {
                for (var index = 0; index < idx.Length; index++)
                {
                    if (idx[index] > table.Count)
                    {
                        idx[index] = table.Count;
                    }
                }
            }

            // Ignore cards moved by the local player (already done, for responsiveness)
            if (IsLocalPlayer(player))
            {
                return;
            }
            // Find the old position on the table, if any
            // Do the move
            new MoveCards(player, playCards, x, y, idx, faceUp, isScriptMove).Do();
        }
Exemple #8
0
 public void Peek(Player player, Card card)
 {
     if (!card.PeekingPlayers.Contains(player))
     {
         card.PeekingPlayers.Add(player);
     }
     if (player != Player.LocalPlayer)
     {
         Program.GameMess.PlayerEvent(player, "peeks at a card ({0}).", card.Group is Table ? "on table" : "in " + card.Group.FullName);
     }
 }
Exemple #9
0
        public void AnchorCard(Card card, Player player, bool anchor)
        {
            var astring = anchor ? "anchored" : "unanchored";

            Program.GameMess.PlayerEvent(player, "{0} {1}", astring, card);
            if (Player.LocalPlayer == player)
            {
                return;
            }
            card.SetAnchored(true, anchor);
        }
Exemple #10
0
 public void StopTurn(Player player)
 {
     if (player == Player.LocalPlayer)
     {
         Program.GameEngine.StopTurn = false;
     }
     Program.GameMess.System("{0} wants to play before end of turn.", player);
     Program.GameEngine.EventProxy.OnEndTurn_3_1_0_0(player);
     Program.GameEngine.EventProxy.OnEndTurn_3_1_0_1(player);
     Program.GameEngine.EventProxy.OnTurnPaused_3_1_0_2(player);
 }
Exemple #11
0
 internal Card(Player owner, int id, ulong key, CardDef def, DataNew.Entities.Card model, bool mySecret)
     : base(owner)
 {
     _id = id;
     Type = new CardIdentity(id) {Alias = false, Key = key, Model = model, MySecret = mySecret};
     // var _definition = def;
     All.Add(id, this);
     _alternateOf = null;
     numberOfSwitchWithAlternatesNotPerformed = 0;
     _isAlternateImage = false;
 }
Exemple #12
0
 public void Turn(Player player, Card card, bool up)
 {
     WriteReplayAction(player.Id);
     // Ignore the card we turned ourselves
     if (IsLocalPlayer(player))
     {
         card.MayBeConsideredFaceUp = false;     // see comment on mayBeConsideredFaceUp
         return;
     }
     new Turn(player, card, up).Do();
 }
Exemple #13
0
        public void GameState(Player fromPlayer, string strstate)
        {
            WriteReplayAction(fromPlayer.Id);
            Log.DebugFormat("GameState From {0}", fromPlayer);
            var state = JsonConvert.DeserializeObject <GameSaveState>(strstate);

            state.Load(Program.GameEngine, fromPlayer);

            Program.GameMess.System("{0} sent game state ", fromPlayer.Name);
            Program.GameEngine.GotGameState(fromPlayer);
        }
Exemple #14
0
        public void MoveCard(Player player, int[] card, Group to, int[] idx, bool[] faceUp, bool isScriptMove)
        {
            WriteReplayAction(player.Id);
            // Ignore cards moved by the local player (already done, for responsiveness)
            var cards = card.Select(Card.Find).Where(x => x != null).ToArray();

            if (!IsLocalPlayer(player))
            {
                new MoveCards(player, cards, to, idx, faceUp, isScriptMove).Do();
            }
        }
Exemple #15
0
 public void StartLimited(Player player, Guid[] packs)
 {
     WriteReplayAction(player.Id);
     Program.GameMess.System("{0} starts a limited game.", player);
     if (Player.LocalPlayer.Spectator == false)
     {
         var wnd = new Play.Dialogs.PickCardsDialog();
         WindowManager.PlayWindow.ShowBackstage(wnd);
         wnd.OpenPacks(packs);
     }
 }
 public void AddAnswer2(Player player, ulong decrypted)
 {
     foreach (var v in values)
         if (v.player == player)
         {
             v.decrypted = decrypted;
             v.CheckConsistency();
             phase2Count++;
             return;
         }
     Program.Trace.TraceEvent(TraceEventType.Warning, EventIds.Event, "[AddAnswer] Protocol inconsistency. One client is buggy or tries to cheat.");
 }
Exemple #17
0
 public void PassTo(Player who, ControllableObject obj, Player player, bool requested)
 {
     // Ignore message that we sent in the first place
     if (who != Player.LocalPlayer)
     {
         obj.PassControlTo(player, who, false, requested);
     }
     if (obj is Card)
     {
         Program.GameEngine.EventProxy.OnCardControllerChanged_3_1_0_2((Card)obj, who, player);
     }
 }
Exemple #18
0
 public void ExecuteRemoteCall(Player fromPlayer, string func, string args)
 {
     // Build args
     try
     {
         //var argo = Newtonsoft.Json.JsonConvert.DeserializeObject<object[]>(args);
         ScriptEngine.ExecuteFunctionNoFormat(func, args);
     }
     catch (Exception)
     {
     }
 }
Exemple #19
0
 public void GotGameState(Player fromPlayer)
 {
     Log.DebugFormat("GotGameState {0} {1}", fromPlayer, gameStateCount);
     gameStateCount++;
     fromPlayer.Ready = true;
     if (gameStateCount == Player.Count - 1)
     {
         Log.DebugFormat("GotGameState Got all states");
         WaitForGameState = false;
         Ready();
     }
 }
Exemple #20
0
        /// <summary>Loads a player deck.</summary>
        /// <param name="id">An array containing the loaded CardIdentity ids.</param>
        /// <param name="type">An array containing the corresponding CardModel guids (encrypted).</param>
        /// <param name="group">An array indicating the group the cards must be loaded into.</param>
        public void LoadDeck(int[] id, Guid[] type, Group[] group, string[] size, string sleeve, bool limited)
        {
            if (id.Length != type.Length || id.Length != group.Length)
            {
                Program.GameMess.Warning("[LoadDeck] Protocol violation: inconsistent arrays sizes.");
                return;
            }

            if (id.Length == 0)
            {
                return;                   // Loading an empty deck --> do nothing
            }
            var who = Player.Find((byte)(id[0] >> 16));

            if (who == null)
            {
                Program.GameMess.Warning("[LoadDeck] Player not found.");
                return;
            }
            WriteReplayAction(who.Id);

            if (limited)
            {
                Program.GameMess.System("{0} loads a limited deck.", who);
            }
            else
            {
                Program.GameMess.System("{0} loads a deck.", who);
            }

            if (!IsLocalPlayer(who))
            {
                try {
                    var sleeveObj = Sleeve.FromString(sleeve);

                    who.SetSleeve(sleeveObj);
                } catch (SleeveException ex) {
                    Log.Warn(ex.Message, ex);

                    Program.GameMess.Warning($"There was an error loading {0}'s deck sleeve: " + ex.Message, who);
                } catch (Exception ex) {
                    Log.Warn(ex.Message, ex);

                    Program.GameMess.Warning($"There was an unknown error loading {0}'s deck sleeve.", who);
                }
            }

            CreateCard(id, type, group, size);
            Log.Info("LoadDeck Starting Task to Fire Event");
            Program.GameEngine.EventProxy.OnLoadDeck_3_1_0_0(who, @group.Distinct().ToArray());
            Program.GameEngine.EventProxy.OnLoadDeck_3_1_0_1(who, @group.Distinct().ToArray());
            Program.GameEngine.EventProxy.OnDeckLoaded_3_1_0_2(who, @group.Distinct().ToArray());
        }
Exemple #21
0
 public void AddAnswer2(Player lPlayer, ulong decrypted)
 {
     foreach (RandomValue v in _values.Where(v => v.Player == lPlayer))
     {
         v.Decrypted = decrypted;
         v.CheckConsistency();
         _phase2Count++;
         return;
     }
     Program.Trace.TraceEvent(TraceEventType.Warning, EventIds.Event,
                              "[AddAnswer] Protocol inconsistency. One client is buggy or tries to cheat.");
 }
Exemple #22
0
 public void Welcome(byte id, Guid gameSessionId, string gameName, bool waitForGameState)
 {
     WriteReplayAction(id);
     Program.InPreGame     = true;
     Player.LocalPlayer.Id = id;
     if (Program.Client is ClientSocket cs)
     {
         cs.StartPings();
     }
     Player.FireLocalPlayerWelcomed();
     Program.GameEngine.OnWelcomed(gameSessionId, gameName, waitForGameState);
 }
Exemple #23
0
        public void AnchorCard(Card card, Player player, bool anchor)
        {
            WriteReplayAction(player.Id);
            var astring = anchor ? "anchored" : "unanchored";

            Program.GameMess.PlayerEvent(player, "{0} {1}", astring, card);
            if (IsLocalPlayer(player))
            {
                return;
            }
            card.SetAnchored(true, anchor);
        }
Exemple #24
0
 public void GroupVis(Player player, Group group, bool defined, bool visible)
 {
     // Ignore messages sent by myself
     if (player != Player.LocalPlayer)
     {
         group.SetVisibility(defined ? (bool?)visible : null, false);
     }
     if (defined)
     {
         Program.GameMess.PlayerEvent(player, visible ? "shows {0} to everybody." : "shows {0} to nobody.", group);
     }
 }
 public void AddMarker(Player player, Card card, Guid id, string name, ushort count)
 {
     Data.MarkerModel model = Program.Game.GetMarkerModel(id);
     if (model is DefaultMarkerModel)
         ((DefaultMarkerModel)model).SetName(name);
     // Ignore markers created by oneself (already created for responsiveness issues)
     if (player != Player.LocalPlayer)
         card.AddMarker(model, count);
     if (count != 0)
         Program.Trace.TraceEvent(TraceEventType.Information, EventIds.Event | EventIds.PlayerFlag(player),
           "{0} adds {1} {2} marker(s) on {3}", player, count, model, card);
 }
Exemple #26
0
 public void Reset(Player player, bool isSoft)
 {
     WriteReplayReset(player.Id);
     Program.GameEngine.Reset(isSoft);
     if (isSoft)
     {
         Program.GameMess.System("{0} soft-resets the game.", player);
     }
     else
     {
         Program.GameMess.System("{0} resets the game.", player);
     }
 }
Exemple #27
0
        public void OnEndTurn(Player player)
        {
            var args = new object[1];
            args[0] = player;

            if(Program.GameEngine.Definition.Events.ContainsKey("OnEndTurn"))
            {
                foreach(var e in Program.GameEngine.Definition.Events["OnEndTurn"])
                {
                    engine.ExecuteFunction(e.PythonFunction,player);
                }
              	}
        }
Exemple #28
0
        public void NextTurn(Player player, bool setActive, bool force)
        {
            var lastPlayer = Program.GameEngine.ActivePlayer;
            var lastTurn   = Program.GameEngine.TurnNumber;

            Program.GameEngine.TurnNumber++;
            Program.GameEngine.ActivePlayer = (setActive) ? player : null;
            Program.GameEngine.StopTurn     = false;
            Program.GameEngine.CurrentPhase = null;
            Program.GameMess.Turn(Program.GameEngine.ActivePlayer, Program.GameEngine.TurnNumber);
            Program.GameEngine.EventProxy.OnTurn_3_1_0_0(player, Program.GameEngine.TurnNumber);
            Program.GameEngine.EventProxy.OnTurn_3_1_0_1(player, Program.GameEngine.TurnNumber);
            Program.GameEngine.EventProxy.OnTurnPassed_3_1_0_2(lastPlayer, lastTurn, force);
        }
Exemple #29
0
 public void Leave(Player player)
 {
     Program.GameMess.System("{0} has closed their game window left the game. They did not crash or lose connection, they left on purpose.", player);
     if (!Program.InPreGame)
     {
         Program.GameEngine.EventProxy.OnPlayerLeaveGame_3_1_0_1(player);
         Program.GameEngine.EventProxy.OnPlayerQuit_3_1_0_2(player);
     }
     player.Delete();
     if (Program.IsHost && Program.InPreGame)
     {
         Sounds.PlaySound(Properties.Resources.doorclose);
     }
 }
Exemple #30
0
        public void End()
        {
            Program.GameMess.OnMessage -= GameMess_OnMessage;

            SaveHistory();
            ReplayWriter?.Dispose();
            ReplayEngine?.Dispose();
            _logStream?.Dispose();

            Program.GameEngine = null;
            Player.Reset();
            Card.Reset();
            CardIdentity.Reset();
            Selection.Clear();
        }
Exemple #31
0
        public string PlayerGetGlobalVariable(int id, string name)
        {
            Player p = Player.Find((byte)id);

            if (p == null)
            {
                return("");
            }
            if (p.GlobalVariables.ContainsKey(name) == false)
            {
                Program.GameMess.Warning("Global variable '{0}' isn't defined for player '{1}'", name, p.Name);
                return("");
            }
            return(p.GlobalVariables[name]);
        }
Exemple #32
0
        public void OnChangeCounter(Player player, Counter counter, int oldValue)
        {
            var args = new object[3];
            args[0] = player;
            args[1] = counter;
            args[2] = oldValue;

            if(Program.GameEngine.Definition.Events.ContainsKey("OnChangeCounter"))
            {
                foreach(var e in Program.GameEngine.Definition.Events["OnChangeCounter"])
                {
                    engine.ExecuteFunction(e.PythonFunction,player, counter, oldValue);
                }
              	}
        }
Exemple #33
0
        public void OnEndTurn(Player player)
        {
            Log.Info("Firing event OnEndTurn");
            var args = new object[1];
            args[0] = player;

            if(Program.GameEngine.Definition.Events.ContainsKey("OnEndTurn"))
            {
                foreach(var e in Program.GameEngine.Definition.Events["OnEndTurn"])
                {
                    Log.InfoFormat("Firing event OnEndTurn -> {0}",e.Name);
                    engine.ExecuteFunction(e.PythonFunction,player);
                }
              	}
        }
Exemple #34
0
        public void GameStateReq(Player fromPlayer)
        {
            Log.DebugFormat("GameStateReq From {0}", fromPlayer);
            try
            {
                var ps = new GameSaveState().Create(Program.GameEngine, fromPlayer);

                var str = JsonConvert.SerializeObject(ps, Formatting.None);

                Program.Client.Rpc.GameState(fromPlayer, str);
            }
            catch (Exception e)
            {
                Log.Error("GameStateReq Error", e);
            }
        }
Exemple #35
0
        public void RemoveMarker(Player player, Card card, string id, string name, ushort count, ushort oldCount, bool isScriptChange)
        {
            WriteReplayAction(player.Id);
            var marker = card.FindMarker(id, name);

            if (!IsLocalPlayer(player))
            {
                if (marker == null)
                {
                    Program.GameMess.Warning("Inconsistent state. Marker not found on card.");
                    return;
                }
                if (marker.Count != oldCount)
                {
                    Program.GameMess.Warning("Inconsistent state. Missing markers to remove");
                }
            }
            if (count != 0)
            {
                var newCount = oldCount - count;
                if (!IsLocalPlayer(player))
                {
                    card.RemoveMarker(marker, count);
                }
                Program.GameMess.PlayerEvent(player, "removes {0} {1} marker(s) from {2}", count, name, card);
                if (IsLocalPlayer(player) && marker == null)
                {
                    var markerString = new StringBuilder();
                    markerString.AppendFormat("('{0}','{1}')", name, id);
                    if (isScriptChange == false)
                    {
                        Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_0(card, markerString.ToString(), oldCount, newCount, isScriptChange);
                        Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_1(card, markerString.ToString(), oldCount, newCount, isScriptChange);
                    }
                    Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_2(card, name, id.ToString(), oldCount, isScriptChange);
                }
                else
                {
                    if (isScriptChange == false)
                    {
                        Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_0(card, marker.Model.ModelString(), oldCount, newCount, isScriptChange);
                        Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_1(card, marker.Model.ModelString(), oldCount, newCount, isScriptChange);
                    }
                    Program.GameEngine.EventProxy.OnMarkerChanged_3_1_0_2(card, name, id.ToString(), oldCount, isScriptChange);
                }
            }
        }
Exemple #36
0
        internal static Tuple <string, object[]> Parse(Player player, string text)
        {
            string finalText = text;
            int    i         = 0;
            var    args      = new List <object>(2);
            Match  match     = Regex.Match(text, "{([^}]*)}");

            while (match.Success)
            {
                string token = match.Groups[1].Value;
                finalText = finalText.Replace(match.Groups[0].Value, "##$$%%^^LEFTBRACKET^^%%$$##" + i + "##$$%%^^RIGHTBRACKET^^%%$$##");
                i++;
                object tokenValue = token;
                switch (token)
                {
                case "me":
                    tokenValue = player;
                    break;

                default:
                    if (token.StartsWith("#"))
                    {
                        int id;
                        if (!int.TryParse(token.Substring(1), out id))
                        {
                            break;
                        }
                        ControllableObject obj = ControllableObject.Find(id);
                        if (obj == null)
                        {
                            break;
                        }
                        tokenValue = obj;
                        break;
                    }
                    break;
                }
                args.Add(tokenValue);
                match = match.NextMatch();
            }
            args.Add(player);
            finalText = finalText.Replace("{", "").Replace("}", "");
            finalText = finalText.Replace("##$$%%^^LEFTBRACKET^^%%$$##", "{").Replace(
                "##$$%%^^RIGHTBRACKET^^%%$$##", "}");
            return(new Tuple <string, object[]>(finalText, args.ToArray()));
        }
Exemple #37
0
 public void PlayerSetGlobalVariable(Player p, string name, string oldValue, string value)
 {
     if (p.GlobalVariables.ContainsKey(name))
     {
         p.GlobalVariables[name] = value;
     }
     else
     {
         p.GlobalVariables.Add(name, value);
     }
     if (p != Player.LocalPlayer)
     {
         Program.GameEngine.EventProxy.OnPlayerGlobalVariableChanged_3_1_0_0(p, name, oldValue, value);
         Program.GameEngine.EventProxy.OnPlayerGlobalVariableChanged_3_1_0_1(p, name, oldValue, value);
     }
     Program.GameEngine.EventProxy.OnPlayerGlobalVariableChanged_3_1_0_2(p, name, oldValue, value);
 }
Exemple #38
0
        public void CardSwitchTo(Player player, Card card, string alternate)
        {
            MemoryStream stream = new MemoryStream(512);
            stream.Seek(4, SeekOrigin.Begin);
            BinaryWriter writer = new BinaryWriter(stream);

              if (Program.Client.Muted != 0)
              writer.Write(Program.Client.Muted);
              else
              writer.Write(0);
            writer.Write((byte)87);
            writer.Write(player.Id);
            writer.Write(card.Id);
            writer.Write(alternate);
            writer.Flush(); writer.Seek(0, SeekOrigin.Begin);
            writer.Write((int)stream.Length);
            writer.Close();
            Send(stream.ToArray());
        }
Exemple #39
0
        public void GroupRemoveViewer(int id, int pid)
        {
            Group  group  = Group.Find(id);
            Player player = Player.Find((byte)pid);

            if (group.Controller != Player.LocalPlayer)
            {
                Program.GameMess.Warning("{0} can't set visibility on {0} because they don't control it.", Player.LocalPlayer.Name, group.Name);
                return;
            }
            if (!group.Viewers.Contains(player))
            {
                return;
            }
            else
            {
                QueueAction(() => group.RemoveViewer(player, true));
            }
        }
Exemple #40
0
		public void Boot(Player player, string reason)
		{
						//Log.Info("[ProtOut] Boot");
					    if(Program.Client == null)return;
			MemoryStream stream = new MemoryStream(512);
			stream.Seek(4, SeekOrigin.Begin);
			BinaryWriter writer = new BinaryWriter(stream);

      if (Program.Client.Muted != 0)
          writer.Write(Program.Client.Muted);
      else
          writer.Write(0);
			writer.Write((byte)2);
			writer.Write(player.Id);
			writer.Write(reason);
			writer.Flush(); writer.Seek(0, SeekOrigin.Begin);
			writer.Write((int)stream.Length);
			writer.Close();
			Send(stream.ToArray());
		}
Exemple #41
0
        /// <summary>Creates new Cards as well as the corresponding CardIdentities. The cards may be in different groups.</summary>
        /// <param name="id">An array with the new CardIdentity ids.</param>
        /// <param name="type">An array containing the corresponding CardModel guids (encrypted)</param>
        /// <param name="groups">An array indicating the group the cards must be loaded into.</param>
        /// <seealso cref="CreateCard(int[], ulong[], Group)"> for a more efficient way to insert cards inside one group.</seealso>
        private static void CreateCard(IList <int> id, IList <Guid> type, IList <Group> groups, IList <string> sizes, string sleeveUrl = "")
        {
            // Ignore cards created by oneself
            if (Player.Find((byte)(id[0] >> 16)) == Player.LocalPlayer)
            {
                return;
            }
            for (var i = 0; i < id.Count; i++)
            {
                var group = groups[i];
                var owner = group.Owner;
                if (owner == null)
                {
                    Program.GameMess.Warning("[CreateCard] Player not found.");
                    continue;
                }

                var c = new Card(owner, id[i], Program.GameEngine.Definition.GetCardById(type[i]), false, sizes[i]); c.SetSleeve(sleeveUrl); group.AddAt(c, group.Count);
            }
        }
Exemple #42
0
 public void AddPacks(Player player, Guid[] packs, bool selfOnly)
 {
     var wnd = (Play.Dialogs.PickCardsDialog)WindowManager.PlayWindow.backstage.Child;
     string packNames = wnd.PackNames(packs);
     if (packNames == "") return;
     if (selfOnly && player != Player.LocalPlayer)
     {
         Program.TracePlayerEvent(player, "{0} added {1} to their pool.", player, packNames);
     }
     else if (selfOnly && player == Player.LocalPlayer)
     {
         Program.TracePlayerEvent(player, "{0} added {1} to their pool.", player, packNames);
         wnd.OpenPacks(packs);
     }
     else
     {
         Program.TracePlayerEvent(player, "{0} added {1} to the limited game for all players.", player, packNames);
         wnd.OpenPacks(packs);
     }
 }
Exemple #43
0
        public void AnchorCard(Card id, Player player, bool anchor)
        {
            //Log.Info("[ProtOut] AnchorCard");
                        if(Program.Client == null)return;
            MemoryStream stream = new MemoryStream(512);
            stream.Seek(4, SeekOrigin.Begin);
            BinaryWriter writer = new BinaryWriter(stream);

              if (Program.Client.Muted != 0)
              writer.Write(Program.Client.Muted);
              else
              writer.Write(0);
            writer.Write((byte)97);
            writer.Write(id.Id);
            writer.Write(player.Id);
            writer.Write(anchor);
            writer.Flush(); writer.Seek(0, SeekOrigin.Begin);
            writer.Write((int)stream.Length);
            writer.Close();
            Send(stream.ToArray());
        }
Exemple #44
0
        public void NewPlayer(byte id, string nick, string userId, ulong pkey, bool invertedTable, bool spectator)
        {
            WriteReplayAction(id);
            var p = Player.FindIncludingSpectators(id);

            if (p == null)
            {
                var player = new Player(Program.GameEngine.Definition, nick, userId, id, pkey, spectator, false, Program.GameEngine.IsReplay);
                Program.GameMess.System("{0} has joined the game", player);
                player.UpdateSettings(invertedTable, spectator, false);
                if (Program.InPreGame == false)
                {
                    GameStateReq(player);
                    if (player.Spectator == false)
                    {
                        Program.GameEngine.EventProxy.OnPlayerConnect_3_1_0_1(player);
                        Program.GameEngine.EventProxy.OnPlayerConnected_3_1_0_2(player);
                    }
                }
                else
                {
                    if (Octgn.Core.Prefs.SoundOption == Core.Prefs.SoundType.DingDong)
                    {
                        Sounds.PlaySound(Properties.Resources.userjoinsroom, false);
                    }
                    else if (Octgn.Core.Prefs.SoundOption == Core.Prefs.SoundType.KnockKnock)
                    {
                        Sounds.PlaySound(Properties.Resources.knockknock, false);
                    }
                }
            }
            else
            {
                if (p.Spectator == false && Program.InPreGame == false)
                {
                    Program.GameEngine.EventProxy.OnPlayerConnect_3_1_0_1(p);
                    Program.GameEngine.EventProxy.OnPlayerConnected_3_1_0_2(p);
                }
            }
        }
Exemple #45
0
        public void GroupSetController(int id, int player)
        {
            var g = Group.Find(id);
            var p = Player.Find((byte)player);

            if (p == Player.LocalPlayer)
            {
                if (g.Controller == Player.LocalPlayer)
                {
                    return;
                }
                QueueAction(() => g.TakeControl());
            }
            else
            {
                if (g.Controller != Player.LocalPlayer)
                {
                    return;
                }
                QueueAction(() => g.PassControlTo(p));
            }
        }
Exemple #46
0
        /// <summary>Creates new Cards as well as the corresponding CardIdentities. All cards are created in the same group.</summary>
        /// <param name="id">An array with the new CardIdentity ids.</param>
        /// <param name="type">An array containing the corresponding CardModel guids (encrypted)</param>
        /// <param name="group">The group, in which the cards are added.</param>
        /// <seealso cref="CreateCard(int[], ulong[], Group[])"> to add cards to several groups</seealso>
        public void CreateCard(int[] id, Guid[] type, string[] size, Group group)
        {
            if (Player.Find((byte)(id[0] >> 16)) == Player.LocalPlayer)
            {
                return;
            }
            for (var i = 0; i < id.Length; i++)
            {
                var owner = group.Owner;
                if (owner == null)
                {
                    Program.GameMess.Warning("[CreateCard] Player not found.");
                    return;
                }
                var c = Card.Find(id[0]);

                Program.GameMess.PlayerEvent(owner, "{0} creates {1} {2} in {3}'s {4}", owner.Name, id.Length, c == null ? "card" : (object)c, group.Owner.Name, group.Name);
                // Ignore cards created by oneself

                var card = new Card(owner, id[i], Program.GameEngine.Definition.GetCardById(type[i]), false, size[i]); group.AddAt(card, group.Count);
            }
        }
Exemple #47
0
 internal static void TracePlayerEvent(Player player, string message, params object[] args)
 {
     var args1 = new List<object>(args) {player};
     Trace.TraceEvent(TraceEventType.Information, EventIds.Event | EventIds.PlayerFlag(player), message,
                      args1.ToArray());
 }
Exemple #48
0
 public void StartLimited(Player player, Guid[] packs)
 {
     Program.TracePlayerEvent(player, "{0} starts a limited game.", player);
     var wnd = new Play.Dialogs.PickCardsDialog();
     WindowManager.PlayWindow.ShowBackstage(wnd);
     wnd.OpenPacks(packs);
 }
Exemple #49
0
 public void StopTurn(Player player)
 {
     if (player == Player.LocalPlayer)
         Program.GameEngine.StopTurn = false;
     Program.Trace.TraceEvent(TraceEventType.Information, EventIds.Event | EventIds.PlayerFlag(player), "{0} wants to play before end of turn.", player);
 }
Exemple #50
0
 public void TakeFrom(ControllableObject obj, Player to)
 {
     obj.TakingControl(to);
 }
Exemple #51
0
 public void TargetArrow(Player player, Card card, Card otherCard)
 {
     // Ignore the card we targeted ourselves
     if (player == Player.LocalPlayer) return;
     new Target(player, card, otherCard, true).Do();
 }
Exemple #52
0
        /// <summary>Reveal a card's identity to one player only.</summary>
        /// <param name="players"> </param>
        /// <param name="card">The card, whose identity is revealed.</param>
        /// <param name="encrypted">Either a ulong[2] containing an encrypted aliased CardIdentity id. Or a ulong[5] containing an encrypted CardModel guid.</param>
        public void RevealTo(Player[] players, Card card, ulong[] encrypted)
        {
            var oldType = card.Type;
            ulong alias = 0;
            Guid id = Guid.Empty;
            players = players.Where(x => x != null).ToArray();
            switch (encrypted.Length)
            {
                case 2:
                    alias = Crypto.Decrypt(encrypted);
                    break;
                case 5:
                    id = Crypto.DecryptGuid(encrypted);
                    break;
                default:
                    Program.TraceWarning("[RevealTo] Invalid data received.");
                    return;
            }

            if (!players.All(p => (card.Group.Visibility == DataNew.Entities.GroupVisibility.Custom && card.Group.Viewers.Contains(p)) ||
                                  card.PlayersLooking.Contains(p) || card.PeekingPlayers.Contains(p)))
                Program.TraceWarning("[RevealTo] Revealing a card to a player, who isn't allowed to see it. This indicates a bug or cheating.");

            // If it's an alias, we must revealed it to the final recipient
            bool sendToMyself = true;
            if (alias != 0)
            {
                sendToMyself = false;
                CardIdentity ci = CardIdentity.Find((int)alias);
                if (ci == null)
                { Program.TraceWarning("[RevealTo] Identity not found."); return; }

                // If the revealed type is an alias, pass it to the one who owns it to continue the RevealTo chain.
                if (ci.Alias)
                {
                    Player p = Player.Find((byte)(ci.Key >> 16));
                    Program.Client.Rpc.RevealToReq(p, players, card, Crypto.Encrypt(ci.Key, p.PublicKey));
                }
                // Else revealed the card model to the ones, who must see it
                else
                {
                    Player[] pArray = new Player[1];
                    foreach (Player p in players)
                        if (p != Player.LocalPlayer)
                        {
                            pArray[0] = p;
                            Program.Client.Rpc.RevealToReq(p, pArray, card, Crypto.Encrypt(ci.Model.Id, p.PublicKey));
                        }
                        else
                        {
                            sendToMyself = true;
                            id = ci.Model.Id;
                        }
                }
            }
            // Else it's a type and we are the final recipients
            if (!sendToMyself) return;
            if (card.Type.Model == null)
                card.SetModel(Program.GameEngine.Definition.GetCardById(id));
            // Raise a notification
            oldType.OnRevealed(card.Type);
        }
Exemple #53
0
        public void TransferMarker(Player player, Card from, Card to, Guid id, string name, ushort count)
        {
            // Ignore markers moved by oneself (already moved for responsiveness issues)
            if (player != Player.LocalPlayer)
            {
                Marker marker = from.FindMarker(id, name);
                if (marker == null)
                {
                    Program.Trace.TraceEvent(TraceEventType.Warning, EventIds.NonGame, "Inconsistent state. Marker not found on card.");
                    return;
                }
                if (marker.Count < count)
                    Program.Trace.TraceEvent(TraceEventType.Warning, EventIds.NonGame, "Inconsistent state. Missing markers to remove");

                from.RemoveMarker(marker, count);
                to.AddMarker(marker.Model, count);
            }
            Program.Trace.TraceEvent(TraceEventType.Information, EventIds.Event | EventIds.PlayerFlag(player), "{0} moves {1} {2} marker(s) from {3} to {4}", player, count, name, from, to);
        }
Exemple #54
0
 public void Chat(Player player, string text)
 {
     Program.Trace.TraceEvent(TraceEventType.Information, EventIds.Chat | EventIds.PlayerFlag(player), "<{0}> {1}", player, text);
 }
Exemple #55
0
 public void Counter(Player player, Counter counter, int value)
 {
     counter.SetValue(value, player, false);
 }
Exemple #56
0
 public void Turn(Player player, Card card, bool up)
 {
     // Ignore the card we turned ourselves
     if (player == Player.LocalPlayer)
     {
         card.MayBeConsideredFaceUp = false;     // see comment on mayBeConsideredFaceUp
         return;
     }
     new Turn(player, card, up).Do();
 }
Exemple #57
0
 internal static void Print(Player player, string text)
 {
     string finalText = text;
     int i = 0;
     var args = new List<object>(2);
     Match match = Regex.Match(text, "{([^}]*)}");
     while (match.Success)
     {
         string token = match.Groups[1].Value;
         finalText = finalText.Replace(match.Groups[0].Value, "##$$%%^^LEFTBRACKET^^%%$$##" + i + "##$$%%^^RIGHTBRACKET^^%%$$##");
         i++;
         object tokenValue = token;
         switch (token)
         {
             case "me":
                 tokenValue = player;
                 break;
             default:
                 if (token.StartsWith("#"))
                 {
                     int id;
                     if (!int.TryParse(token.Substring(1), out id)) break;
                     ControllableObject obj = ControllableObject.Find(id);
                     if (obj == null) break;
                     tokenValue = obj;
                     break;
                 }
                 break;
         }
         args.Add(tokenValue);
         match = match.NextMatch();
     }
     args.Add(player);
     finalText = finalText.Replace("{", "").Replace("}", "");
     finalText = finalText.Replace("##$$%%^^LEFTBRACKET^^%%$$##", "{").Replace(
         "##$$%%^^RIGHTBRACKET^^%%$$##", "}");
     Trace.TraceEvent(TraceEventType.Information,
                      EventIds.Event | EventIds.PlayerFlag(player) | EventIds.Explicit, finalText, args.ToArray());
 }
Exemple #58
0
 public void Untarget(Player player, Card card)
 {
     // Ignore the card we targeted ourselves
     if (player == Player.LocalPlayer) return;
     new Target(player, card, null, false).Do();
 }
Exemple #59
0
 public void Rotate(Player player, Card card, CardOrientation rot)
 {
     // Ignore the moves we made ourselves
     if (player == Player.LocalPlayer)
         return;
     new Rotate(player, card, rot).Do();
 }
Exemple #60
0
 public void SetMarker(Player player, Card card, Guid id, string name, ushort count)
 {
     // Always perform this call (even if player == LocalPlayer) for consistency as markers aren't an exclusive resource
     card.SetMarker(player, id, name, count);
 }