mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-14 12:18:22 +00:00
Working in game again
hooray
This commit is contained in:
parent
a5e63529dc
commit
259f0c8371
@ -20,7 +20,7 @@
|
|||||||
#include "Metrics.hpp"
|
#include "Metrics.hpp"
|
||||||
|
|
||||||
namespace LeaderboardManager {
|
namespace LeaderboardManager {
|
||||||
LeaderboardCache leaderboardCache;
|
std::map<GameID, Leaderboard::Type> leaderboardCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
Leaderboard::Leaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, LWOOBJID relatedPlayer, const Leaderboard::Type leaderboardType) {
|
Leaderboard::Leaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, LWOOBJID relatedPlayer, const Leaderboard::Type leaderboardType) {
|
||||||
@ -36,8 +36,7 @@ Leaderboard::~Leaderboard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Leaderboard::Clear() {
|
void Leaderboard::Clear() {
|
||||||
for (auto& entry : entries) for (auto data : entry) delete data;
|
for (auto& entry : entries) for (auto ldfData : entry) delete ldfData;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void WriteLeaderboardRow(std::ostringstream& leaderboard, const uint32_t& index, LDFBaseData* data) {
|
inline void WriteLeaderboardRow(std::ostringstream& leaderboard, const uint32_t& index, LDFBaseData* data) {
|
||||||
@ -68,6 +67,7 @@ void Leaderboard::Serialize(RakNet::BitStream* bitStream) const {
|
|||||||
bitStream->Write<uint32_t>(leaderboardSize);
|
bitStream->Write<uint32_t>(leaderboardSize);
|
||||||
// Doing this all in 1 call so there is no possbility of a dangling pointer.
|
// Doing this all in 1 call so there is no possbility of a dangling pointer.
|
||||||
bitStream->WriteAlignedBytes(reinterpret_cast<const unsigned char*>(GeneralUtils::ASCIIToUTF16(leaderboard.str()).c_str()), leaderboardSize * sizeof(char16_t));
|
bitStream->WriteAlignedBytes(reinterpret_cast<const unsigned char*>(GeneralUtils::ASCIIToUTF16(leaderboard.str()).c_str()), leaderboardSize * sizeof(char16_t));
|
||||||
|
if (leaderboardSize > 0) bitStream->Write<uint16_t>(0);
|
||||||
bitStream->Write0();
|
bitStream->Write0();
|
||||||
bitStream->Write0();
|
bitStream->Write0();
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ void Leaderboard::SetupLeaderboard(uint32_t resultStart, uint32_t resultEnd) {
|
|||||||
SELECT leaderboardsRanked.*, character_id, UNIX_TIMESTAMP(last_played) as lastPlayed, leaderboardsRanked.name, leaderboardsRanked.ranking FROM leaderboardsRanked, myStanding, lowestRanking
|
SELECT leaderboardsRanked.*, character_id, UNIX_TIMESTAMP(last_played) as lastPlayed, leaderboardsRanked.name, leaderboardsRanked.ranking FROM leaderboardsRanked, myStanding, lowestRanking
|
||||||
WHERE leaderboardsRanked.ranking
|
WHERE leaderboardsRanked.ranking
|
||||||
BETWEEN
|
BETWEEN
|
||||||
LEAST(GREATEST(CAST(myRank AS SIGNED) - 5, %i), lowestRanking.lowestRank - 10)
|
LEAST(GREATEST(CAST(myRank AS SIGNED) - 5, %i), lowestRanking.lowestRank - 9)
|
||||||
AND
|
AND
|
||||||
LEAST(GREATEST(myRank + 5, %i), lowestRanking.lowestRank)
|
LEAST(GREATEST(myRank + 5, %i), lowestRanking.lowestRank)
|
||||||
ORDER BY ranking ASC;
|
ORDER BY ranking ASC;
|
||||||
@ -228,7 +228,7 @@ void Leaderboard::SetupLeaderboard(uint32_t resultStart, uint32_t resultEnd) {
|
|||||||
baseLookup += orderBase.data();
|
baseLookup += orderBase.data();
|
||||||
} else {
|
} else {
|
||||||
baseLookup = "SELECT id FROM leaderboard WHERE game_id = ? AND character_id = ";
|
baseLookup = "SELECT id FROM leaderboard WHERE game_id = ? AND character_id = ";
|
||||||
baseLookup += std::to_string(this->relatedPlayer);
|
baseLookup += std::to_string(static_cast<uint32_t>(this->relatedPlayer));
|
||||||
}
|
}
|
||||||
baseLookup += " LIMIT 1";
|
baseLookup += " LIMIT 1";
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ void Leaderboard::SetupLeaderboard(uint32_t resultStart, uint32_t resultEnd) {
|
|||||||
// Create and execute the actual save here. Using a heap allocated buffer to avoid stack overflow
|
// Create and execute the actual save here. Using a heap allocated buffer to avoid stack overflow
|
||||||
constexpr uint16_t STRING_LENGTH = 4096;
|
constexpr uint16_t STRING_LENGTH = 4096;
|
||||||
std::unique_ptr<char[]> lookupBuffer = std::make_unique<char[]>(STRING_LENGTH);
|
std::unique_ptr<char[]> lookupBuffer = std::make_unique<char[]>(STRING_LENGTH);
|
||||||
[[maybe_unused]] int32_t res = snprintf(lookupBuffer.get(), STRING_LENGTH, queryBase.data(), orderBase.data(), friendsQuery.data(), resultStart, resultEnd);
|
[[maybe_unused]] int32_t res = snprintf(lookupBuffer.get(), STRING_LENGTH, queryBase.c_str(), orderBase.data(), friendsQuery.c_str(), resultStart, resultEnd);
|
||||||
DluAssert(res != -1);
|
DluAssert(res != -1);
|
||||||
std::unique_ptr<sql::PreparedStatement> query(Database::CreatePreppedStmt(lookupBuffer.get()));
|
std::unique_ptr<sql::PreparedStatement> query(Database::CreatePreppedStmt(lookupBuffer.get()));
|
||||||
|
|
||||||
@ -256,7 +256,6 @@ void Leaderboard::SetupLeaderboard(uint32_t resultStart, uint32_t resultEnd) {
|
|||||||
} else {
|
} else {
|
||||||
query->setInt(2, relatedPlayerLeaderboardId);
|
query->setInt(2, relatedPlayerLeaderboardId);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<sql::ResultSet> result(query->executeQuery());
|
std::unique_ptr<sql::ResultSet> result(query->executeQuery());
|
||||||
QueryToLdf(result);
|
QueryToLdf(result);
|
||||||
}
|
}
|
||||||
@ -274,14 +273,14 @@ std::string FormatInsert(const Leaderboard::Type& type, const Score& score, cons
|
|||||||
insertStatement =
|
insertStatement =
|
||||||
R"QUERY(
|
R"QUERY(
|
||||||
UPDATE leaderboard
|
UPDATE leaderboard
|
||||||
SET primaryScore %f, secondaryScore %f, tertiaryScore %f,
|
SET primaryScore = %f, secondaryScore = %f, tertiaryScore = %f,
|
||||||
timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;
|
timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;
|
||||||
)QUERY";
|
)QUERY";
|
||||||
} else {
|
} else {
|
||||||
insertStatement =
|
insertStatement =
|
||||||
R"QUERY(
|
R"QUERY(
|
||||||
INSERT leaderboard SET
|
INSERT leaderboard SET
|
||||||
primaryScore %f, secondaryScore %f, tertiaryScore %f,
|
primaryScore = %f, secondaryScore = %f, tertiaryScore = %f,
|
||||||
character_id = ?, game_id = ?;
|
character_id = ?, game_id = ?;
|
||||||
)QUERY";
|
)QUERY";
|
||||||
}
|
}
|
||||||
@ -294,12 +293,13 @@ std::string FormatInsert(const Leaderboard::Type& type, const Score& score, cons
|
|||||||
return finishedQuery;
|
return finishedQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LeaderboardManager::SaveScore(const LWOOBJID& playerID, const GameID gameID, const Leaderboard::Type leaderboardType, const float primaryScore, const float secondaryScore, const float tertiaryScore) {
|
void LeaderboardManager::SaveScore(const LWOOBJID& playerID, const GameID activityId, const float primaryScore, const float secondaryScore, const float tertiaryScore) {
|
||||||
|
const Leaderboard::Type leaderboardType = GetLeaderboardType(activityId);
|
||||||
auto* lookup = "SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;";
|
auto* lookup = "SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;";
|
||||||
|
|
||||||
std::unique_ptr<sql::PreparedStatement> query(Database::CreatePreppedStmt(lookup));
|
std::unique_ptr<sql::PreparedStatement> query(Database::CreatePreppedStmt(lookup));
|
||||||
query->setInt(1, playerID);
|
query->setInt(1, playerID);
|
||||||
query->setInt(2, gameID);
|
query->setInt(2, activityId);
|
||||||
std::unique_ptr<sql::ResultSet> myScoreResult(query->executeQuery());
|
std::unique_ptr<sql::ResultSet> myScoreResult(query->executeQuery());
|
||||||
|
|
||||||
std::string saveQuery("UPDATE leaderboard SET timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;");
|
std::string saveQuery("UPDATE leaderboard SET timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;");
|
||||||
@ -349,7 +349,7 @@ void LeaderboardManager::SaveScore(const LWOOBJID& playerID, const GameID gameID
|
|||||||
}
|
}
|
||||||
case Leaderboard::Type::None:
|
case Leaderboard::Type::None:
|
||||||
default:
|
default:
|
||||||
Game::logger->Log("LeaderboardManager", "Unknown leaderboard type %i for game %i. Cannot save score!", leaderboardType, gameID);
|
Game::logger->Log("LeaderboardManager", "Unknown leaderboard type %i for game %i. Cannot save score!", leaderboardType, activityId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool newHighScore = lowerScoreBetter ? newScore < oldScore : newScore > oldScore;
|
bool newHighScore = lowerScoreBetter ? newScore < oldScore : newScore > oldScore;
|
||||||
@ -364,11 +364,11 @@ void LeaderboardManager::SaveScore(const LWOOBJID& playerID, const GameID gameID
|
|||||||
|
|
||||||
std::unique_ptr<sql::PreparedStatement> saveStatement(Database::CreatePreppedStmt(saveQuery));
|
std::unique_ptr<sql::PreparedStatement> saveStatement(Database::CreatePreppedStmt(saveQuery));
|
||||||
saveStatement->setInt(1, playerID);
|
saveStatement->setInt(1, playerID);
|
||||||
saveStatement->setInt(2, gameID);
|
saveStatement->setInt(2, activityId);
|
||||||
saveStatement->execute();
|
saveStatement->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LeaderboardManager::SendLeaderboard(const uint32_t gameID, const Leaderboard::InfoType infoType, const bool weekly, const LWOOBJID playerID, const LWOOBJID targetID, const uint32_t resultStart, const uint32_t resultEnd) {
|
void LeaderboardManager::SendLeaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, const LWOOBJID playerID, const LWOOBJID targetID, const uint32_t resultStart, const uint32_t resultEnd) {
|
||||||
Leaderboard leaderboard(gameID, infoType, weekly, playerID, GetLeaderboardType(gameID));
|
Leaderboard leaderboard(gameID, infoType, weekly, playerID, GetLeaderboardType(gameID));
|
||||||
leaderboard.SetupLeaderboard(resultStart, resultEnd);
|
leaderboard.SetupLeaderboard(resultStart, resultEnd);
|
||||||
leaderboard.Send(targetID);
|
leaderboard.Send(targetID);
|
||||||
|
@ -77,6 +77,11 @@ public:
|
|||||||
Leaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, LWOOBJID relatedPlayer, const Leaderboard::Type = None);
|
Leaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, LWOOBJID relatedPlayer, const Leaderboard::Type = None);
|
||||||
|
|
||||||
~Leaderboard();
|
~Leaderboard();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Resets the leaderboard state and frees its allocated memory
|
||||||
|
*
|
||||||
|
*/
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,14 +123,12 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
namespace LeaderboardManager {
|
namespace LeaderboardManager {
|
||||||
|
|
||||||
using LeaderboardCache = std::map<GameID, Leaderboard::Type>;
|
|
||||||
void SendLeaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, const LWOOBJID playerID, const LWOOBJID targetID, const uint32_t resultStart = 0, const uint32_t resultEnd = 10);
|
void SendLeaderboard(const GameID gameID, const Leaderboard::InfoType infoType, const bool weekly, const LWOOBJID playerID, const LWOOBJID targetID, const uint32_t resultStart = 0, const uint32_t resultEnd = 10);
|
||||||
|
|
||||||
void SaveScore(const LWOOBJID& playerID, const GameID gameID, const Leaderboard::Type leaderboardType, const float primaryScore, const float secondaryScore = 0, const float tertiaryScore = 0);
|
void SaveScore(const LWOOBJID& playerID, const GameID activityId, const float primaryScore, const float secondaryScore = 0, const float tertiaryScore = 0);
|
||||||
|
|
||||||
Leaderboard::Type GetLeaderboardType(const GameID gameID);
|
Leaderboard::Type GetLeaderboardType(const GameID gameID);
|
||||||
extern LeaderboardCache leaderboardCache;
|
extern std::map<GameID, Leaderboard::Type> leaderboardCache;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__LEADERBOARDMANAGER__H__
|
#endif //!__LEADERBOARDMANAGER__H__
|
||||||
|
@ -379,8 +379,7 @@ void RacingControlComponent::HandleMessageBoxResponse(Entity* player, int32_t bu
|
|||||||
const auto score = m_LoadedPlayers * 10 + data->finished;
|
const auto score = m_LoadedPlayers * 10 + data->finished;
|
||||||
|
|
||||||
LootGenerator::Instance().GiveActivityLoot(player, m_Parent, m_ActivityID, score);
|
LootGenerator::Instance().GiveActivityLoot(player, m_Parent, m_ActivityID, score);
|
||||||
// auto leaderboardType = LeaderboardManager::Instance().GetLeaderboardType(m_ActivityID);
|
LeaderboardManager::SaveScore(player->GetObjectID(), m_ActivityID, static_cast<float>(data->bestLapTime), static_cast<float>(data->raceTime), static_cast<float>(data->finished == 1));
|
||||||
// LeaderboardManager::Instance().SaveScore(player->GetObjectID(), m_ActivityID, leaderboardType, 3, data->bestLapTime, data->raceTime, data->finished == 1);
|
|
||||||
|
|
||||||
// Giving rewards
|
// Giving rewards
|
||||||
GameMessages::SendNotifyRacingClient(
|
GameMessages::SendNotifyRacingClient(
|
||||||
|
@ -1669,7 +1669,7 @@ void GameMessages::HandleRequestActivitySummaryLeaderboardData(RakNet::BitStream
|
|||||||
|
|
||||||
bool weekly = inStream->ReadBit();
|
bool weekly = inStream->ReadBit();
|
||||||
|
|
||||||
// LeaderboardManager::Instance().SendLeaderboard(gameID, queryType, weekly, entity->GetObjectID(), entity->GetObjectID(), resultsStart, resultsEnd);
|
LeaderboardManager::SendLeaderboard(gameID, queryType, weekly, entity->GetObjectID(), entity->GetObjectID(), resultsStart, resultsEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMessages::HandleActivityStateChangeRequest(RakNet::BitStream* inStream, Entity* entity) {
|
void GameMessages::HandleActivityStateChangeRequest(RakNet::BitStream* inStream, Entity* entity) {
|
||||||
|
@ -93,8 +93,7 @@ void NpcAgCourseStarter::OnFireEventServerSide(Entity* self, Entity* sender, std
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntityManager::Instance()->SerializeEntity(self);
|
EntityManager::Instance()->SerializeEntity(self);
|
||||||
auto leaderboardType = LeaderboardManager::GetLeaderboardType(scriptedActivityComponent->GetActivityID());
|
LeaderboardManager::SaveScore(sender->GetObjectID(), scriptedActivityComponent->GetActivityID(), static_cast<float>(finish));
|
||||||
// LeaderboardManager::Instance().SaveScore(sender->GetObjectID(), scriptedActivityComponent->GetActivityID(), leaderboardType, 1, finish);
|
|
||||||
|
|
||||||
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"ToggleLeaderBoard",
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"ToggleLeaderBoard",
|
||||||
scriptedActivityComponent->GetActivityID(), 0, sender->GetObjectID(),
|
scriptedActivityComponent->GetActivityID(), 0, sender->GetObjectID(),
|
||||||
|
@ -79,16 +79,14 @@ void ActivityManager::StopActivity(Entity* self, const LWOOBJID playerID, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityManager::SaveScore(Entity* self, LWOOBJID playerID, uint32_t val1, uint32_t val2, uint32_t val3) {
|
void ActivityManager::SaveScore(Entity* self, const LWOOBJID playerID, const float primaryScore, const float secondaryScore, const float tertiaryScore) const {
|
||||||
auto* player = EntityManager::Instance()->GetEntity(playerID);
|
auto* player = EntityManager::Instance()->GetEntity(playerID);
|
||||||
if (!player) return;
|
if (!player) return;
|
||||||
|
|
||||||
auto* sac = self->GetComponent<ScriptedActivityComponent>();
|
auto* sac = self->GetComponent<ScriptedActivityComponent>();
|
||||||
uint32_t gameID = sac != nullptr ? sac->GetActivityID() : self->GetLOT();
|
uint32_t gameID = sac != nullptr ? sac->GetActivityID() : self->GetLOT();
|
||||||
// Save the new score to the leaderboard and show the leaderboard to the player
|
// Save the new score to the leaderboard and show the leaderboard to the player
|
||||||
auto leaderboardType = LeaderboardManager::GetLeaderboardType(gameID);
|
LeaderboardManager::SaveScore(playerID, gameID, primaryScore, secondaryScore, tertiaryScore);
|
||||||
Game::logger->Log("ActivityManager", "leaderboard type %i %i args %i %i %i", leaderboardType, gameID, val1, val2, val3);
|
|
||||||
// LeaderboardManager::Instance().SaveScore(playerID, gameID, leaderboardType, 3, val1, val2, val3);
|
|
||||||
|
|
||||||
// Makes the leaderboard show up for the player
|
// Makes the leaderboard show up for the player
|
||||||
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"ToggleLeaderBoard", gameID, 0, playerID, "", player->GetSystemAddress());
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"ToggleLeaderBoard", gameID, 0, playerID, "", player->GetSystemAddress());
|
||||||
@ -123,9 +121,7 @@ void ActivityManager::GetLeaderboardData(Entity* self, const LWOOBJID playerID,
|
|||||||
auto* sac = self->GetComponent<ScriptedActivityComponent>();
|
auto* sac = self->GetComponent<ScriptedActivityComponent>();
|
||||||
uint32_t gameID = sac != nullptr ? sac->GetActivityID() : self->GetLOT();
|
uint32_t gameID = sac != nullptr ? sac->GetActivityID() : self->GetLOT();
|
||||||
// Save the new score to the leaderboard and show the leaderboard to the player
|
// Save the new score to the leaderboard and show the leaderboard to the player
|
||||||
auto leaderboardType = LeaderboardManager::GetLeaderboardType(gameID);
|
LeaderboardManager::SendLeaderboard(activityID, Leaderboard::InfoType::MyStanding, false, playerID, self->GetObjectID(), 0, numResults);
|
||||||
Game::logger->Log("ActivityManager", "gameID %i", gameID, activityID);
|
|
||||||
// LeaderboardManager::Instance().SendLeaderboard(activityID, Leaderboard::InfoType::MyStanding, false, playerID, self->GetObjectID(), 0, numResults);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityManager::ActivityTimerStart(Entity* self, const std::string& timerName, const float_t updateInterval,
|
void ActivityManager::ActivityTimerStart(Entity* self, const std::string& timerName, const float_t updateInterval,
|
||||||
|
@ -18,7 +18,7 @@ public:
|
|||||||
static bool TakeActivityCost(const Entity* self, LWOOBJID playerID);
|
static bool TakeActivityCost(const Entity* self, LWOOBJID playerID);
|
||||||
static uint32_t GetActivityID(const Entity* self);
|
static uint32_t GetActivityID(const Entity* self);
|
||||||
void StopActivity(Entity* self, LWOOBJID playerID, uint32_t score, uint32_t value1 = 0, uint32_t value2 = 0, bool quit = false);
|
void StopActivity(Entity* self, LWOOBJID playerID, uint32_t score, uint32_t value1 = 0, uint32_t value2 = 0, bool quit = false);
|
||||||
void SaveScore(Entity* self, LWOOBJID playerID, uint32_t val1 = 0, uint32_t val2 = 0, uint32_t val3 = 0);
|
void SaveScore(Entity* self, const LWOOBJID playerID, const float primaryScore, const float secondaryScore = 0.0f, const float tertiaryScore = 0.0f) const;
|
||||||
virtual uint32_t CalculateActivityRating(Entity* self, LWOOBJID playerID);
|
virtual uint32_t CalculateActivityRating(Entity* self, LWOOBJID playerID);
|
||||||
static void GetLeaderboardData(Entity* self, LWOOBJID playerID, uint32_t activityID, uint32_t numResults = 0);
|
static void GetLeaderboardData(Entity* self, LWOOBJID playerID, uint32_t activityID, uint32_t numResults = 0);
|
||||||
// void FreezePlayer(Entity *self, const LWOOBJID playerID, const bool state) const;
|
// void FreezePlayer(Entity *self, const LWOOBJID playerID, const bool state) const;
|
||||||
|
@ -42,7 +42,7 @@ void BaseFootRaceManager::OnFireEventServerSide(Entity* self, Entity* sender, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
StopActivity(self, player->GetObjectID(), 0, param1);
|
StopActivity(self, player->GetObjectID(), 0, param1);
|
||||||
SaveScore(self, player->GetObjectID(), param1, param2, param3);
|
SaveScore(self, player->GetObjectID(), static_cast<float>(param1), static_cast<float>(param2), static_cast<float>(param3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ void SGCannon::OnMessageBoxResponse(Entity* self, Entity* sender, int32_t button
|
|||||||
if (IsPlayerInActivity(self, player->GetObjectID())) return;
|
if (IsPlayerInActivity(self, player->GetObjectID())) return;
|
||||||
self->SetNetworkVar<bool>(ClearVariable, true);
|
self->SetNetworkVar<bool>(ClearVariable, true);
|
||||||
StartGame(self);
|
StartGame(self);
|
||||||
} else if (button == 0 && ((identifier == u"Shooting_Gallery_Retry" || identifier == u"RePlay"))){
|
} else if (button == 0 && ((identifier == u"Shooting_Gallery_Retry" || identifier == u"RePlay"))) {
|
||||||
RemovePlayer(player->GetObjectID());
|
RemovePlayer(player->GetObjectID());
|
||||||
UpdatePlayer(self, player->GetObjectID(), true);
|
UpdatePlayer(self, player->GetObjectID(), true);
|
||||||
} else if (button == 1 && identifier == u"Shooting_Gallery_Exit") {
|
} else if (button == 1 && identifier == u"Shooting_Gallery_Exit") {
|
||||||
@ -436,8 +436,8 @@ void SGCannon::RemovePlayer(LWOOBJID playerID) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGCannon::OnRequestActivityExit(Entity* self, LWOOBJID player, bool canceled){
|
void SGCannon::OnRequestActivityExit(Entity* self, LWOOBJID player, bool canceled) {
|
||||||
if (canceled){
|
if (canceled) {
|
||||||
StopGame(self, canceled);
|
StopGame(self, canceled);
|
||||||
RemovePlayer(player);
|
RemovePlayer(player);
|
||||||
}
|
}
|
||||||
@ -565,7 +565,8 @@ void SGCannon::StopGame(Entity* self, bool cancel) {
|
|||||||
LootGenerator::Instance().GiveActivityLoot(player, self, GetGameID(self), self->GetVar<uint32_t>(TotalScoreVariable));
|
LootGenerator::Instance().GiveActivityLoot(player, self, GetGameID(self), self->GetVar<uint32_t>(TotalScoreVariable));
|
||||||
|
|
||||||
StopActivity(self, player->GetObjectID(), self->GetVar<uint32_t>(TotalScoreVariable), self->GetVar<uint32_t>(MaxStreakVariable), percentage);
|
StopActivity(self, player->GetObjectID(), self->GetVar<uint32_t>(TotalScoreVariable), self->GetVar<uint32_t>(MaxStreakVariable), percentage);
|
||||||
SaveScore(self, player->GetObjectID(), self->GetVar<uint32_t>(TotalScoreVariable), percentage, self->GetVar<uint32_t>(MaxStreakVariable));
|
SaveScore(self, player->GetObjectID(),
|
||||||
|
static_cast<float>(self->GetVar<uint32_t>(TotalScoreVariable)), percentage, static_cast<float>(self->GetVar<uint32_t>(MaxStreakVariable)));
|
||||||
self->SetNetworkVar<bool>(AudioFinalWaveDoneVariable, true);
|
self->SetNetworkVar<bool>(AudioFinalWaveDoneVariable, true);
|
||||||
|
|
||||||
// Give the player the model rewards they earned
|
// Give the player the model rewards they earned
|
||||||
|
Loading…
Reference in New Issue
Block a user