コード例 #1
0
ファイル: GameAnalyser.cs プロジェクト: zjw-swun/YGOCore
        private void OnMove(CoreMessage msg)
        {
            byte[] raw = msg.Reader.ReadBytes(16);
            int    pc  = raw[4];
            int    pl  = raw[5];
            int    cc  = raw[8];
            int    cl  = raw[9];
            int    cs  = raw[10];
            int    cp  = raw[11];

            SendToPlayer(msg, cc);
            GameServerPacket packet = new GameServerPacket(msg.Message);

            packet.Write(raw);
            if (!Convert.ToBoolean((cl & ((int)CardLocation.Grave + (int)CardLocation.Overlay))) && Convert.ToBoolean((cl & ((int)CardLocation.Deck + (int)CardLocation.Hand))) ||
                Convert.ToBoolean((cp & (int)CardPosition.FaceDown)))
            {
                packet.SetPosition(2);
                packet.Write(0);
            }
            Game.SendToAllBut(packet, cc);

            if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc))
            {
                Game.RefreshSingle(cc, cl, cs);
            }
        }
コード例 #2
0
ファイル: GameAnalyser.cs プロジェクト: 247321453/YgoServer
		private void OnMove(CoreMessage msg)
		{
			byte[] raw = msg.Reader.ReadBytes(16);
			int pc = raw[4];
			int pl = raw[5];
			int cc = raw[8];
			int cl = raw[9];
			int cs = raw[10];
			int cp = raw[11];

			SendToPlayer(msg, cc);
			using(GameServerPacket packet = new GameServerPacket(msg.Message)){
				packet.Write(raw);
				if (!Convert.ToBoolean((cl & ((int)CardLocation.Grave + (int)CardLocation.Overlay))) && Convert.ToBoolean((cl & ((int)CardLocation.Deck + (int)CardLocation.Hand)))
				    || Convert.ToBoolean((cp & (int)CardPosition.FaceDown)))
				{
					packet.SetPosition(2);
					packet.Write((int)0);
				}
				Game.SendToAllBut(packet, cc);
			}
			if (cl != 0 && (cl & 0x80) == 0 && (cl != pl || pc != cc))
				Game.RefreshSingle(cc, cl, cs);
		}
コード例 #3
0
ファイル: GameRoom.cs プロジェクト: 247321453/YgoServer
        public void TpResult(GameSession player, bool result)
        {
            if (State != GameState.Starting)
                return;
            if (player.Type != m_startplayer)
                return;

            m_swapped = false;
            if (result && player.Type == (IsTag ? 2 : 1) || !result && player.Type == 0)
            {
                m_swapped = true;
                if (IsTag)
                {
                    GameSession temp = Players[0];
                    Players[0] = Players[2];
                    Players[2] = temp;

                    temp = Players[1];
                    Players[1] = Players[3];
                    Players[3] = temp;

                    Players[0].Type = 0;
                    Players[1].Type = 1;
                    Players[2].Type = 2;
                    Players[3].Type = 3;
                }
                else
                {
                    GameSession temp = Players[0];
                    Players[0] = Players[1];
                    Players[1] = temp;
                    Players[0].Type = 0;
                    Players[1].Type = 1;
                }
            }
            CurPlayers[0] = Players[0];
            CurPlayers[1] = Players[IsTag ? 3 : 1];

            State = GameState.Duel;
            int seed = Environment.TickCount;
            m_duel = Duel.Create((uint)seed);
            Random rand = new Random(seed);

            m_duel.SetAnalyzer(m_analyser.Analyse);
            m_duel.SetErrorHandler(HandleError);

            m_duel.InitPlayers(Config.StartLp, Config.StartHand, Config.DrawCount);

            int opt = 0;
            if (Config.EnablePriority)
                opt += 0x08;
            if (Config.NoShuffleDeck)
                opt += 0x10;
            if (IsTag)
                opt += 0x20;
            Replay = new Replay(GetYrpFileName(this), Program.Config.ClientVersion,
                                Config.Mode, (uint)seed, IsTag);
            Replay.Writer.WriteUnicode(Players[0].Name, 20);
            Replay.Writer.WriteUnicode(Players[1].Name, 20);
            if (IsTag)
            {
                Replay.Writer.WriteUnicode(Players[2].Name, 20);
                Replay.Writer.WriteUnicode(Players[3].Name, 20);
            }
            Replay.Writer.Write(Config.StartLp);
            Replay.Writer.Write(Config.StartHand);
            Replay.Writer.Write(Config.DrawCount);
            Replay.Writer.Write(opt);

            for (int i = 0; i < Players.Length; i++)
            {
                GameSession dplayer = Players[i == 2 ? 3 : (i == 3 ? 2 : i)];
                int pid = i;
                if (IsTag)
                    pid = i >= 2 ? 1 : 0;
                if (!Config.NoShuffleDeck)
                {
                    IList<int> cards = ShuffleCards(rand, dplayer.Deck.Main);
                    Replay.Writer.Write(cards.Count);
                    foreach (int id in cards)
                    {
                        if (IsTag && (i == 1 || i == 3))
                            m_duel.AddTagCard(id, pid, CardLocation.Deck);
                        else
                            m_duel.AddCard(id, pid, CardLocation.Deck);
                        Replay.Writer.Write(id);
                    }
                }
                else
                {
                    Replay.Writer.Write(dplayer.Deck.Main.Count);
                    for (int j = dplayer.Deck.Main.Count - 1; j >= 0; j--)
                    {
                        int id = dplayer.Deck.Main[j];
                        if (IsTag && (i == 1 || i == 3))
                            m_duel.AddTagCard(id, pid, CardLocation.Deck);
                        else
                            m_duel.AddCard(id, pid, CardLocation.Deck);
                        Replay.Writer.Write(id);
                    }
                }
                Replay.Writer.Write(dplayer.Deck.Extra.Count);
                foreach (int id in dplayer.Deck.Extra)
                {
                    if (IsTag && (i == 1 || i == 3))
                        m_duel.AddTagCard(id, pid, CardLocation.Extra);
                    else
                        m_duel.AddCard(id, pid, CardLocation.Extra);
                    Replay.Writer.Write(id);
                }
            }

            using (GameServerPacket packet = new GameServerPacket(GameMessage.Start))
            {
                packet.Write((byte)0);
                packet.Write(Config.StartLp);
                packet.Write(Config.StartLp);
                packet.Write((short)m_duel.QueryFieldCount(0, CardLocation.Deck));
                packet.Write((short)m_duel.QueryFieldCount(0, CardLocation.Extra));
                packet.Write((short)m_duel.QueryFieldCount(1, CardLocation.Deck));
                packet.Write((short)m_duel.QueryFieldCount(1, CardLocation.Extra));
                SendToTeam(packet, 0);

                //			GameServerPacket packet2 = new GameServerPacket(GameMessage.Start);
                //			packet2.Write((byte)1);
                //			packet2.Write(Config.StartLp);
                //			packet2.Write(Config.StartLp);
                //			packet2.Write((short)m_duel.QueryFieldCount(0, CardLocation.Deck));
                //			packet2.Write((short)m_duel.QueryFieldCount(0, CardLocation.Extra));
                //			packet2.Write((short)m_duel.QueryFieldCount(1, CardLocation.Deck));
                //			packet2.Write((short)m_duel.QueryFieldCount(1, CardLocation.Extra));
                //			SendToTeam(packet2, 1);
                packet.SetPosition(2);
                packet.Write((byte)1);
                SendToTeam(packet, 1);

                //			GameServerPacket packet3 = new GameServerPacket(GameMessage.Start);
                //			if (m_swapped)
                //				packet3.Write((byte)0x11);
                //			else
                //				packet3.Write((byte)0x10);
                //			packet3.Write(Config.StartLp);
                //			packet3.Write(Config.StartLp);
                //			packet3.Write((short)m_duel.QueryFieldCount(0, CardLocation.Deck));
                //			packet3.Write((short)m_duel.QueryFieldCount(0, CardLocation.Extra));
                //			packet3.Write((short)m_duel.QueryFieldCount(1, CardLocation.Deck));
                //			packet3.Write((short)m_duel.QueryFieldCount(1, CardLocation.Extra));
                //			SendToObservers(packet3);
                packet.SetPosition(2);
                packet.Write((byte)(m_swapped ? 0x11 : 0x10));
                SendToObservers(packet);
            }

            RefreshExtra(0);
            RefreshExtra(1);

            m_duel.Start(opt);

            TurnCount = 0;
            LifePoints[0] = Config.StartLp;
            LifePoints[1] = Config.StartLp;
            Process();
        }