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; } } }
private void Raise(DemoParser parser) { SayTextEventArgs e = new SayTextEventArgs { EntityIndex = EntityIndex, Text = Text, IsChat = Chat, IsChatAll = TextAllChat }; parser.RaiseSayText(e); }
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); } }
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; } } }
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; } }