Files
MinecraftConsoles/Minecraft.Client/Durango/Sentient/DurangoTelemetry.cpp
2026-03-02 17:37:16 +07:00

986 lines
24 KiB
C++

#include "stdafx.h"
#include "..\Minecraft.World\StringHelpers.h"
#include "..\Minecraft.World\Player.h"
#include "..\Minecraft.World\Level.h"
#include "..\Minecraft.World\LevelData.h"
#include "..\Minecraft.World\LevelSettings.h"
#include "Common\Network\GameNetworkManager.h"
#include "MultiPlayerLocalPlayer.h"
#include "..\ServiceConfig\Events-XBLA.8-149E11AEEvents.h"
#include "DurangoTelemetry.h"
CTelemetryManager *TelemetryManager = new CDurangoTelemetryManager();
// Empty GUID
GUID CDurangoTelemetryManager::ZERO_GUID = GUID();
/*
HRESULT CDurangoTelemetryManager::Init()
{
app.DebugPrintf("[CDurangoTelemetryManager] Init().\n");
m_initialiseTime = app.getAppTime();
return S_OK;
}
*/
CDurangoTelemetryManager::CDurangoTelemetryManager()
{
m_initialiseTime = app.getAppTime();
}
/*
HRESULT CDurangoTelemetryManager::Tick()
{
app.DebugPrintf("[CDurangoTelemetryManager] Tick().\n");
return S_OK;
}
HRESULT CDurangoTelemetryManager::Flush()
{
app.DebugPrintf("[CDurangoTelemetryManager] Flush().\n");
return S_OK;
} */
bool CDurangoTelemetryManager::RecordPlayerSessionStart(int iPad)
{
durangoStats()->generatePlayerSession();
return true;
}
bool CDurangoTelemetryManager::RecordPlayerSessionExit(int iPad, int exitStatus)
{
PlayerUID puid; shared_ptr<Player> plr;
ProfileManager.GetXUID(iPad, &puid, true);
plr = Minecraft::GetInstance()->localplayers[iPad];
// 4J-JEV: Still needed to flush cached travel stats.
DurangoStats::playerSessionEnd(iPad);
if (plr != NULL && plr->level != NULL && plr->level->getLevelData() != NULL)
{
ULONG hr = EventWritePlayerSessionEnd(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty,
exitStatus);
if (hr == 0) // Debug.
{
app.DebugPrintf("<%ls> PlayerSessionEnd(%ls,%ls,%i,%i,%i)\n",
DurangoStats::getUserId(iPad),
guid2str(DurangoStats::getPlayerSession()).c_str(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty,
exitStatus);
}
if ( !g_NetworkManager.IsLocalGame() )
{
float roundLength = app.getAppTime() - m_multiplayerRoundStartTimes[DurangoStats::getUserId(iPad)];
hr = EventWriteMultiplayerRoundEnd(
DurangoStats::getUserId(iPad),
&ZERO_GUID,
0,
DurangoStats::getPlayerSession(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(), // GameMode
0,
plr->level->difficulty,
roundLength, // Time (seconds)
exitStatus
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> MultiplayerRoundEnd(%ls,%ls,%i,%i,%.1f,%i).\n",
DurangoStats::getUserId(iPad),
guid2str(DurangoStats::getPlayerSession()).c_str(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty,
roundLength,
exitStatus);
}
}
}
return true;
}
bool CDurangoTelemetryManager::RecordLevelStart(int iPad, ESen_FriendOrMatch friendsOrMatch, ESen_CompeteOrCoop competeOrCoop, int difficulty, int numberOfLocalPlayers, int numberOfOnlinePlayers)
{
CTelemetryManager::RecordLevelStart(iPad, friendsOrMatch, competeOrCoop, difficulty, numberOfLocalPlayers, numberOfOnlinePlayers);
ULONG hr = 0;
// Grab player info.
PlayerUID puid; shared_ptr<Player> plr;
ProfileManager.GetXUID(iPad, &puid, true);
plr = Minecraft::GetInstance()->localplayers[iPad];
if (plr != NULL && plr->level != NULL && plr->level->getLevelData() != NULL)
{
hr = EventWritePlayerSessionStart(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty
);
if (hr == 0) // Debug.
{
app.DebugPrintf("<%ls> PlayerSessionStart(%ls,%ls,%i,%i)\n",
DurangoStats::getUserId(iPad),
guid2str(DurangoStats::getPlayerSession()).c_str(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty);
}
m_multiplayerRoundStartTimes[DurangoStats::getUserId(iPad)] = -1.0f;
// Send 'MultiplayerRoundStart' if we're starting an online game.
if ( !g_NetworkManager.IsLocalGame() )
{
hr = EventWriteMultiplayerRoundStart(
DurangoStats::getUserId(iPad),
&ZERO_GUID, // RoundId
0, // SectionId
DurangoStats::getPlayerSession(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(), // GameMode
0, // MatchType
plr->level->difficulty);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> MultiplayerRoundStart(%ls,%ls,%i,%i).\n",
DurangoStats::getUserId(iPad),
guid2str(DurangoStats::getPlayerSession()).c_str(),
DurangoStats::getMultiplayerCorrelationId(),
plr->level->getLevelData()->getGameType()->isSurvival(),
plr->level->difficulty);
}
m_multiplayerRoundStartTimes[DurangoStats::getUserId(iPad)] = app.getAppTime();
}
}
hr = EventWriteLevelStart(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
friendsOrMatch,
competeOrCoop,
difficulty,
numberOfLocalPlayers,
numberOfOnlinePlayers,
&ZERO_GUID
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordLevelStart("
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i,%i,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ friendsOrMatch,
/* int */ competeOrCoop,
/* int */ difficulty,
/* int */ numberOfLocalPlayers,
/* int */ numberOfOnlinePlayers
);
}
return true;
}
bool CDurangoTelemetryManager::RecordLevelExit(int iPad, ESen_LevelExitStatus levelExitStatus)
{
CTelemetryManager::RecordLevelExit(iPad, levelExitStatus);
ULONG hr = EventWriteLevelExit(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
levelExitStatus,
&ZERO_GUID
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordLevelExit(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ levelExitStatus
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordLevelSaveOrCheckpoint(int iPad, int saveOrCheckPointID, int saveSizeInBytes)
{
CTelemetryManager::RecordLevelSaveOrCheckpoint(iPad, saveOrCheckPointID, saveSizeInBytes);
ULONG hr = EventWriteLevelSaveOrCheckpoint(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
saveOrCheckPointID,
saveSizeInBytes
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordLevelSaveOrCheckpoint(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ saveOrCheckPointID,
/* int */ saveSizeInBytes
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordLevelResume(int iPad, ESen_FriendOrMatch friendsOrMatch, ESen_CompeteOrCoop competeOrCoop, int difficulty, int numberOfLocalPlayers, int numberOfOnlinePlayers, int saveOrCheckPointID)
{
CTelemetryManager::RecordLevelResume(iPad, friendsOrMatch, competeOrCoop, difficulty, numberOfLocalPlayers, numberOfOnlinePlayers, saveOrCheckPointID);
ULONG hr = EventWriteLevelResume(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
friendsOrMatch,
competeOrCoop,
difficulty,
numberOfLocalPlayers,
numberOfOnlinePlayers,
saveOrCheckPointID
);
if (hr == 0) // Debug
{
app.DebugPrintf(
"<%ls> RecordLevelResume(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i,%i,%i,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ friendsOrMatch,
/* int */ competeOrCoop,
/* int */ difficulty,
/* int */ numberOfLocalPlayers,
/* int */ numberOfOnlinePlayers,
/* int */ saveOrCheckPointID
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordPauseOrInactive(int iPad)
{
CTelemetryManager::RecordPauseOrInactive(iPad);
ULONG hr = EventWritePauseOrInactive(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId()
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordUnpauseOrActive(int iPad)
{
CTelemetryManager::RecordUnpauseOrActive(iPad);
ULONG hr = EventWriteUnpauseOrActive(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId()
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordMenuShown(int iPad, EUIScene menuID, int optionalMenuSubID)
{
CTelemetryManager::RecordMenuShown(iPad, menuID, optionalMenuSubID);
ULONG hr = EventWriteMenuShown(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
menuID,
optionalMenuSubID
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordMenuShown(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ menuID,
/* int */ optionalMenuSubID
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordAchievementUnlocked(int iPad, int achievementID, int achievementGamerscore)
{
CTelemetryManager::RecordAchievementUnlocked(iPad, achievementID, achievementGamerscore);
ULONG hr = EventWriteAchievemntUnlocked(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
achievementID,
achievementGamerscore
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ achievementID,
/* int */ achievementGamerscore
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordMediaShareUpload(int iPad, ESen_MediaDestination mediaDestination, ESen_MediaType mediaType)
{
CTelemetryManager::RecordMediaShareUpload(iPad, mediaDestination, mediaType);
#if 0
ULONG hr = EventWriteRecordMediaShareUpload(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
mediaDestination,
mediaType
);
#else
ULONG hr = -1;
#endif
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ mediaDestination,
/* int */ mediaType
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordUpsellPresented(int iPad, ESen_UpsellID upsellId, int marketplaceOfferID)
{
//CTelemetryManager::RecordUpsellPresented(iPad, upsellId
ULONG hr = EventWriteUpsellPresented(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
upsellId,
marketplaceOfferID
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ upsellId,
/* int */ marketplaceOfferID
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordUpsellResponded(int iPad, ESen_UpsellID upsellId, int marketplaceOfferID, ESen_UpsellOutcome upsellOutcome)
{
ULONG hr = EventWriteUpsellResponded(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
upsellId,
marketplaceOfferID,
upsellOutcome
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ upsellId,
/* int */ marketplaceOfferID,
/* int */ upsellOutcome
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordPlayerDiedOrFailed(int iPad, int lowResMapX, int lowResMapY, int lowResMapZ, int mapID, int playerWeaponID, int enemyWeaponID, ETelemetryChallenges enemyTypeID)
{
ULONG hr = EventWritePlayerDiedOrFailed(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
lowResMapX,
lowResMapY,
lowResMapZ,
mapID,
playerWeaponID,
enemyWeaponID,
enemyTypeID
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i,%i,%i,%i,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ lowResMapX,
/* int */ lowResMapY,
/* int */ lowResMapZ,
/* int */ mapID,
/* int */ playerWeaponID,
/* int */ enemyWeaponID,
/* int */ enemyTypeID
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordEnemyKilledOrOvercome(int iPad, int lowResMapX, int lowResMapY, int lowResMapZ, int mapID, int playerWeaponID, int enemyWeaponID, ETelemetryChallenges enemyTypeID)
{
ULONG hr = -1;
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%i,%i,%i,%i,%i,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ lowResMapX,
/* int */ lowResMapY,
/* int */ lowResMapZ,
/* int */ mapID,
/* int */ playerWeaponID,
/* int */ enemyWeaponID,
/* int */ enemyTypeID
);
}
// NO EVENT TO SEND, ALREADY COVERED BY STATISTIC CODE!
return hr == 0;
}
bool CDurangoTelemetryManager::RecordTexturePackLoaded(int iPad, int texturePackId, bool purchased)
{
ULONG hr = EventWriteTexturePackLoaded(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
texturePackId,
purchased
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordPauseOrInactive(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i,%s).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ texturePackId,
/* bool */ (purchased ? "Purchased" : "NotPurchased")
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordSkinChanged(int iPad, int dwSkinId)
{
ULONG hr = EventWriteSkinChanged(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID,
dwSkinId
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordSkinChanged(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls,%i).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId(),
/* int */ dwSkinId
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordBanLevel(int iPad)
{
ULONG hr = EventWriteBanLevel(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID
);
if (hr == 0)
{
app.DebugPrintf(
"<%ls> RecordBanLevel(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId()
);
}
return hr == 0;
}
bool CDurangoTelemetryManager::RecordUnBanLevel(int iPad)
{
ULONG hr = EventWriteUnbanLevel(
DurangoStats::getUserId(iPad),
DurangoStats::getPlayerSession(),
GetSecondsSinceInitialize(),
GetMode(iPad),
GetSubMode(iPad),
GetLevelId(iPad),
GetSubLevelId(iPad),
GetLevelInstanceID(),
&ZERO_GUID,
&ZERO_GUID
);
if (hr == 0) // Debug.
{
app.DebugPrintf(
"<%ls> RecordUnBanLevel(",
"%is,%i,%i,%i,%i,%i,"
"%ls,%ls).\n",
/* WSTR */ DurangoStats::getUserId(iPad),
// Sentient //
/* int */ GetSecondsSinceInitialize(),
/* int */ GetMode(iPad),
/* int */ GetSubMode(iPad),
/* int */ GetLevelId(iPad),
/* int */ GetSubLevelId(iPad),
/* int */ GetLevelInstanceID(),
// Durango //
/* GUID */ guid2str(DurangoStats::getPlayerSession()).c_str(),
/* WSTR */ DurangoStats::getMultiplayerCorrelationId()
);
}
return hr == 0;
}
DurangoStats *CDurangoTelemetryManager::durangoStats()
{
return (DurangoStats*) GenericStats::getInstance();
}
wstring CDurangoTelemetryManager::guid2str(LPCGUID guid)
{
wstring out = L"GUID<";
out += _toString<unsigned long>(guid->Data1);
out += L":";
out += _toString<unsigned short>(guid->Data2);
out += L":";
out += _toString<unsigned short>(guid->Data3);
//out += L":";
//out += convStringToWstring(string((char*)&guid->Data4,8));
out += L">";
return out;
}