diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/tfstats/dialoguereadout.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'utils/tfstats/dialoguereadout.cpp')
| -rw-r--r-- | utils/tfstats/dialoguereadout.cpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/utils/tfstats/dialoguereadout.cpp b/utils/tfstats/dialoguereadout.cpp new file mode 100644 index 0000000..0581cce --- /dev/null +++ b/utils/tfstats/dialoguereadout.cpp @@ -0,0 +1,159 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Implementation of CDialogueReadout +// +// $Workfile: $ +// $Date: $ +// +//------------------------------------------------------------------------------------------------------ +// $Log: $ +// +// $NoKeywords: $ +//=============================================================================// +#include "DialogueReadout.h" +#include "util.h" + + +//------------------------------------------------------------------------------------------------------ +// Function: CDialogueReadout::writeHTML +// Purpose: generates and writes the report. generate() is not used in this object +// because there is no real intermediate data. Really data is just taken from the +// event list, massaged abit, and written out to the html file. There is no calculation +// of stats or figures so no intermedidate data creation is needed. +// Input: html - the html file that we want to write to. +//------------------------------------------------------------------------------------------------------ +void CDialogueReadout::writeHTML(CHTMLFile& html) +{ + html.write("<img src=\"%s/game.dialog.on.gif\">\n",g_pApp->supportHTTPPath.c_str()); + html.div("dialog"); + CEventListIterator it; + bool MM2Messages=false; + + if (g_pApp->cmdLineSwitches["displaymm2"]=="on" || + g_pApp->cmdLineSwitches["displaymm2"]=="yes" || + g_pApp->cmdLineSwitches["displaymm2"]=="true" || + g_pApp->cmdLineSwitches["displaymm2"]=="1") + MM2Messages=true; + + + for (it=g_pMatchInfo->eventList()->begin(); it != g_pMatchInfo->eventList()->end(); ++it) + { + if ((*it)->getType()==CLogEvent::SAY || (MM2Messages && ((*it)->getType()==CLogEvent::SAY_TEAM))) + { + char talked[512]={0}; + PID talkerPID=(*it)->getArgument(0)->asPlayerGetPID(); + string talkerName=(*it)->getArgument(0)->asPlayerGetName(); + + for (int i=1;(*it)->getArgument(i);i++) + { + char temp[512]; + (*it)->getArgument(i)->getStringValue(temp); + strcat(talked,"\""); + strcat(talked,temp); + strcat(talked,"\""); + } + + bool isTeamMsg= (*it)->getType()==CLogEvent::SAY_TEAM; + int teamID=g_pMatchInfo->playerList()[talkerPID].teams.atTime((*it)->getTime()); + + const char* aa; + const char* bb; + + if (teamID<4 && teamID >= 0) + { + aa="player"; + bb=Util::teamcolormap[teamID]; + } + else + { + aa="whitetext"; + bb=""; + } + + html.write("<tr><td><font class=%s%s>%s%s:</font><font color=white> %s</font></tr></td>\n",aa,bb,talkerName.c_str(),isTeamMsg?" (Team)":"",talked); + html.br(); + } + else if ( (*it)->getType()==CLogEvent::KILLED_BY_WORLD) + { + PID plr=(*it)->getArgument(0)->asPlayerGetPID(); + string plrName=(*it)->getArgument(0)->asPlayerGetName(); + int teamID=g_pMatchInfo->playerList()[plr].teams.atTime((*it)->getTime()); + html.write("<tr><td><font class=player%s>%s</font><font color=white> died.</font></tr></td>\n",Util::teamcolormap[teamID],plrName.c_str()); + html.br(); + } + else if ((*it)->getType()==CLogEvent::SUICIDE) + { + PID plr=(*it)->getArgument(0)->asPlayerGetPID(); + string plrName=(*it)->getArgument(0)->asPlayerGetName(); + int teamID=g_pMatchInfo->playerList()[plr].teams.atTime((*it)->getTime()); + html.write("<tr><td><font class=player%s>%s</font><font color=white> committed suicide.</font></tr></td>\n",Util::teamcolormap[teamID],plrName.c_str()); + html.br(); + } + else if ((*it)->getType()==CLogEvent::TEAM_JOIN) + { + PID plr=(*it)->getArgument(0)->asPlayerGetPID(); + string plrName=(*it)->getArgument(0)->asPlayerGetName(); + time_t eventtime=(*it)->getTime(); + bool firstJoin=!g_pMatchInfo->playerList()[plr].teams.anythingAtTime(eventtime-1); + int oldTeamID=g_pMatchInfo->playerList()[plr].teams.atTime(eventtime-1); + int teamID=g_pMatchInfo->playerList()[plr].teams.atTime(eventtime); + string teamName=g_pMatchInfo->teamName(teamID); + if (firstJoin) + html.write("<tr><td><font class=player%s>%s</font><font color=white> joined team <font class=player%s>%s</font>.</font></tr></td>\n",Util::teamcolormap[teamID],plrName.c_str(),Util::teamcolormap[teamID],teamName.c_str()); + else + html.write("<tr><td><font class=player%s>%s</font><font color=white> changed teams to <font class=player%s>%s</font>.</font></tr></td>\n",Util::teamcolormap[oldTeamID],plrName.c_str(),Util::teamcolormap[teamID],teamName.c_str()); + html.br(); + } + else if ((*it)->getType()==CLogEvent::FRAG) + { + PID killer=(*it)->getArgument(0)->asPlayerGetPID(); + string killerName=(*it)->getArgument(0)->asPlayerGetName(); + PID killee=(*it)->getArgument(1)->asPlayerGetPID(); + string killeeName=(*it)->getArgument(1)->asPlayerGetName(); + string weaponName = (*it)->getArgument(2)->getStringValue(); + + int killerTeamID=g_pMatchInfo->playerList()[killer].teams.atTime((*it)->getTime()); + int killeeTeamID=g_pMatchInfo->playerList()[killee].teams.atTime((*it)->getTime()); + + bool countKill=true; + + //gotta account for timer/infection double kills for medics! + if (weaponName=="infection") + { + //test to see if the previous event was a timer from the same player, and a kill, and with the timer. + CEventListIterator it2=it; + if ((--it2)!=g_pMatchInfo->eventList()->begin()) + { + if ((*it2)->getType() == CLogEvent::FRAG) + if ((*it2)->getArgument(2)->getStringValue()=="timer") + if ((*it2)->getArgument(0)->asPlayerGetPID()==killer) + countKill=false; + } + } + if (countKill) + { + html.write("<tr><td><font class=player%s>%s</font><font color=white> killed </font><font class=player%s>%s</font><font color=white> with %s. </font></tr></td>\n", + Util::teamcolormap[killerTeamID],killerName.c_str(),Util::teamcolormap[killeeTeamID],killeeName.c_str(),weaponName.c_str()); + html.br(); + } + + } + else if ((*it)->getType()==CLogEvent::TEAM_FRAG) + { + PID killer=(*it)->getArgument(0)->asPlayerGetPID(); + string killerName=(*it)->getArgument(0)->asPlayerGetName(); + PID killee=(*it)->getArgument(1)->asPlayerGetPID(); + string killeeName=(*it)->getArgument(1)->asPlayerGetName(); + + int killerTeamID=g_pMatchInfo->playerList()[killer].teams.atTime((*it)->getTime()); + int killeeTeamID=g_pMatchInfo->playerList()[killee].teams.atTime((*it)->getTime()); + html.write("<tr><td><font class=player%s>%s</font><font color=white> teamkilled </font><font class=player%s>%s.</font></tr></td>\n", + Util::teamcolormap[killerTeamID],killerName.c_str(),Util::teamcolormap[killeeTeamID],killeeName.c_str()); + html.br(); + } + + } + + html.enddiv(); +} + |