Exemplo n.º 1
0
		protected new void HandleSayText(object sender, SayTextEventArgs e)
		{
			base.HandleSayText(sender, e);

			// game pause
			if (e.Text == STOP_ROUND)
			{
				IsMatchStarted = false;
				IsGamePaused = true;
				BackupToLastRound();
				return;
			}

			// live after pause
			if (e.Text == MATCH_UNPAUSED || e.Text == ROUND_RESTORED)
			{
				IsMatchStarted = true;
				IsGamePaused = false;
				return;
			}

			// Beginning of the match
			Match faceItLive = _faceItLiveRegex.Match(e.Text);
			if (e.Text == EBOT_LIVE || faceItLive.Success)
			{
				Demo.ResetStats(false);
				InitMatch();
				CreateNewRound(true);
				IsMatchStarted = true;
			}

			Match scoreUpdateEbot = _scoreRegex.Match(e.Text);
			// Score update
			if (!scoreUpdateEbot.Success)
			{
				_isFaceit = true;
				return;
			}

			// End of the match (OT or not)
			Match matchEnd = _endMatchRegex.Match(e.Text);
			if (matchEnd.Success)
			{
				IsMatchStarted = false;
				_isMatchEnded = true;
				return;
			}

			if (IsOvertime)
			{
				// if eBot is waiting for !ready, the match isn't started
				if (e.Text == PLEASE_WRITE_READY) IsMatchStarted = false;

				// announce the beginning of an overtime
				if (e.Text == BEGIN_FIRST_SIDE_OVERTIME || e.Text == BEGIN_SECOND_SIDE_OVERTIME)
				{
					IsMatchStarted = true;
				}
			}
		}
Exemplo n.º 2
0
        private void Raise(DemoParser parser)
        {
            SayTextEventArgs e = new SayTextEventArgs
            {
                EntityIndex = EntityIndex,
                Text        = Text,
                IsChat      = Chat,
                IsChatAll   = TextAllChat
            };

            parser.RaiseSayText(e);
        }
Exemplo n.º 3
0
        private void HandleSayText(object sender, SayTextEventArgs e)
        {
            SayTextEvent newEvent = new SayTextEvent()
            {
                EntityIndex = e.EntityIndex,
                Text        = e.Text,
                IsChat      = e.IsChat,
                IsChatAll   = e.IsChatAll,
            };

            CurrentTick.Events.Add(newEvent);
        }
        public bool TryApplyMessage(ProtoBuf.IExtensible message, DemoParser parser)
        {
            CSVCMsg_UserMessage userMessage = message as CSVCMsg_UserMessage;

            if (userMessage == null || !Enum.IsDefined(typeof(ECstrike15UserMessages), userMessage.msg_type))
            {
                return(false);
            }

            ECstrike15UserMessages msg = (ECstrike15UserMessages)userMessage.msg_type;
            Type toParse = Assembly.GetExecutingAssembly().GetType("DemoInfo.Messages.CCSUsrMsg_" + msg.ToString().Substring(6));

            using (var memstream = new MemoryStream(userMessage.msg_data))
            {
                ProtoBuf.IExtensible data = memstream.ReadProtobufMessage(toParse);
                if (data != null)
                {
                    switch (data.GetType().Name)
                    {
                    case "CCSUsrMsg_SayText":
                    {
                        SayTextEventArgs  e      = new SayTextEventArgs();
                        CCSUsrMsg_SayText sayMsg = (CCSUsrMsg_SayText)data;
                        e.Text        = sayMsg.text;
                        e.TextAllChat = sayMsg.textallchat;
                        e.Chat        = sayMsg.chat;
                        parser.RaiseSayText(e);
                        break;
                    }

                    case "CCSUsrMsg_SayText2":
                    {
                        SayText2EventArgs  e      = new SayText2EventArgs();
                        CCSUsrMsg_SayText2 sayMsg = (CCSUsrMsg_SayText2)data;
                        e.TextAllChat = sayMsg.textallchat;
                        e.Chat        = sayMsg.chat;

                        // get the player who wrote the message
                        foreach (KeyValuePair <int, Player> keyValuePair in parser.Players)
                        {
                            if (keyValuePair.Value.Name == sayMsg.@params[0])
                            {
                                e.Sender = parser.Players[keyValuePair.Key];
                                break;
                            }
                        }

                        // @params is a 4 length array but only 2 are used [0] = nickname [1] = message text
                        e.Text = sayMsg.@params[0] + " : " + sayMsg.@params[1];
                        parser.RaiseSayText2(e);
                        break;
                    }

                    case "CCSUsrMsg_ServerRankUpdate":
                    {
                        ServerRankUpdateEventArgs e = new ServerRankUpdateEventArgs
                        {
                            RankStructList = new List <ServerRankUpdateEventArgs.RankStruct>()
                        };

                        CCSUsrMsg_ServerRankUpdate rankMsg = (CCSUsrMsg_ServerRankUpdate)data;

                        foreach (CCSUsrMsg_ServerRankUpdate.RankUpdate rankUpdate in (rankMsg.rank_update))
                        {
                            ServerRankUpdateEventArgs.RankStruct rankStruct = new ServerRankUpdateEventArgs.RankStruct
                            {
                                New        = rankUpdate.rank_new,
                                Old        = rankUpdate.rank_old,
                                NumWins    = rankUpdate.num_wins,
                                RankChange = rankUpdate.rank_change,
                                SteamId    = rankUpdate.account_id + VALVE_MAGIC_NUMBER
                            };
                            e.RankStructList.Add(rankStruct);
                        }

                        parser.RaiseServerRankUpdate(e);

                        break;
                    }

                    default:
                        // TODO: maybe, like, implement something here one day?
                        //Problem: There is no real useful info here if I see it correcly. Sorry.
                        //var messageType = (Messages.ECstrike15UserMessages)userMessage.msg_type;
                        return(true);
                    }
                }
                return(false);
            }
        }
Exemplo n.º 5
0
        protected void HandleSayText(object sender, SayTextEventArgs e)
        {
            // cleanup text
            e.Text = Regex.Replace(e.Text, @"[\u0001\u0002\u0003\u0004\u0005\u0006\u0007]", string.Empty);

            // Beginning of the match
            Match faceItLive = _faceItLiveRegex.Match(e.Text);

            if (e.Text == EBOT_LIVE || faceItLive.Success)
            {
                Demo.ResetStats(false);
                AddTeams();
                RoundCount = 0;
                CreateNewRound();
                IsMatchStarted = true;
            }

            Match scoreUpdateEbot   = _scoreRegex.Match(e.Text);
            Match scoreUpdateFaceit = _faceitScoreRegex.Match(e.Text);

            // Score update
            if (scoreUpdateEbot.Success || scoreUpdateFaceit.Success)
            {
                // sometimes the parser doesn't have the right team's name when they have been swapped
                // use the first score update to know the right name of the teams
                if (!_isTeamsNameDetected)
                {
                    _isTeamsNameDetected = true;
                    if (Parser.CTClanName != Demo.TeamCT.Name)
                    {
                        foreach (PlayerExtended player in Demo.Players)
                        {
                            player.TeamName = player.TeamName == Demo.TeamCT.Name ? Demo.TeamT.Name : Demo.TeamCT.Name;
                        }
                        Demo.TeamCT.Name = Parser.CTClanName;
                        Demo.TeamT.Name  = Parser.TClanName;
                        Demo.TeamCT.Name = Parser.CTClanName;
                        Demo.TeamT.Name  = Parser.TClanName;
                    }
                }

                int score1;
                int score2;
                if (scoreUpdateEbot.Success)
                {
                    score1 = Convert.ToInt32(scoreUpdateEbot.Groups["score1"].Value);
                    score2 = Convert.ToInt32(scoreUpdateEbot.Groups["score2"].Value);
                }
                else
                {
                    score1    = Convert.ToInt32(scoreUpdateFaceit.Groups["score1"].Value);
                    score2    = Convert.ToInt32(scoreUpdateFaceit.Groups["score2"].Value);
                    _isFaceit = true;
                }

                int scoreTotal = score1 + score2;
                if (scoreTotal == 15)
                {
                    IsSwapTeamRequired = true;
                }
                return;
            }

            // End of the match (OT or not)
            Match matchEnd = _endMatchRegex.Match(e.Text);

            if (matchEnd.Success)
            {
                IsMatchStarted = false;
                _isMatchEnded  = true;
                return;
            }

            if (IsOvertime)
            {
                // if eBot is waiting for !ready, the match isn't started
                if (e.Text == PLEASE_WRITE_READY)
                {
                    IsMatchStarted = false;
                }

                // announce the beginning of the 1st OT side
                if (e.Text == BEGIN_FIRST_SIDE_OVERTIME)
                {
                    IsMatchStarted = true;
                    // Add the last OT played and create a new one
                    if (Demo.ScoreTeam1 + Demo.ScoreTeam2 > 30)
                    {
                        Application.Current.Dispatcher.Invoke(delegate
                        {
                            Demo.Overtimes.Add(CurrentOvertime);
                        });
                        CurrentOvertime = new Overtime
                        {
                            Number = ++OvertimeCount
                        };
                    }
                }

                // announce the beginning of the 2nd OT side
                if (e.Text == BEGIN_SECOND_SIDE_OVERTIME)
                {
                    IsMatchStarted     = true;
                    IsSwapTeamRequired = true;
                }
            }
        }
Exemplo n.º 6
0
		public bool TryApplyMessage(ProtoBuf.IExtensible message, DemoParser parser)
		{
			CSVCMsg_UserMessage userMessage = message as CSVCMsg_UserMessage;

			if (userMessage == null || !Enum.IsDefined(typeof(ECstrike15UserMessages), userMessage.msg_type))
				return false;

			ECstrike15UserMessages msg = (ECstrike15UserMessages)userMessage.msg_type;
			Type toParse = Assembly.GetExecutingAssembly().GetType("DemoInfo.Messages.CCSUsrMsg_" + msg.ToString().Substring(6));

			using (var memstream = new MemoryStream(userMessage.msg_data))
			{
				ProtoBuf.IExtensible data = memstream.ReadProtobufMessage(toParse);
				if (data != null)
				{
					switch (data.GetType().Name)
					{
						case "CCSUsrMsg_SayText":
							{
								SayTextEventArgs e = new SayTextEventArgs();
								CCSUsrMsg_SayText sayMsg = (CCSUsrMsg_SayText)data;
								e.Text = sayMsg.text;
								e.TextAllChat = sayMsg.textallchat;
								e.Chat = sayMsg.chat;
								parser.RaiseSayText(e);
								break;
							}
						case "CCSUsrMsg_SayText2":
							{
								SayText2EventArgs e = new SayText2EventArgs();
								CCSUsrMsg_SayText2 sayMsg = (CCSUsrMsg_SayText2)data;
								e.TextAllChat = sayMsg.textallchat;
								e.Chat = sayMsg.chat;

								// get the player who wrote the message
								foreach (KeyValuePair<int, Player> keyValuePair in parser.Players)
								{
									if (keyValuePair.Value.Name == sayMsg.@params[0])
									{
										e.Sender = parser.Players[keyValuePair.Key];
										break;
									}
								}

								// @params is a 4 length array but only 2 are used [0] = nickname [1] = message text
								e.Text = sayMsg.@params[0] + " : " + sayMsg.@params[1];
								parser.RaiseSayText2(e);
								break;
							}
						case "CCSUsrMsg_ServerRankUpdate":
							{
								ServerRankUpdateEventArgs e = new ServerRankUpdateEventArgs
								{
									RankStructList = new List<ServerRankUpdateEventArgs.RankStruct>()
								};

								CCSUsrMsg_ServerRankUpdate rankMsg = (CCSUsrMsg_ServerRankUpdate)data;

								foreach (CCSUsrMsg_ServerRankUpdate.RankUpdate rankUpdate in (rankMsg.rank_update))
								{
									ServerRankUpdateEventArgs.RankStruct rankStruct = new ServerRankUpdateEventArgs.RankStruct
									{
										New = rankUpdate.rank_new,
										Old = rankUpdate.rank_old,
										NumWins = rankUpdate.num_wins,
										RankChange = rankUpdate.rank_change,
										SteamId = rankUpdate.account_id + VALVE_MAGIC_NUMBER
									};
									e.RankStructList.Add(rankStruct);
								}

								parser.RaiseServerRankUpdate(e);

								break;
							}
						default:
							// TODO: maybe, like, implement something here one day?
							//Problem: There is no real useful info here if I see it correcly. Sorry.
							//var messageType = (Messages.ECstrike15UserMessages)userMessage.msg_type;
							return true;
					}
				}
				return false;
			}
		}