mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-10-12 10:28:05 +00:00
feat: convert character ids to 64 bits
remove all usages of the PERSISTENT bit with regards to storing of playerIDs on the server. the bit does not exist and was a phantom in the first place. Tested that a full playthrough of ag, ns and gf was still doable. slash commands work, ugc works, friends works, ignore list works, properties work and have names, teaming works. migrating an old mysql database works . need to test an old sqlite database
This commit is contained in:
@@ -34,7 +34,7 @@ void ChatIgnoreList::GetIgnoreList(Packet* packet) {
|
|||||||
if (!receiver.ignoredPlayers.empty()) {
|
if (!receiver.ignoredPlayers.empty()) {
|
||||||
LOG_DEBUG("Player %llu already has an ignore list, but is requesting it again.", playerId);
|
LOG_DEBUG("Player %llu already has an ignore list, but is requesting it again.", playerId);
|
||||||
} else {
|
} else {
|
||||||
auto ignoreList = Database::Get()->GetIgnoreList(static_cast<uint32_t>(playerId));
|
auto ignoreList = Database::Get()->GetIgnoreList(playerId);
|
||||||
if (ignoreList.empty()) {
|
if (ignoreList.empty()) {
|
||||||
LOG_DEBUG("Player %llu has no ignores", playerId);
|
LOG_DEBUG("Player %llu has no ignores", playerId);
|
||||||
return;
|
return;
|
||||||
@@ -43,7 +43,6 @@ void ChatIgnoreList::GetIgnoreList(Packet* packet) {
|
|||||||
for (auto& ignoredPlayer : ignoreList) {
|
for (auto& ignoredPlayer : ignoreList) {
|
||||||
receiver.ignoredPlayers.emplace_back(ignoredPlayer.name, ignoredPlayer.id);
|
receiver.ignoredPlayers.emplace_back(ignoredPlayer.name, ignoredPlayer.id);
|
||||||
GeneralUtils::SetBit(receiver.ignoredPlayers.back().playerId, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(receiver.ignoredPlayers.back().playerId, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(receiver.ignoredPlayers.back().playerId, eObjectBits::PERSISTENT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,9 +113,8 @@ void ChatIgnoreList::AddIgnore(Packet* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ignoredPlayerId != LWOOBJID_EMPTY) {
|
if (ignoredPlayerId != LWOOBJID_EMPTY) {
|
||||||
Database::Get()->AddIgnore(static_cast<uint32_t>(playerId), static_cast<uint32_t>(ignoredPlayerId));
|
Database::Get()->AddIgnore(playerId, ignoredPlayerId);
|
||||||
GeneralUtils::SetBit(ignoredPlayerId, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(ignoredPlayerId, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(ignoredPlayerId, eObjectBits::PERSISTENT);
|
|
||||||
|
|
||||||
receiver.ignoredPlayers.emplace_back(toIgnoreStr, ignoredPlayerId);
|
receiver.ignoredPlayers.emplace_back(toIgnoreStr, ignoredPlayerId);
|
||||||
LOG_DEBUG("Player %llu is ignoring %s", playerId, toIgnoreStr.c_str());
|
LOG_DEBUG("Player %llu is ignoring %s", playerId, toIgnoreStr.c_str());
|
||||||
@@ -157,7 +155,7 @@ void ChatIgnoreList::RemoveIgnore(Packet* packet) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Database::Get()->RemoveIgnore(static_cast<uint32_t>(playerId), static_cast<uint32_t>(toRemove->playerId));
|
Database::Get()->RemoveIgnore(playerId, toRemove->playerId);
|
||||||
receiver.ignoredPlayers.erase(toRemove, receiver.ignoredPlayers.end());
|
receiver.ignoredPlayers.erase(toRemove, receiver.ignoredPlayers.end());
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
|
@@ -35,7 +35,6 @@ void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) {
|
|||||||
FriendData fd;
|
FriendData fd;
|
||||||
fd.isFTP = false; // not a thing in DLU
|
fd.isFTP = false; // not a thing in DLU
|
||||||
fd.friendID = friendData.friendID;
|
fd.friendID = friendData.friendID;
|
||||||
GeneralUtils::SetBit(fd.friendID, eObjectBits::PERSISTENT);
|
|
||||||
GeneralUtils::SetBit(fd.friendID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(fd.friendID, eObjectBits::CHARACTER);
|
||||||
|
|
||||||
fd.isBestFriend = friendData.isBestFriend; //0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
fd.isBestFriend = friendData.isBestFriend; //0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
||||||
@@ -161,9 +160,7 @@ void ChatPacketHandler::HandleFriendRequest(Packet* packet) {
|
|||||||
|
|
||||||
// Set the bits
|
// Set the bits
|
||||||
GeneralUtils::SetBit(queryPlayerID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(queryPlayerID, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(queryPlayerID, eObjectBits::PERSISTENT);
|
|
||||||
GeneralUtils::SetBit(queryFriendID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(queryFriendID, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(queryFriendID, eObjectBits::PERSISTENT);
|
|
||||||
|
|
||||||
// Since this player can either be the friend of someone else or be friends with someone else
|
// Since this player can either be the friend of someone else or be friends with someone else
|
||||||
// their column in the database determines what bit gets set. When the value hits 3, they
|
// their column in the database determines what bit gets set. When the value hits 3, they
|
||||||
@@ -318,7 +315,6 @@ void ChatPacketHandler::HandleRemoveFriend(Packet* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convert friendID to LWOOBJID
|
// Convert friendID to LWOOBJID
|
||||||
GeneralUtils::SetBit(friendID, eObjectBits::PERSISTENT);
|
|
||||||
GeneralUtils::SetBit(friendID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(friendID, eObjectBits::CHARACTER);
|
||||||
|
|
||||||
Database::Get()->RemoveFriend(playerID, friendID);
|
Database::Get()->RemoveFriend(playerID, friendID);
|
||||||
|
@@ -48,7 +48,7 @@ public:
|
|||||||
virtual void Commit() = 0;
|
virtual void Commit() = 0;
|
||||||
virtual bool GetAutoCommit() = 0;
|
virtual bool GetAutoCommit() = 0;
|
||||||
virtual void SetAutoCommit(bool value) = 0;
|
virtual void SetAutoCommit(bool value) = 0;
|
||||||
virtual void DeleteCharacter(const uint32_t characterId) = 0;
|
virtual void DeleteCharacter(const LWOOBJID characterId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__GAMEDATABASE__H__
|
#endif //!__GAMEDATABASE__H__
|
||||||
|
@@ -14,7 +14,7 @@ enum class eActivityType : uint32_t {
|
|||||||
class IActivityLog {
|
class IActivityLog {
|
||||||
public:
|
public:
|
||||||
// Update the activity log for the given account.
|
// Update the activity log for the given account.
|
||||||
virtual void UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) = 0;
|
virtual void UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__IACTIVITYLOG__H__
|
#endif //!__IACTIVITYLOG__H__
|
||||||
|
@@ -9,7 +9,7 @@ class IBehaviors {
|
|||||||
public:
|
public:
|
||||||
struct Info {
|
struct Info {
|
||||||
LWOOBJID behaviorId{};
|
LWOOBJID behaviorId{};
|
||||||
uint32_t characterId{};
|
LWOOBJID characterId{};
|
||||||
std::string behaviorInfo;
|
std::string behaviorInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@ public:
|
|||||||
std::string clientVersion;
|
std::string clientVersion;
|
||||||
std::string otherPlayer;
|
std::string otherPlayer;
|
||||||
std::string selection;
|
std::string selection;
|
||||||
uint32_t characterId{};
|
LWOOBJID characterId{};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add a new bug report to the database.
|
// Add a new bug report to the database.
|
||||||
|
@@ -14,7 +14,7 @@ public:
|
|||||||
struct Info {
|
struct Info {
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string pendingName;
|
std::string pendingName;
|
||||||
uint32_t id{};
|
LWOOBJID id{};
|
||||||
uint32_t accountId{};
|
uint32_t accountId{};
|
||||||
bool needsRename{};
|
bool needsRename{};
|
||||||
LWOCLONEID cloneId{};
|
LWOCLONEID cloneId{};
|
||||||
@@ -25,25 +25,25 @@ public:
|
|||||||
virtual std::vector<std::string> GetApprovedCharacterNames() = 0;
|
virtual std::vector<std::string> GetApprovedCharacterNames() = 0;
|
||||||
|
|
||||||
// Get the character info for the given character id.
|
// Get the character info for the given character id.
|
||||||
virtual std::optional<ICharInfo::Info> GetCharacterInfo(const uint32_t charId) = 0;
|
virtual std::optional<ICharInfo::Info> GetCharacterInfo(const LWOOBJID charId) = 0;
|
||||||
|
|
||||||
// Get the character info for the given character name.
|
// Get the character info for the given character name.
|
||||||
virtual std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view name) = 0;
|
virtual std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view name) = 0;
|
||||||
|
|
||||||
// Get the character ids for the given account.
|
// Get the character ids for the given account.
|
||||||
virtual std::vector<uint32_t> GetAccountCharacterIds(const uint32_t accountId) = 0;
|
virtual std::vector<LWOOBJID> GetAccountCharacterIds(const LWOOBJID accountId) = 0;
|
||||||
|
|
||||||
// Insert a new character into the database.
|
// Insert a new character into the database.
|
||||||
virtual void InsertNewCharacter(const ICharInfo::Info info) = 0;
|
virtual void InsertNewCharacter(const ICharInfo::Info info) = 0;
|
||||||
|
|
||||||
// Set the name of the given character.
|
// Set the name of the given character.
|
||||||
virtual void SetCharacterName(const uint32_t characterId, const std::string_view name) = 0;
|
virtual void SetCharacterName(const LWOOBJID characterId, const std::string_view name) = 0;
|
||||||
|
|
||||||
// Set the pending name of the given character.
|
// Set the pending name of the given character.
|
||||||
virtual void SetPendingCharacterName(const uint32_t characterId, const std::string_view name) = 0;
|
virtual void SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) = 0;
|
||||||
|
|
||||||
// Updates the given character ids last login to be right now.
|
// Updates the given character ids last login to be right now.
|
||||||
virtual void UpdateLastLoggedInCharacter(const uint32_t characterId) = 0;
|
virtual void UpdateLastLoggedInCharacter(const LWOOBJID characterId) = 0;
|
||||||
|
|
||||||
virtual bool IsNameInUse(const std::string_view name) = 0;
|
virtual bool IsNameInUse(const std::string_view name) = 0;
|
||||||
};
|
};
|
||||||
|
@@ -8,13 +8,13 @@
|
|||||||
class ICharXml {
|
class ICharXml {
|
||||||
public:
|
public:
|
||||||
// Get the character xml for the given character id.
|
// Get the character xml for the given character id.
|
||||||
virtual std::string GetCharacterXml(const uint32_t charId) = 0;
|
virtual std::string GetCharacterXml(const LWOOBJID charId) = 0;
|
||||||
|
|
||||||
// Update the character xml for the given character id.
|
// Update the character xml for the given character id.
|
||||||
virtual void UpdateCharacterXml(const uint32_t charId, const std::string_view lxfml) = 0;
|
virtual void UpdateCharacterXml(const LWOOBJID charId, const std::string_view lxfml) = 0;
|
||||||
|
|
||||||
// Insert the character xml for the given character id.
|
// Insert the character xml for the given character id.
|
||||||
virtual void InsertCharacterXml(const uint32_t characterId, const std::string_view lxfml) = 0;
|
virtual void InsertCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__ICHARXML__H__
|
#endif //!__ICHARXML__H__
|
||||||
|
@@ -8,7 +8,7 @@ class ICommandLog {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
// Insert a new slash command log entry.
|
// Insert a new slash command log entry.
|
||||||
virtual void InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) = 0;
|
virtual void InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__ICOMMANDLOG__H__
|
#endif //!__ICOMMANDLOG__H__
|
||||||
|
@@ -8,25 +8,25 @@
|
|||||||
class IFriends {
|
class IFriends {
|
||||||
public:
|
public:
|
||||||
struct BestFriendStatus {
|
struct BestFriendStatus {
|
||||||
uint32_t playerCharacterId{};
|
LWOOBJID playerCharacterId{};
|
||||||
uint32_t friendCharacterId{};
|
LWOOBJID friendCharacterId{};
|
||||||
uint32_t bestFriendStatus{};
|
uint32_t bestFriendStatus{};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get the friends list for the given character id.
|
// Get the friends list for the given character id.
|
||||||
virtual std::vector<FriendData> GetFriendsList(const uint32_t charId) = 0;
|
virtual std::vector<FriendData> GetFriendsList(const LWOOBJID charId) = 0;
|
||||||
|
|
||||||
// Get the best friend status for the given player and friend character ids.
|
// Get the best friend status for the given player and friend character ids.
|
||||||
virtual std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) = 0;
|
virtual std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) = 0;
|
||||||
|
|
||||||
// Set the best friend status for the given player and friend character ids.
|
// Set the best friend status for the given player and friend character ids.
|
||||||
virtual void SetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId, const uint32_t bestFriendStatus) = 0;
|
virtual void SetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId, const uint32_t bestFriendStatus) = 0;
|
||||||
|
|
||||||
// Add a friend to the given character id.
|
// Add a friend to the given character id.
|
||||||
virtual void AddFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) = 0;
|
virtual void AddFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) = 0;
|
||||||
|
|
||||||
// Remove a friend from the given character id.
|
// Remove a friend from the given character id.
|
||||||
virtual void RemoveFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) = 0;
|
virtual void RemoveFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__IFRIENDS__H__
|
#endif //!__IFRIENDS__H__
|
||||||
|
@@ -9,12 +9,12 @@ class IIgnoreList {
|
|||||||
public:
|
public:
|
||||||
struct Info {
|
struct Info {
|
||||||
std::string name;
|
std::string name;
|
||||||
uint32_t id;
|
LWOOBJID id;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual std::vector<Info> GetIgnoreList(const uint32_t playerId) = 0;
|
virtual std::vector<Info> GetIgnoreList(const LWOOBJID playerId) = 0;
|
||||||
virtual void AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) = 0;
|
virtual void AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) = 0;
|
||||||
virtual void RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) = 0;
|
virtual void RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__IIGNORELIST__H__
|
#endif //!__IIGNORELIST__H__
|
||||||
|
@@ -5,12 +5,13 @@
|
|||||||
#include <optional>
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "dCommonVars.h"
|
||||||
|
|
||||||
class ILeaderboard {
|
class ILeaderboard {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
struct Entry {
|
struct Entry {
|
||||||
uint32_t charId{};
|
LWOOBJID charId{};
|
||||||
uint32_t lastPlayedTimestamp{};
|
uint32_t lastPlayedTimestamp{};
|
||||||
float primaryScore{};
|
float primaryScore{};
|
||||||
float secondaryScore{};
|
float secondaryScore{};
|
||||||
@@ -36,12 +37,12 @@ public:
|
|||||||
virtual std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) = 0;
|
virtual std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) = 0;
|
||||||
virtual std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) = 0;
|
virtual std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) = 0;
|
||||||
virtual std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) = 0;
|
virtual std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) = 0;
|
||||||
virtual std::optional<Score> GetPlayerScore(const uint32_t playerId, const uint32_t gameId) = 0;
|
virtual std::optional<Score> GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) = 0;
|
||||||
|
|
||||||
virtual void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0;
|
virtual void SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) = 0;
|
||||||
virtual void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0;
|
virtual void UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) = 0;
|
||||||
virtual void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) = 0;
|
virtual void IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) = 0;
|
||||||
virtual void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) = 0;
|
virtual void IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //!__ILEADERBOARD__H__
|
#endif //!__ILEADERBOARD__H__
|
||||||
|
@@ -16,13 +16,13 @@ public:
|
|||||||
virtual void InsertNewMail(const MailInfo& mail) = 0;
|
virtual void InsertNewMail(const MailInfo& mail) = 0;
|
||||||
|
|
||||||
// Get the mail for the given character id.
|
// Get the mail for the given character id.
|
||||||
virtual std::vector<MailInfo> GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) = 0;
|
virtual std::vector<MailInfo> GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) = 0;
|
||||||
|
|
||||||
// Get the mail for the given mail id.
|
// Get the mail for the given mail id.
|
||||||
virtual std::optional<MailInfo> GetMail(const uint64_t mailId) = 0;
|
virtual std::optional<MailInfo> GetMail(const uint64_t mailId) = 0;
|
||||||
|
|
||||||
// Get the number of unread mail for the given character id.
|
// Get the number of unread mail for the given character id.
|
||||||
virtual uint32_t GetUnreadMailCount(const uint32_t characterId) = 0;
|
virtual uint32_t GetUnreadMailCount(const LWOOBJID characterId) = 0;
|
||||||
|
|
||||||
// Mark the given mail as read.
|
// Mark the given mail as read.
|
||||||
virtual void MarkMailRead(const uint64_t mailId) = 0;
|
virtual void MarkMailRead(const uint64_t mailId) = 0;
|
||||||
|
@@ -13,7 +13,7 @@ public:
|
|||||||
std::string description;
|
std::string description;
|
||||||
std::string rejectionReason;
|
std::string rejectionReason;
|
||||||
LWOOBJID id{};
|
LWOOBJID id{};
|
||||||
uint32_t ownerId{};
|
LWOOBJID ownerId{};
|
||||||
LWOCLONEID cloneId{};
|
LWOCLONEID cloneId{};
|
||||||
int32_t privacyOption{};
|
int32_t privacyOption{};
|
||||||
uint32_t modApproved{};
|
uint32_t modApproved{};
|
||||||
@@ -27,7 +27,7 @@ public:
|
|||||||
uint32_t mapId{};
|
uint32_t mapId{};
|
||||||
std::string searchString;
|
std::string searchString;
|
||||||
ePropertySortType sortChoice{};
|
ePropertySortType sortChoice{};
|
||||||
uint32_t playerId{};
|
LWOOBJID playerId{};
|
||||||
uint32_t numResults{};
|
uint32_t numResults{};
|
||||||
uint32_t startIndex{};
|
uint32_t startIndex{};
|
||||||
uint32_t playerSort{};
|
uint32_t playerSort{};
|
||||||
|
@@ -25,7 +25,7 @@ public:
|
|||||||
std::stringstream& sd0Data,
|
std::stringstream& sd0Data,
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) = 0;
|
const LWOOBJID characterId) = 0;
|
||||||
|
|
||||||
// Get the property models for the given property id.
|
// Get the property models for the given property id.
|
||||||
virtual std::vector<IPropertyContents::Model> GetPropertyModels(const LWOOBJID& propertyId) = 0;
|
virtual std::vector<IPropertyContents::Model> GetPropertyModels(const LWOOBJID& propertyId) = 0;
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
class IUgcModularBuild {
|
class IUgcModularBuild {
|
||||||
public:
|
public:
|
||||||
virtual void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) = 0;
|
virtual void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) = 0;
|
||||||
virtual void DeleteUgcBuild(const LWOOBJID bigId) = 0;
|
virtual void DeleteUgcBuild(const LWOOBJID bigId) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -100,7 +100,7 @@ void MySQLDatabase::SetAutoCommit(bool value) {
|
|||||||
con->setAutoCommit(value);
|
con->setAutoCommit(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::DeleteCharacter(const uint32_t characterId) {
|
void MySQLDatabase::DeleteCharacter(const LWOOBJID characterId) {
|
||||||
ExecuteDelete("DELETE FROM charxml WHERE id=? LIMIT 1;", characterId);
|
ExecuteDelete("DELETE FROM charxml WHERE id=? LIMIT 1;", characterId);
|
||||||
ExecuteDelete("DELETE FROM command_log WHERE character_id=?;", characterId);
|
ExecuteDelete("DELETE FROM command_log WHERE character_id=?;", characterId);
|
||||||
ExecuteDelete("DELETE FROM friends WHERE player_id=? OR friend_id=?;", characterId, characterId);
|
ExecuteDelete("DELETE FROM friends WHERE player_id=? OR friend_id=?;", characterId, characterId);
|
||||||
|
@@ -40,31 +40,31 @@ public:
|
|||||||
|
|
||||||
std::vector<std::string> GetApprovedCharacterNames() override;
|
std::vector<std::string> GetApprovedCharacterNames() override;
|
||||||
|
|
||||||
std::vector<FriendData> GetFriendsList(uint32_t charID) override;
|
std::vector<FriendData> GetFriendsList(LWOOBJID charID) override;
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) override;
|
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) override;
|
||||||
void SetBestFriendStatus(const uint32_t playerAccountId, const uint32_t friendAccountId, const uint32_t bestFriendStatus) override;
|
void SetBestFriendStatus(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId, const uint32_t bestFriendStatus) override;
|
||||||
void AddFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void AddFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void RemoveFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void RemoveFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
void UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
||||||
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
||||||
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
||||||
std::vector<IUgc::Model> GetAllUgcModels() override;
|
std::vector<IUgc::Model> GetAllUgcModels() override;
|
||||||
void CreateMigrationHistoryTable() override;
|
void CreateMigrationHistoryTable() override;
|
||||||
bool IsMigrationRun(const std::string_view str) override;
|
bool IsMigrationRun(const std::string_view str) override;
|
||||||
void InsertMigration(const std::string_view str) override;
|
void InsertMigration(const std::string_view str) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const uint32_t charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const LWOOBJID charId) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
||||||
std::string GetCharacterXml(const uint32_t accountId) override;
|
std::string GetCharacterXml(const LWOOBJID accountId) override;
|
||||||
void UpdateCharacterXml(const uint32_t characterId, const std::string_view lxfml) override;
|
void UpdateCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) override;
|
||||||
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
||||||
void InsertNewCharacter(const ICharInfo::Info info) override;
|
void InsertNewCharacter(const ICharInfo::Info info) override;
|
||||||
void InsertCharacterXml(const uint32_t accountId, const std::string_view lxfml) override;
|
void InsertCharacterXml(const LWOOBJID accountId, const std::string_view lxfml) override;
|
||||||
std::vector<uint32_t> GetAccountCharacterIds(uint32_t accountId) override;
|
std::vector<LWOOBJID> GetAccountCharacterIds(LWOOBJID accountId) override;
|
||||||
void DeleteCharacter(const uint32_t characterId) override;
|
void DeleteCharacter(const LWOOBJID characterId) override;
|
||||||
void SetCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void SetPendingCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void UpdateLastLoggedInCharacter(const uint32_t characterId) override;
|
void UpdateLastLoggedInCharacter(const LWOOBJID characterId) override;
|
||||||
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
||||||
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
||||||
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
||||||
@@ -85,14 +85,14 @@ public:
|
|||||||
std::stringstream& sd0Data,
|
std::stringstream& sd0Data,
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) override;
|
const LWOOBJID characterId) override;
|
||||||
std::vector<MailInfo> GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) override;
|
std::vector<MailInfo> GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) override;
|
||||||
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
||||||
uint32_t GetUnreadMailCount(const uint32_t characterId) override;
|
uint32_t GetUnreadMailCount(const LWOOBJID characterId) override;
|
||||||
void MarkMailRead(const uint64_t mailId) override;
|
void MarkMailRead(const uint64_t mailId) override;
|
||||||
void DeleteMail(const uint64_t mailId) override;
|
void DeleteMail(const uint64_t mailId) override;
|
||||||
void ClaimMailItem(const uint64_t mailId) override;
|
void ClaimMailItem(const uint64_t mailId) override;
|
||||||
void InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) override;
|
void InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) override;
|
||||||
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
||||||
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
||||||
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
||||||
@@ -104,9 +104,9 @@ public:
|
|||||||
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
||||||
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
||||||
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
||||||
void AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
void RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
std::vector<IIgnoreList::Info> GetIgnoreList(const uint32_t playerId) override;
|
std::vector<IIgnoreList::Info> GetIgnoreList(const LWOOBJID playerId) override;
|
||||||
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
||||||
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
||||||
void AddBehavior(const IBehaviors::Info& info) override;
|
void AddBehavior(const IBehaviors::Info& info) override;
|
||||||
@@ -118,12 +118,12 @@ public:
|
|||||||
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override;
|
||||||
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override;
|
||||||
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override;
|
||||||
void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override;
|
void SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override;
|
||||||
void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override;
|
void UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override;
|
||||||
std::optional<ILeaderboard::Score> GetPlayerScore(const uint32_t playerId, const uint32_t gameId) override;
|
std::optional<ILeaderboard::Score> GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) override;
|
void IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) override;
|
void IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) override;
|
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) override;
|
||||||
void DeleteUgcBuild(const LWOOBJID bigId) override;
|
void DeleteUgcBuild(const LWOOBJID bigId) override;
|
||||||
uint32_t GetAccountCount() override;
|
uint32_t GetAccountCount() override;
|
||||||
bool IsNameInUse(const std::string_view name) override;
|
bool IsNameInUse(const std::string_view name) override;
|
||||||
@@ -268,4 +268,15 @@ inline void SetParam(UniquePreppedStmtRef stmt, const int index, const std::opti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void SetParam(UniquePreppedStmtRef stmt, const int index, const std::optional<LWOOBJID> param) {
|
||||||
|
if (param) {
|
||||||
|
// LOG("%d", param.value());
|
||||||
|
stmt->setInt64(index, param.value());
|
||||||
|
} else {
|
||||||
|
// LOG("Null");
|
||||||
|
stmt->setNull(index, sql::DataType::SQLNULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif //!__MYSQLDATABASE__H__
|
#endif //!__MYSQLDATABASE__H__
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
void MySQLDatabase::UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
void MySQLDatabase::UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
||||||
ExecuteInsert("INSERT INTO activity_log (character_id, activity, time, map_id) VALUES (?, ?, ?, ?);",
|
ExecuteInsert("INSERT INTO activity_log (character_id, activity, time, map_id) VALUES (?, ?, ?, ?);",
|
||||||
characterId, static_cast<uint32_t>(activityType), static_cast<uint32_t>(time(NULL)), mapId);
|
characterId, static_cast<uint32_t>(activityType), static_cast<uint32_t>(time(NULL)), mapId);
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ std::optional<ICharInfo::Info> CharInfoFromQueryResult(std::unique_ptr<sql::Resu
|
|||||||
|
|
||||||
ICharInfo::Info toReturn;
|
ICharInfo::Info toReturn;
|
||||||
|
|
||||||
toReturn.id = stmt->getUInt("id");
|
toReturn.id = stmt->getInt64("id");
|
||||||
toReturn.name = stmt->getString("name").c_str();
|
toReturn.name = stmt->getString("name").c_str();
|
||||||
toReturn.pendingName = stmt->getString("pending_name").c_str();
|
toReturn.pendingName = stmt->getString("pending_name").c_str();
|
||||||
toReturn.needsRename = stmt->getBoolean("needs_rename");
|
toReturn.needsRename = stmt->getBoolean("needs_rename");
|
||||||
@@ -30,7 +30,7 @@ std::optional<ICharInfo::Info> CharInfoFromQueryResult(std::unique_ptr<sql::Resu
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<ICharInfo::Info> MySQLDatabase::GetCharacterInfo(const uint32_t charId) {
|
std::optional<ICharInfo::Info> MySQLDatabase::GetCharacterInfo(const LWOOBJID charId) {
|
||||||
return CharInfoFromQueryResult(
|
return CharInfoFromQueryResult(
|
||||||
ExecuteSelect("SELECT name, pending_name, needs_rename, prop_clone_id, permission_map, id, account_id FROM charinfo WHERE id = ? LIMIT 1;", charId)
|
ExecuteSelect("SELECT name, pending_name, needs_rename, prop_clone_id, permission_map, id, account_id FROM charinfo WHERE id = ? LIMIT 1;", charId)
|
||||||
);
|
);
|
||||||
@@ -42,13 +42,13 @@ std::optional<ICharInfo::Info> MySQLDatabase::GetCharacterInfo(const std::string
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint32_t> MySQLDatabase::GetAccountCharacterIds(const uint32_t accountId) {
|
std::vector<LWOOBJID> MySQLDatabase::GetAccountCharacterIds(const LWOOBJID accountId) {
|
||||||
auto result = ExecuteSelect("SELECT id FROM charinfo WHERE account_id = ? ORDER BY last_login DESC LIMIT 4;", accountId);
|
auto result = ExecuteSelect("SELECT id FROM charinfo WHERE account_id = ? ORDER BY last_login DESC LIMIT 4;", accountId);
|
||||||
|
|
||||||
std::vector<uint32_t> toReturn;
|
std::vector<LWOOBJID> toReturn;
|
||||||
toReturn.reserve(result->rowsCount());
|
toReturn.reserve(result->rowsCount());
|
||||||
while (result->next()) {
|
while (result->next()) {
|
||||||
toReturn.push_back(result->getUInt("id"));
|
toReturn.push_back(result->getInt64("id"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
@@ -65,15 +65,15 @@ void MySQLDatabase::InsertNewCharacter(const ICharInfo::Info info) {
|
|||||||
static_cast<uint32_t>(time(NULL)));
|
static_cast<uint32_t>(time(NULL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::SetCharacterName(const uint32_t characterId, const std::string_view name) {
|
void MySQLDatabase::SetCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET name = ?, pending_name = '', needs_rename = 0, last_login = ? WHERE id = ? LIMIT 1;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET name = ?, pending_name = '', needs_rename = 0, last_login = ? WHERE id = ? LIMIT 1;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::SetPendingCharacterName(const uint32_t characterId, const std::string_view name) {
|
void MySQLDatabase::SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET pending_name = ?, needs_rename = 0, last_login = ? WHERE id = ? LIMIT 1", name, static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET pending_name = ?, needs_rename = 0, last_login = ? WHERE id = ? LIMIT 1", name, static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::UpdateLastLoggedInCharacter(const uint32_t characterId) {
|
void MySQLDatabase::UpdateLastLoggedInCharacter(const LWOOBJID characterId) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET last_login = ? WHERE id = ? LIMIT 1", static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET last_login = ? WHERE id = ? LIMIT 1", static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
std::string MySQLDatabase::GetCharacterXml(const uint32_t charId) {
|
std::string MySQLDatabase::GetCharacterXml(const LWOOBJID charId) {
|
||||||
auto result = ExecuteSelect("SELECT xml_data FROM charxml WHERE id = ? LIMIT 1;", charId);
|
auto result = ExecuteSelect("SELECT xml_data FROM charxml WHERE id = ? LIMIT 1;", charId);
|
||||||
|
|
||||||
if (!result->next()) {
|
if (!result->next()) {
|
||||||
@@ -10,10 +10,10 @@ std::string MySQLDatabase::GetCharacterXml(const uint32_t charId) {
|
|||||||
return result->getString("xml_data").c_str();
|
return result->getString("xml_data").c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::UpdateCharacterXml(const uint32_t charId, const std::string_view lxfml) {
|
void MySQLDatabase::UpdateCharacterXml(const LWOOBJID charId, const std::string_view lxfml) {
|
||||||
ExecuteUpdate("UPDATE charxml SET xml_data = ? WHERE id = ?;", lxfml, charId);
|
ExecuteUpdate("UPDATE charxml SET xml_data = ? WHERE id = ?;", lxfml, charId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::InsertCharacterXml(const uint32_t characterId, const std::string_view lxfml) {
|
void MySQLDatabase::InsertCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) {
|
||||||
ExecuteInsert("INSERT INTO `charxml` (`id`, `xml_data`) VALUES (?,?)", characterId, lxfml);
|
ExecuteInsert("INSERT INTO `charxml` (`id`, `xml_data`) VALUES (?,?)", characterId, lxfml);
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
void MySQLDatabase::InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) {
|
void MySQLDatabase::InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) {
|
||||||
ExecuteInsert("INSERT INTO command_log (character_id, command) VALUES (?, ?);", characterId, command);
|
ExecuteInsert("INSERT INTO command_log (character_id, command) VALUES (?, ?);", characterId, command);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
std::vector<FriendData> MySQLDatabase::GetFriendsList(const uint32_t charId) {
|
std::vector<FriendData> MySQLDatabase::GetFriendsList(const LWOOBJID charId) {
|
||||||
auto friendsList = ExecuteSelect(
|
auto friendsList = ExecuteSelect(
|
||||||
R"QUERY(
|
R"QUERY(
|
||||||
SELECT fr.requested_player AS player, best_friend AS bff, ci.name AS name FROM
|
SELECT fr.requested_player AS player, best_friend AS bff, ci.name AS name FROM
|
||||||
@@ -19,7 +19,7 @@ std::vector<FriendData> MySQLDatabase::GetFriendsList(const uint32_t charId) {
|
|||||||
|
|
||||||
while (friendsList->next()) {
|
while (friendsList->next()) {
|
||||||
FriendData fd;
|
FriendData fd;
|
||||||
fd.friendID = friendsList->getUInt("player");
|
fd.friendID = friendsList->getUInt64("player");
|
||||||
fd.isBestFriend = friendsList->getInt("bff") == 3; // 0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
fd.isBestFriend = friendsList->getInt("bff") == 3; // 0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
||||||
fd.friendName = friendsList->getString("name").c_str();
|
fd.friendName = friendsList->getString("name").c_str();
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ std::vector<FriendData> MySQLDatabase::GetFriendsList(const uint32_t charId) {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> MySQLDatabase::GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
std::optional<IFriends::BestFriendStatus> MySQLDatabase::GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
auto result = ExecuteSelect("SELECT * FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
auto result = ExecuteSelect("SELECT * FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
friendCharacterId,
|
friendCharacterId,
|
||||||
@@ -42,14 +42,14 @@ std::optional<IFriends::BestFriendStatus> MySQLDatabase::GetBestFriendStatus(con
|
|||||||
}
|
}
|
||||||
|
|
||||||
IFriends::BestFriendStatus toReturn;
|
IFriends::BestFriendStatus toReturn;
|
||||||
toReturn.playerCharacterId = result->getUInt("player_id");
|
toReturn.playerCharacterId = result->getUInt64("player_id");
|
||||||
toReturn.friendCharacterId = result->getUInt("friend_id");
|
toReturn.friendCharacterId = result->getUInt64("friend_id");
|
||||||
toReturn.bestFriendStatus = result->getUInt("best_friend");
|
toReturn.bestFriendStatus = result->getUInt("best_friend");
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::SetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId, const uint32_t bestFriendStatus) {
|
void MySQLDatabase::SetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId, const uint32_t bestFriendStatus) {
|
||||||
ExecuteUpdate("UPDATE friends SET best_friend = ? WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
ExecuteUpdate("UPDATE friends SET best_friend = ? WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
||||||
bestFriendStatus,
|
bestFriendStatus,
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
@@ -59,11 +59,11 @@ void MySQLDatabase::SetBestFriendStatus(const uint32_t playerCharacterId, const
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::AddFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
void MySQLDatabase::AddFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
ExecuteInsert("INSERT IGNORE INTO friends (player_id, friend_id, best_friend) VALUES (?, ?, 0);", playerCharacterId, friendCharacterId);
|
ExecuteInsert("INSERT IGNORE INTO friends (player_id, friend_id, best_friend) VALUES (?, ?, 0);", playerCharacterId, friendCharacterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::RemoveFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
void MySQLDatabase::RemoveFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
ExecuteDelete("DELETE FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
ExecuteDelete("DELETE FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
friendCharacterId,
|
friendCharacterId,
|
||||||
|
@@ -1,22 +1,22 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
std::vector<IIgnoreList::Info> MySQLDatabase::GetIgnoreList(const uint32_t playerId) {
|
std::vector<IIgnoreList::Info> MySQLDatabase::GetIgnoreList(const LWOOBJID playerId) {
|
||||||
auto result = ExecuteSelect("SELECT ci.name AS name, il.ignored_player_id AS ignore_id FROM ignore_list AS il JOIN charinfo AS ci ON il.ignored_player_id = ci.id WHERE il.player_id = ?", playerId);
|
auto result = ExecuteSelect("SELECT ci.name AS name, il.ignored_player_id AS ignore_id FROM ignore_list AS il JOIN charinfo AS ci ON il.ignored_player_id = ci.id WHERE il.player_id = ?", playerId);
|
||||||
|
|
||||||
std::vector<IIgnoreList::Info> ignoreList;
|
std::vector<IIgnoreList::Info> ignoreList;
|
||||||
|
|
||||||
ignoreList.reserve(result->rowsCount());
|
ignoreList.reserve(result->rowsCount());
|
||||||
while (result->next()) {
|
while (result->next()) {
|
||||||
ignoreList.push_back(IIgnoreList::Info{ result->getString("name").c_str(), result->getUInt("ignore_id") });
|
ignoreList.push_back(IIgnoreList::Info{ result->getString("name").c_str(), result->getInt64("ignore_id") });
|
||||||
}
|
}
|
||||||
|
|
||||||
return ignoreList;
|
return ignoreList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void MySQLDatabase::AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
ExecuteInsert("INSERT IGNORE INTO ignore_list (player_id, ignored_player_id) VALUES (?, ?)", playerId, ignoredPlayerId);
|
ExecuteInsert("INSERT IGNORE INTO ignore_list (player_id, ignored_player_id) VALUES (?, ?)", playerId, ignoredPlayerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void MySQLDatabase::RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
ExecuteDelete("DELETE FROM ignore_list WHERE player_id = ? AND ignored_player_id = ?", playerId, ignoredPlayerId);
|
ExecuteDelete("DELETE FROM ignore_list WHERE player_id = ? AND ignored_player_id = ?", playerId, ignoredPlayerId);
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@ std::vector<ILeaderboard::Entry> ProcessQuery(UniqueResultSet& rows) {
|
|||||||
while (rows->next()) {
|
while (rows->next()) {
|
||||||
auto& entry = entries.emplace_back();
|
auto& entry = entries.emplace_back();
|
||||||
|
|
||||||
entry.charId = rows->getUInt("character_id");
|
entry.charId = rows->getUInt64("character_id");
|
||||||
entry.lastPlayedTimestamp = rows->getUInt("lp_unix");
|
entry.lastPlayedTimestamp = rows->getUInt("lp_unix");
|
||||||
entry.primaryScore = rows->getFloat("primaryScore");
|
entry.primaryScore = rows->getFloat("primaryScore");
|
||||||
entry.secondaryScore = rows->getFloat("secondaryScore");
|
entry.secondaryScore = rows->getFloat("secondaryScore");
|
||||||
@@ -58,21 +58,21 @@ std::vector<ILeaderboard::Entry> MySQLDatabase::GetNsLeaderboard(const uint32_t
|
|||||||
return ProcessQuery(leaderboard);
|
return ProcessQuery(leaderboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) {
|
void MySQLDatabase::SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) {
|
||||||
ExecuteInsert("INSERT leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, character_id = ?, game_id = ?;",
|
ExecuteInsert("INSERT leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, character_id = ?, game_id = ?;",
|
||||||
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) {
|
void MySQLDatabase::UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) {
|
||||||
ExecuteInsert("UPDATE leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;",
|
ExecuteInsert("UPDATE leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;",
|
||||||
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) {
|
void MySQLDatabase::IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
ExecuteUpdate("UPDATE leaderboard SET timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
ExecuteUpdate("UPDATE leaderboard SET timesPlayed = timesPlayed + 1 WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<ILeaderboard::Score> MySQLDatabase::GetPlayerScore(const uint32_t playerId, const uint32_t gameId) {
|
std::optional<ILeaderboard::Score> MySQLDatabase::GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
std::optional<ILeaderboard::Score> toReturn = std::nullopt;
|
std::optional<ILeaderboard::Score> toReturn = std::nullopt;
|
||||||
auto res = ExecuteSelect("SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
auto res = ExecuteSelect("SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
if (res->next()) {
|
if (res->next()) {
|
||||||
@@ -86,6 +86,6 @@ std::optional<ILeaderboard::Score> MySQLDatabase::GetPlayerScore(const uint32_t
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MySQLDatabase::IncrementNumWins(const uint32_t playerId, const uint32_t gameId) {
|
void MySQLDatabase::IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
ExecuteUpdate("UPDATE leaderboard SET numWins = numWins + 1 WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
ExecuteUpdate("UPDATE leaderboard SET numWins = numWins + 1 WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ void MySQLDatabase::InsertNewMail(const MailInfo& mail) {
|
|||||||
mail.itemCount);
|
mail.itemCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MailInfo> MySQLDatabase::GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) {
|
std::vector<MailInfo> MySQLDatabase::GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) {
|
||||||
auto res = ExecuteSelect(
|
auto res = ExecuteSelect(
|
||||||
"SELECT id, subject, body, sender_name, attachment_id, attachment_lot, attachment_subkey, attachment_count, was_read, time_sent"
|
"SELECT id, subject, body, sender_name, attachment_id, attachment_lot, attachment_subkey, attachment_count, was_read, time_sent"
|
||||||
" FROM mail WHERE receiver_id=? limit ?;",
|
" FROM mail WHERE receiver_id=? limit ?;",
|
||||||
@@ -61,7 +61,7 @@ std::optional<MailInfo> MySQLDatabase::GetMail(const uint64_t mailId) {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t MySQLDatabase::GetUnreadMailCount(const uint32_t characterId) {
|
uint32_t MySQLDatabase::GetUnreadMailCount(const LWOOBJID characterId) {
|
||||||
auto res = ExecuteSelect("SELECT COUNT(*) AS number_unread FROM mail WHERE receiver_id=? AND was_read=0;", characterId);
|
auto res = ExecuteSelect("SELECT COUNT(*) AS number_unread FROM mail WHERE receiver_id=? AND was_read=0;", characterId);
|
||||||
|
|
||||||
if (!res->next()) {
|
if (!res->next()) {
|
||||||
|
@@ -119,7 +119,7 @@ std::optional<IProperty::PropertyEntranceResult> MySQLDatabase::GetProperties(co
|
|||||||
if (!result) result = IProperty::PropertyEntranceResult();
|
if (!result) result = IProperty::PropertyEntranceResult();
|
||||||
auto& entry = result->entries.emplace_back();
|
auto& entry = result->entries.emplace_back();
|
||||||
entry.id = properties->getUInt64("id");
|
entry.id = properties->getUInt64("id");
|
||||||
entry.ownerId = properties->getUInt64("owner_id");
|
entry.ownerId = properties->getInt64("owner_id");
|
||||||
entry.cloneId = properties->getUInt64("clone_id");
|
entry.cloneId = properties->getUInt64("clone_id");
|
||||||
entry.name = properties->getString("name").c_str();
|
entry.name = properties->getString("name").c_str();
|
||||||
entry.description = properties->getString("description").c_str();
|
entry.description = properties->getString("description").c_str();
|
||||||
@@ -146,7 +146,7 @@ std::optional<IProperty::Info> MySQLDatabase::GetPropertyInfo(const LWOMAPID map
|
|||||||
|
|
||||||
IProperty::Info toReturn;
|
IProperty::Info toReturn;
|
||||||
toReturn.id = propertyEntry->getUInt64("id");
|
toReturn.id = propertyEntry->getUInt64("id");
|
||||||
toReturn.ownerId = propertyEntry->getUInt64("owner_id");
|
toReturn.ownerId = propertyEntry->getInt64("owner_id");
|
||||||
toReturn.cloneId = propertyEntry->getUInt64("clone_id");
|
toReturn.cloneId = propertyEntry->getUInt64("clone_id");
|
||||||
toReturn.name = propertyEntry->getString("name").c_str();
|
toReturn.name = propertyEntry->getString("name").c_str();
|
||||||
toReturn.description = propertyEntry->getString("description").c_str();
|
toReturn.description = propertyEntry->getString("description").c_str();
|
||||||
|
@@ -48,7 +48,7 @@ void MySQLDatabase::InsertNewUgcModel(
|
|||||||
std:: stringstream& sd0Data, // cant be const sad
|
std:: stringstream& sd0Data, // cant be const sad
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) {
|
const LWOOBJID characterId) {
|
||||||
const std::istream stream(sd0Data.rdbuf());
|
const std::istream stream(sd0Data.rdbuf());
|
||||||
ExecuteInsert(
|
ExecuteInsert(
|
||||||
"INSERT INTO `ugc`(`id`, `account_id`, `character_id`, `is_optimized`, `lxfml`, `bake_ao`, `filename`) VALUES (?,?,?,?,?,?,?)",
|
"INSERT INTO `ugc`(`id`, `account_id`, `character_id`, `is_optimized`, `lxfml`, `bake_ao`, `filename`) VALUES (?,?,?,?,?,?,?)",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "MySQLDatabase.h"
|
#include "MySQLDatabase.h"
|
||||||
|
|
||||||
void MySQLDatabase::InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) {
|
void MySQLDatabase::InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) {
|
||||||
ExecuteInsert("INSERT INTO ugc_modular_build (ugc_id, ldf_config, character_id) VALUES (?,?,?)", bigId, modules, characterId);
|
ExecuteInsert("INSERT INTO ugc_modular_build (ugc_id, ldf_config, character_id) VALUES (?,?,?)", bigId, modules, characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -67,7 +67,7 @@ void SQLiteDatabase::SetAutoCommit(bool value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::DeleteCharacter(const uint32_t characterId) {
|
void SQLiteDatabase::DeleteCharacter(const LWOOBJID characterId) {
|
||||||
ExecuteDelete("DELETE FROM charxml WHERE id=?;", characterId);
|
ExecuteDelete("DELETE FROM charxml WHERE id=?;", characterId);
|
||||||
ExecuteDelete("DELETE FROM command_log WHERE character_id=?;", characterId);
|
ExecuteDelete("DELETE FROM command_log WHERE character_id=?;", characterId);
|
||||||
ExecuteDelete("DELETE FROM friends WHERE player_id=? OR friend_id=?;", characterId, characterId);
|
ExecuteDelete("DELETE FROM friends WHERE player_id=? OR friend_id=?;", characterId, characterId);
|
||||||
|
@@ -38,31 +38,31 @@ public:
|
|||||||
|
|
||||||
std::vector<std::string> GetApprovedCharacterNames() override;
|
std::vector<std::string> GetApprovedCharacterNames() override;
|
||||||
|
|
||||||
std::vector<FriendData> GetFriendsList(uint32_t charID) override;
|
std::vector<FriendData> GetFriendsList(LWOOBJID charID) override;
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) override;
|
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) override;
|
||||||
void SetBestFriendStatus(const uint32_t playerAccountId, const uint32_t friendAccountId, const uint32_t bestFriendStatus) override;
|
void SetBestFriendStatus(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId, const uint32_t bestFriendStatus) override;
|
||||||
void AddFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void AddFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void RemoveFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void RemoveFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
void UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
||||||
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
||||||
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
||||||
std::vector<IUgc::Model> GetAllUgcModels() override;
|
std::vector<IUgc::Model> GetAllUgcModels() override;
|
||||||
void CreateMigrationHistoryTable() override;
|
void CreateMigrationHistoryTable() override;
|
||||||
bool IsMigrationRun(const std::string_view str) override;
|
bool IsMigrationRun(const std::string_view str) override;
|
||||||
void InsertMigration(const std::string_view str) override;
|
void InsertMigration(const std::string_view str) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const uint32_t charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const LWOOBJID charId) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
||||||
std::string GetCharacterXml(const uint32_t accountId) override;
|
std::string GetCharacterXml(const LWOOBJID accountId) override;
|
||||||
void UpdateCharacterXml(const uint32_t characterId, const std::string_view lxfml) override;
|
void UpdateCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) override;
|
||||||
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
||||||
void InsertNewCharacter(const ICharInfo::Info info) override;
|
void InsertNewCharacter(const ICharInfo::Info info) override;
|
||||||
void InsertCharacterXml(const uint32_t accountId, const std::string_view lxfml) override;
|
void InsertCharacterXml(const LWOOBJID accountId, const std::string_view lxfml) override;
|
||||||
std::vector<uint32_t> GetAccountCharacterIds(uint32_t accountId) override;
|
std::vector<LWOOBJID> GetAccountCharacterIds(LWOOBJID accountId) override;
|
||||||
void DeleteCharacter(const uint32_t characterId) override;
|
void DeleteCharacter(const LWOOBJID characterId) override;
|
||||||
void SetCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void SetPendingCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void UpdateLastLoggedInCharacter(const uint32_t characterId) override;
|
void UpdateLastLoggedInCharacter(const LWOOBJID characterId) override;
|
||||||
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
||||||
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
||||||
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
||||||
@@ -83,14 +83,14 @@ public:
|
|||||||
std::stringstream& sd0Data,
|
std::stringstream& sd0Data,
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) override;
|
const LWOOBJID characterId) override;
|
||||||
std::vector<MailInfo> GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) override;
|
std::vector<MailInfo> GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) override;
|
||||||
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
||||||
uint32_t GetUnreadMailCount(const uint32_t characterId) override;
|
uint32_t GetUnreadMailCount(const LWOOBJID characterId) override;
|
||||||
void MarkMailRead(const uint64_t mailId) override;
|
void MarkMailRead(const uint64_t mailId) override;
|
||||||
void DeleteMail(const uint64_t mailId) override;
|
void DeleteMail(const uint64_t mailId) override;
|
||||||
void ClaimMailItem(const uint64_t mailId) override;
|
void ClaimMailItem(const uint64_t mailId) override;
|
||||||
void InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) override;
|
void InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) override;
|
||||||
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
||||||
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
||||||
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
||||||
@@ -102,9 +102,9 @@ public:
|
|||||||
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
||||||
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
||||||
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
||||||
void AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
void RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
std::vector<IIgnoreList::Info> GetIgnoreList(const uint32_t playerId) override;
|
std::vector<IIgnoreList::Info> GetIgnoreList(const LWOOBJID playerId) override;
|
||||||
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
||||||
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
||||||
void AddBehavior(const IBehaviors::Info& info) override;
|
void AddBehavior(const IBehaviors::Info& info) override;
|
||||||
@@ -116,12 +116,12 @@ public:
|
|||||||
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override;
|
||||||
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override;
|
||||||
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override;
|
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override;
|
||||||
void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override;
|
void SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override;
|
||||||
void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override;
|
void UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override;
|
||||||
std::optional<ILeaderboard::Score> GetPlayerScore(const uint32_t playerId, const uint32_t gameId) override;
|
std::optional<ILeaderboard::Score> GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) override;
|
void IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) override;
|
void IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) override;
|
||||||
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) override;
|
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) override;
|
||||||
void DeleteUgcBuild(const LWOOBJID bigId) override;
|
void DeleteUgcBuild(const LWOOBJID bigId) override;
|
||||||
uint32_t GetAccountCount() override;
|
uint32_t GetAccountCount() override;
|
||||||
bool IsNameInUse(const std::string_view name) override;
|
bool IsNameInUse(const std::string_view name) override;
|
||||||
@@ -270,4 +270,15 @@ inline void SetParam(PreppedStmtRef stmt, const int index, const std::optional<u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void SetParam(PreppedStmtRef stmt, const int index, const std::optional<LWOOBJID> param) {
|
||||||
|
if (param) {
|
||||||
|
LOG("%d", param.value());
|
||||||
|
stmt.bind(index, static_cast<sqlite_int64>(param.value()));
|
||||||
|
} else {
|
||||||
|
LOG("Null");
|
||||||
|
stmt.bindNull(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif //!SQLITEDATABASE_H
|
#endif //!SQLITEDATABASE_H
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
void SQLiteDatabase::UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
void SQLiteDatabase::UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
||||||
ExecuteInsert("INSERT INTO activity_log (character_id, activity, time, map_id) VALUES (?, ?, ?, ?);",
|
ExecuteInsert("INSERT INTO activity_log (character_id, activity, time, map_id) VALUES (?, ?, ?, ?);",
|
||||||
characterId, static_cast<uint32_t>(activityType), static_cast<uint32_t>(time(NULL)), mapId);
|
characterId, static_cast<uint32_t>(activityType), static_cast<uint32_t>(time(NULL)), mapId);
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,7 @@ std::optional<ICharInfo::Info> CharInfoFromQueryResult(CppSQLite3Query stmt) {
|
|||||||
|
|
||||||
ICharInfo::Info toReturn;
|
ICharInfo::Info toReturn;
|
||||||
|
|
||||||
toReturn.id = stmt.getIntField("id");
|
toReturn.id = stmt.getInt64Field("id");
|
||||||
toReturn.name = stmt.getStringField("name");
|
toReturn.name = stmt.getStringField("name");
|
||||||
toReturn.pendingName = stmt.getStringField("pending_name");
|
toReturn.pendingName = stmt.getStringField("pending_name");
|
||||||
toReturn.needsRename = stmt.getIntField("needs_rename");
|
toReturn.needsRename = stmt.getIntField("needs_rename");
|
||||||
@@ -31,7 +31,7 @@ std::optional<ICharInfo::Info> CharInfoFromQueryResult(CppSQLite3Query stmt) {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<ICharInfo::Info> SQLiteDatabase::GetCharacterInfo(const uint32_t charId) {
|
std::optional<ICharInfo::Info> SQLiteDatabase::GetCharacterInfo(const LWOOBJID charId) {
|
||||||
return CharInfoFromQueryResult(
|
return CharInfoFromQueryResult(
|
||||||
ExecuteSelect("SELECT name, pending_name, needs_rename, prop_clone_id, permission_map, id, account_id FROM charinfo WHERE id = ? LIMIT 1;", charId).second
|
ExecuteSelect("SELECT name, pending_name, needs_rename, prop_clone_id, permission_map, id, account_id FROM charinfo WHERE id = ? LIMIT 1;", charId).second
|
||||||
);
|
);
|
||||||
@@ -43,12 +43,12 @@ std::optional<ICharInfo::Info> SQLiteDatabase::GetCharacterInfo(const std::strin
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint32_t> SQLiteDatabase::GetAccountCharacterIds(const uint32_t accountId) {
|
std::vector<LWOOBJID> SQLiteDatabase::GetAccountCharacterIds(const LWOOBJID accountId) {
|
||||||
auto [_, result] = ExecuteSelect("SELECT id FROM charinfo WHERE account_id = ? ORDER BY last_login DESC LIMIT 4;", accountId);
|
auto [_, result] = ExecuteSelect("SELECT id FROM charinfo WHERE account_id = ? ORDER BY last_login DESC LIMIT 4;", accountId);
|
||||||
|
|
||||||
std::vector<uint32_t> toReturn;
|
std::vector<LWOOBJID> toReturn;
|
||||||
while (!result.eof()) {
|
while (!result.eof()) {
|
||||||
toReturn.push_back(result.getIntField("id"));
|
toReturn.push_back(result.getInt64Field("id"));
|
||||||
result.nextRow();
|
result.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,15 +66,15 @@ void SQLiteDatabase::InsertNewCharacter(const ICharInfo::Info info) {
|
|||||||
static_cast<uint32_t>(time(NULL)));
|
static_cast<uint32_t>(time(NULL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::SetCharacterName(const uint32_t characterId, const std::string_view name) {
|
void SQLiteDatabase::SetCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET name = ?, pending_name = '', needs_rename = 0, last_login = ? WHERE id = ?;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET name = ?, pending_name = '', needs_rename = 0, last_login = ? WHERE id = ?;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::SetPendingCharacterName(const uint32_t characterId, const std::string_view name) {
|
void SQLiteDatabase::SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET pending_name = ?, needs_rename = 0, last_login = ? WHERE id = ?;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET pending_name = ?, needs_rename = 0, last_login = ? WHERE id = ?;", name, static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::UpdateLastLoggedInCharacter(const uint32_t characterId) {
|
void SQLiteDatabase::UpdateLastLoggedInCharacter(const LWOOBJID characterId) {
|
||||||
ExecuteUpdate("UPDATE charinfo SET last_login = ? WHERE id = ?;", static_cast<uint32_t>(time(NULL)), characterId);
|
ExecuteUpdate("UPDATE charinfo SET last_login = ? WHERE id = ?;", static_cast<uint32_t>(time(NULL)), characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
std::string SQLiteDatabase::GetCharacterXml(const uint32_t charId) {
|
std::string SQLiteDatabase::GetCharacterXml(const LWOOBJID charId) {
|
||||||
auto [_, result] = ExecuteSelect("SELECT xml_data FROM charxml WHERE id = ? LIMIT 1;", charId);
|
auto [_, result] = ExecuteSelect("SELECT xml_data FROM charxml WHERE id = ? LIMIT 1;", charId);
|
||||||
|
|
||||||
if (result.eof()) {
|
if (result.eof()) {
|
||||||
@@ -10,10 +10,10 @@ std::string SQLiteDatabase::GetCharacterXml(const uint32_t charId) {
|
|||||||
return result.getStringField("xml_data");
|
return result.getStringField("xml_data");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::UpdateCharacterXml(const uint32_t charId, const std::string_view lxfml) {
|
void SQLiteDatabase::UpdateCharacterXml(const LWOOBJID charId, const std::string_view lxfml) {
|
||||||
ExecuteUpdate("UPDATE charxml SET xml_data = ? WHERE id = ?;", lxfml, charId);
|
ExecuteUpdate("UPDATE charxml SET xml_data = ? WHERE id = ?;", lxfml, charId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::InsertCharacterXml(const uint32_t characterId, const std::string_view lxfml) {
|
void SQLiteDatabase::InsertCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) {
|
||||||
ExecuteInsert("INSERT INTO `charxml` (`id`, `xml_data`) VALUES (?,?)", characterId, lxfml);
|
ExecuteInsert("INSERT INTO `charxml` (`id`, `xml_data`) VALUES (?,?)", characterId, lxfml);
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
void SQLiteDatabase::InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) {
|
void SQLiteDatabase::InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) {
|
||||||
ExecuteInsert("INSERT INTO command_log (character_id, command) VALUES (?, ?);", characterId, command);
|
ExecuteInsert("INSERT INTO command_log (character_id, command) VALUES (?, ?);", characterId, command);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
std::vector<FriendData> SQLiteDatabase::GetFriendsList(const uint32_t charId) {
|
std::vector<FriendData> SQLiteDatabase::GetFriendsList(const LWOOBJID charId) {
|
||||||
auto [_, friendsList] = ExecuteSelect(
|
auto [_, friendsList] = ExecuteSelect(
|
||||||
R"QUERY(
|
R"QUERY(
|
||||||
SELECT fr.requested_player AS player, best_friend AS bff, ci.name AS name FROM
|
SELECT fr.requested_player AS player, best_friend AS bff, ci.name AS name FROM
|
||||||
@@ -18,7 +18,7 @@ std::vector<FriendData> SQLiteDatabase::GetFriendsList(const uint32_t charId) {
|
|||||||
|
|
||||||
while (!friendsList.eof()) {
|
while (!friendsList.eof()) {
|
||||||
FriendData fd;
|
FriendData fd;
|
||||||
fd.friendID = friendsList.getIntField("player");
|
fd.friendID = friendsList.getInt64Field("player");
|
||||||
fd.isBestFriend = friendsList.getIntField("bff") == 3; // 0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
fd.isBestFriend = friendsList.getIntField("bff") == 3; // 0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
|
||||||
fd.friendName = friendsList.getStringField("name");
|
fd.friendName = friendsList.getStringField("name");
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ std::vector<FriendData> SQLiteDatabase::GetFriendsList(const uint32_t charId) {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> SQLiteDatabase::GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
std::optional<IFriends::BestFriendStatus> SQLiteDatabase::GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
auto [_, result] = ExecuteSelect("SELECT * FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
auto [_, result] = ExecuteSelect("SELECT * FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;",
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
friendCharacterId,
|
friendCharacterId,
|
||||||
@@ -42,14 +42,14 @@ std::optional<IFriends::BestFriendStatus> SQLiteDatabase::GetBestFriendStatus(co
|
|||||||
}
|
}
|
||||||
|
|
||||||
IFriends::BestFriendStatus toReturn;
|
IFriends::BestFriendStatus toReturn;
|
||||||
toReturn.playerCharacterId = result.getIntField("player_id");
|
toReturn.playerCharacterId = result.getInt64Field("player_id");
|
||||||
toReturn.friendCharacterId = result.getIntField("friend_id");
|
toReturn.friendCharacterId = result.getInt64Field("friend_id");
|
||||||
toReturn.bestFriendStatus = result.getIntField("best_friend");
|
toReturn.bestFriendStatus = result.getIntField("best_friend");
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::SetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId, const uint32_t bestFriendStatus) {
|
void SQLiteDatabase::SetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId, const uint32_t bestFriendStatus) {
|
||||||
ExecuteUpdate("UPDATE friends SET best_friend = ? WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?);",
|
ExecuteUpdate("UPDATE friends SET best_friend = ? WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?);",
|
||||||
bestFriendStatus,
|
bestFriendStatus,
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
@@ -59,11 +59,11 @@ void SQLiteDatabase::SetBestFriendStatus(const uint32_t playerCharacterId, const
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::AddFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
void SQLiteDatabase::AddFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
ExecuteInsert("INSERT OR IGNORE INTO friends (player_id, friend_id, best_friend) VALUES (?, ?, 0);", playerCharacterId, friendCharacterId);
|
ExecuteInsert("INSERT OR IGNORE INTO friends (player_id, friend_id, best_friend) VALUES (?, ?, 0);", playerCharacterId, friendCharacterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::RemoveFriend(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
void SQLiteDatabase::RemoveFriend(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
ExecuteDelete("DELETE FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?);",
|
ExecuteDelete("DELETE FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?);",
|
||||||
playerCharacterId,
|
playerCharacterId,
|
||||||
friendCharacterId,
|
friendCharacterId,
|
||||||
|
@@ -1,22 +1,22 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
std::vector<IIgnoreList::Info> SQLiteDatabase::GetIgnoreList(const uint32_t playerId) {
|
std::vector<IIgnoreList::Info> SQLiteDatabase::GetIgnoreList(const LWOOBJID playerId) {
|
||||||
auto [_, result] = ExecuteSelect("SELECT ci.name AS name, il.ignored_player_id AS ignore_id FROM ignore_list AS il JOIN charinfo AS ci ON il.ignored_player_id = ci.id WHERE il.player_id = ?", playerId);
|
auto [_, result] = ExecuteSelect("SELECT ci.name AS name, il.ignored_player_id AS ignore_id FROM ignore_list AS il JOIN charinfo AS ci ON il.ignored_player_id = ci.id WHERE il.player_id = ?", playerId);
|
||||||
|
|
||||||
std::vector<IIgnoreList::Info> ignoreList;
|
std::vector<IIgnoreList::Info> ignoreList;
|
||||||
|
|
||||||
while (!result.eof()) {
|
while (!result.eof()) {
|
||||||
ignoreList.push_back(IIgnoreList::Info{ result.getStringField("name"), static_cast<uint32_t>(result.getIntField("ignore_id")) });
|
ignoreList.push_back(IIgnoreList::Info{ result.getStringField("name"), result.getInt64Field("ignore_id") });
|
||||||
result.nextRow();
|
result.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ignoreList;
|
return ignoreList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void SQLiteDatabase::AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
ExecuteInsert("INSERT OR IGNORE INTO ignore_list (player_id, ignored_player_id) VALUES (?, ?)", playerId, ignoredPlayerId);
|
ExecuteInsert("INSERT OR IGNORE INTO ignore_list (player_id, ignored_player_id) VALUES (?, ?)", playerId, ignoredPlayerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void SQLiteDatabase::RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
ExecuteDelete("DELETE FROM ignore_list WHERE player_id = ? AND ignored_player_id = ?", playerId, ignoredPlayerId);
|
ExecuteDelete("DELETE FROM ignore_list WHERE player_id = ? AND ignored_player_id = ?", playerId, ignoredPlayerId);
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,7 @@ std::vector<ILeaderboard::Entry> ProcessQuery(CppSQLite3Query& rows) {
|
|||||||
while (!rows.eof()) {
|
while (!rows.eof()) {
|
||||||
auto& entry = entries.emplace_back();
|
auto& entry = entries.emplace_back();
|
||||||
|
|
||||||
entry.charId = rows.getIntField("character_id");
|
entry.charId = rows.getInt64Field("character_id");
|
||||||
entry.lastPlayedTimestamp = rows.getIntField("lp_unix");
|
entry.lastPlayedTimestamp = rows.getIntField("lp_unix");
|
||||||
entry.primaryScore = rows.getFloatField("primaryScore");
|
entry.primaryScore = rows.getFloatField("primaryScore");
|
||||||
entry.secondaryScore = rows.getFloatField("secondaryScore");
|
entry.secondaryScore = rows.getFloatField("secondaryScore");
|
||||||
@@ -58,17 +58,17 @@ std::vector<ILeaderboard::Entry> SQLiteDatabase::GetNsLeaderboard(const uint32_t
|
|||||||
return ProcessQuery(result);
|
return ProcessQuery(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) {
|
void SQLiteDatabase::SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) {
|
||||||
ExecuteInsert("INSERT INTO leaderboard (primaryScore, secondaryScore, tertiaryScore, character_id, game_id, last_played) VALUES (?,?,?,?,?,CURRENT_TIMESTAMP) ;",
|
ExecuteInsert("INSERT INTO leaderboard (primaryScore, secondaryScore, tertiaryScore, character_id, game_id, last_played) VALUES (?,?,?,?,?,CURRENT_TIMESTAMP) ;",
|
||||||
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) {
|
void SQLiteDatabase::UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) {
|
||||||
ExecuteInsert("UPDATE leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, timesPlayed = timesPlayed + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;",
|
ExecuteInsert("UPDATE leaderboard SET primaryScore = ?, secondaryScore = ?, tertiaryScore = ?, timesPlayed = timesPlayed + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;",
|
||||||
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
score.primaryScore, score.secondaryScore, score.tertiaryScore, playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<ILeaderboard::Score> SQLiteDatabase::GetPlayerScore(const uint32_t playerId, const uint32_t gameId) {
|
std::optional<ILeaderboard::Score> SQLiteDatabase::GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
std::optional<ILeaderboard::Score> toReturn = std::nullopt;
|
std::optional<ILeaderboard::Score> toReturn = std::nullopt;
|
||||||
auto [_, res] = ExecuteSelect("SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
auto [_, res] = ExecuteSelect("SELECT * FROM leaderboard WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
if (!res.eof()) {
|
if (!res.eof()) {
|
||||||
@@ -82,10 +82,10 @@ std::optional<ILeaderboard::Score> SQLiteDatabase::GetPlayerScore(const uint32_t
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::IncrementNumWins(const uint32_t playerId, const uint32_t gameId) {
|
void SQLiteDatabase::IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
ExecuteUpdate("UPDATE leaderboard SET numWins = numWins + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
ExecuteUpdate("UPDATE leaderboard SET numWins = numWins + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLiteDatabase::IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) {
|
void SQLiteDatabase::IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) {
|
||||||
ExecuteUpdate("UPDATE leaderboard SET timesPlayed = timesPlayed + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
ExecuteUpdate("UPDATE leaderboard SET timesPlayed = timesPlayed + 1, last_played = CURRENT_TIMESTAMP WHERE character_id = ? AND game_id = ?;", playerId, gameId);
|
||||||
}
|
}
|
||||||
|
@@ -18,7 +18,7 @@ void SQLiteDatabase::InsertNewMail(const MailInfo& mail) {
|
|||||||
mail.itemCount);
|
mail.itemCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MailInfo> SQLiteDatabase::GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) {
|
std::vector<MailInfo> SQLiteDatabase::GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) {
|
||||||
auto [_, res] = ExecuteSelect(
|
auto [_, res] = ExecuteSelect(
|
||||||
"SELECT id, subject, body, sender_name, attachment_id, attachment_lot, attachment_subkey, attachment_count, was_read, time_sent"
|
"SELECT id, subject, body, sender_name, attachment_id, attachment_lot, attachment_subkey, attachment_count, was_read, time_sent"
|
||||||
" FROM mail WHERE receiver_id=? limit ?;",
|
" FROM mail WHERE receiver_id=? limit ?;",
|
||||||
@@ -60,7 +60,7 @@ std::optional<MailInfo> SQLiteDatabase::GetMail(const uint64_t mailId) {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t SQLiteDatabase::GetUnreadMailCount(const uint32_t characterId) {
|
uint32_t SQLiteDatabase::GetUnreadMailCount(const LWOOBJID characterId) {
|
||||||
auto [_, res] = ExecuteSelect("SELECT COUNT(*) AS number_unread FROM mail WHERE receiver_id=? AND was_read=0;", characterId);
|
auto [_, res] = ExecuteSelect("SELECT COUNT(*) AS number_unread FROM mail WHERE receiver_id=? AND was_read=0;", characterId);
|
||||||
|
|
||||||
if (res.eof()) {
|
if (res.eof()) {
|
||||||
|
@@ -49,7 +49,7 @@ void SQLiteDatabase::InsertNewUgcModel(
|
|||||||
std::stringstream& sd0Data, // cant be const sad
|
std::stringstream& sd0Data, // cant be const sad
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) {
|
const LWOOBJID characterId) {
|
||||||
const std::istream stream(sd0Data.rdbuf());
|
const std::istream stream(sd0Data.rdbuf());
|
||||||
ExecuteInsert(
|
ExecuteInsert(
|
||||||
"INSERT INTO `ugc`(`id`, `account_id`, `character_id`, `is_optimized`, `lxfml`, `bake_ao`, `filename`) VALUES (?,?,?,?,?,?,?)",
|
"INSERT INTO `ugc`(`id`, `account_id`, `character_id`, `is_optimized`, `lxfml`, `bake_ao`, `filename`) VALUES (?,?,?,?,?,?,?)",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#include "SQLiteDatabase.h"
|
#include "SQLiteDatabase.h"
|
||||||
|
|
||||||
void SQLiteDatabase::InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) {
|
void SQLiteDatabase::InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) {
|
||||||
ExecuteInsert("INSERT INTO ugc_modular_build (ugc_id, ldf_config, character_id) VALUES (?,?,?)", bigId, modules, characterId);
|
ExecuteInsert("INSERT INTO ugc_modular_build (ugc_id, ldf_config, character_id) VALUES (?,?,?)", bigId, modules, characterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,27 +32,27 @@ std::vector<std::string> TestSQLDatabase::GetApprovedCharacterNames() {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<FriendData> TestSQLDatabase::GetFriendsList(uint32_t charID) {
|
std::vector<FriendData> TestSQLDatabase::GetFriendsList(LWOOBJID charID) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> TestSQLDatabase::GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) {
|
std::optional<IFriends::BestFriendStatus> TestSQLDatabase::GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::SetBestFriendStatus(const uint32_t playerAccountId, const uint32_t friendAccountId, const uint32_t bestFriendStatus) {
|
void TestSQLDatabase::SetBestFriendStatus(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId, const uint32_t bestFriendStatus) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::AddFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) {
|
void TestSQLDatabase::AddFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::RemoveFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) {
|
void TestSQLDatabase::RemoveFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
void TestSQLDatabase::UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ void TestSQLDatabase::InsertMigration(const std::string_view str) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<ICharInfo::Info> TestSQLDatabase::GetCharacterInfo(const uint32_t charId) {
|
std::optional<ICharInfo::Info> TestSQLDatabase::GetCharacterInfo(const LWOOBJID charId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,11 +88,11 @@ std::optional<ICharInfo::Info> TestSQLDatabase::GetCharacterInfo(const std::stri
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string TestSQLDatabase::GetCharacterXml(const uint32_t accountId) {
|
std::string TestSQLDatabase::GetCharacterXml(const LWOOBJID accountId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::UpdateCharacterXml(const uint32_t characterId, const std::string_view lxfml) {
|
void TestSQLDatabase::UpdateCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,27 +104,27 @@ void TestSQLDatabase::InsertNewCharacter(const ICharInfo::Info info) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::InsertCharacterXml(const uint32_t accountId, const std::string_view lxfml) {
|
void TestSQLDatabase::InsertCharacterXml(const LWOOBJID accountId, const std::string_view lxfml) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint32_t> TestSQLDatabase::GetAccountCharacterIds(uint32_t accountId) {
|
std::vector<LWOOBJID> TestSQLDatabase::GetAccountCharacterIds(LWOOBJID accountId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::DeleteCharacter(const uint32_t characterId) {
|
void TestSQLDatabase::DeleteCharacter(const LWOOBJID characterId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::SetCharacterName(const uint32_t characterId, const std::string_view name) {
|
void TestSQLDatabase::SetCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::SetPendingCharacterName(const uint32_t characterId, const std::string_view name) {
|
void TestSQLDatabase::SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::UpdateLastLoggedInCharacter(const uint32_t characterId) {
|
void TestSQLDatabase::UpdateLastLoggedInCharacter(const LWOOBJID characterId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,11 +192,11 @@ void TestSQLDatabase::InsertNewMail(const MailInfo& mail) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::InsertNewUgcModel(std::stringstream& sd0Data, const uint32_t blueprintId, const uint32_t accountId, const uint32_t characterId) {
|
void TestSQLDatabase::InsertNewUgcModel(std::stringstream& sd0Data, const uint32_t blueprintId, const uint32_t accountId, const LWOOBJID characterId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MailInfo> TestSQLDatabase::GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) {
|
std::vector<MailInfo> TestSQLDatabase::GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ std::optional<MailInfo> TestSQLDatabase::GetMail(const uint64_t mailId) {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t TestSQLDatabase::GetUnreadMailCount(const uint32_t characterId) {
|
uint32_t TestSQLDatabase::GetUnreadMailCount(const LWOOBJID characterId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,7 +220,7 @@ void TestSQLDatabase::ClaimMailItem(const uint64_t mailId) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) {
|
void TestSQLDatabase::InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,15 +268,15 @@ std::vector<IUgc::Model> TestSQLDatabase::GetUgcModels(const LWOOBJID& propertyI
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void TestSQLDatabase::AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSQLDatabase::RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) {
|
void TestSQLDatabase::RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<IIgnoreList::Info> TestSQLDatabase::GetIgnoreList(const uint32_t playerId) {
|
std::vector<IIgnoreList::Info> TestSQLDatabase::GetIgnoreList(const LWOOBJID playerId) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,31 +17,31 @@ class TestSQLDatabase : public GameDatabase {
|
|||||||
|
|
||||||
std::vector<std::string> GetApprovedCharacterNames() override;
|
std::vector<std::string> GetApprovedCharacterNames() override;
|
||||||
|
|
||||||
std::vector<FriendData> GetFriendsList(uint32_t charID) override;
|
std::vector<FriendData> GetFriendsList(LWOOBJID charID) override;
|
||||||
|
|
||||||
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const uint32_t playerCharacterId, const uint32_t friendCharacterId) override;
|
std::optional<IFriends::BestFriendStatus> GetBestFriendStatus(const LWOOBJID playerCharacterId, const LWOOBJID friendCharacterId) override;
|
||||||
void SetBestFriendStatus(const uint32_t playerAccountId, const uint32_t friendAccountId, const uint32_t bestFriendStatus) override;
|
void SetBestFriendStatus(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId, const uint32_t bestFriendStatus) override;
|
||||||
void AddFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void AddFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void RemoveFriend(const uint32_t playerAccountId, const uint32_t friendAccountId) override;
|
void RemoveFriend(const LWOOBJID playerAccountId, const LWOOBJID friendAccountId) override;
|
||||||
void UpdateActivityLog(const uint32_t characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
void UpdateActivityLog(const LWOOBJID characterId, const eActivityType activityType, const LWOMAPID mapId) override;
|
||||||
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
void DeleteUgcModelData(const LWOOBJID& modelId) override;
|
||||||
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
void UpdateUgcModelData(const LWOOBJID& modelId, std::stringstream& lxfml) override;
|
||||||
std::vector<IUgc::Model> GetAllUgcModels() override;
|
std::vector<IUgc::Model> GetAllUgcModels() override;
|
||||||
void CreateMigrationHistoryTable() override;
|
void CreateMigrationHistoryTable() override;
|
||||||
bool IsMigrationRun(const std::string_view str) override;
|
bool IsMigrationRun(const std::string_view str) override;
|
||||||
void InsertMigration(const std::string_view str) override;
|
void InsertMigration(const std::string_view str) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const uint32_t charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const LWOOBJID charId) override;
|
||||||
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
std::optional<ICharInfo::Info> GetCharacterInfo(const std::string_view charId) override;
|
||||||
std::string GetCharacterXml(const uint32_t accountId) override;
|
std::string GetCharacterXml(const LWOOBJID accountId) override;
|
||||||
void UpdateCharacterXml(const uint32_t characterId, const std::string_view lxfml) override;
|
void UpdateCharacterXml(const LWOOBJID characterId, const std::string_view lxfml) override;
|
||||||
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
std::optional<IAccounts::Info> GetAccountInfo(const std::string_view username) override;
|
||||||
void InsertNewCharacter(const ICharInfo::Info info) override;
|
void InsertNewCharacter(const ICharInfo::Info info) override;
|
||||||
void InsertCharacterXml(const uint32_t accountId, const std::string_view lxfml) override;
|
void InsertCharacterXml(const LWOOBJID accountId, const std::string_view lxfml) override;
|
||||||
std::vector<uint32_t> GetAccountCharacterIds(uint32_t accountId) override;
|
std::vector<LWOOBJID> GetAccountCharacterIds(LWOOBJID accountId) override;
|
||||||
void DeleteCharacter(const uint32_t characterId) override;
|
void DeleteCharacter(const LWOOBJID characterId) override;
|
||||||
void SetCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void SetPendingCharacterName(const uint32_t characterId, const std::string_view name) override;
|
void SetPendingCharacterName(const LWOOBJID characterId, const std::string_view name) override;
|
||||||
void UpdateLastLoggedInCharacter(const uint32_t characterId) override;
|
void UpdateLastLoggedInCharacter(const LWOOBJID characterId) override;
|
||||||
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
void SetPetNameModerationStatus(const LWOOBJID& petId, const IPetNames::Info& info) override;
|
||||||
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
std::optional<IPetNames::Info> GetPetNameInfo(const LWOOBJID& petId) override;
|
||||||
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) override;
|
||||||
@@ -62,14 +62,14 @@ class TestSQLDatabase : public GameDatabase {
|
|||||||
std::stringstream& sd0Data,
|
std::stringstream& sd0Data,
|
||||||
const uint32_t blueprintId,
|
const uint32_t blueprintId,
|
||||||
const uint32_t accountId,
|
const uint32_t accountId,
|
||||||
const uint32_t characterId) override;
|
const LWOOBJID characterId) override;
|
||||||
std::vector<MailInfo> GetMailForPlayer(const uint32_t characterId, const uint32_t numberOfMail) override;
|
std::vector<MailInfo> GetMailForPlayer(const LWOOBJID characterId, const uint32_t numberOfMail) override;
|
||||||
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
std::optional<MailInfo> GetMail(const uint64_t mailId) override;
|
||||||
uint32_t GetUnreadMailCount(const uint32_t characterId) override;
|
uint32_t GetUnreadMailCount(const LWOOBJID characterId) override;
|
||||||
void MarkMailRead(const uint64_t mailId) override;
|
void MarkMailRead(const uint64_t mailId) override;
|
||||||
void DeleteMail(const uint64_t mailId) override;
|
void DeleteMail(const uint64_t mailId) override;
|
||||||
void ClaimMailItem(const uint64_t mailId) override;
|
void ClaimMailItem(const uint64_t mailId) override;
|
||||||
void InsertSlashCommandUsage(const uint32_t characterId, const std::string_view command) override;
|
void InsertSlashCommandUsage(const LWOOBJID characterId, const std::string_view command) override;
|
||||||
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
void UpdateAccountUnmuteTime(const uint32_t accountId, const uint64_t timeToUnmute) override;
|
||||||
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
void UpdateAccountBan(const uint32_t accountId, const bool banned) override;
|
||||||
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
void UpdateAccountPassword(const uint32_t accountId, const std::string_view bcryptpassword) override;
|
||||||
@@ -81,9 +81,9 @@ class TestSQLDatabase : public GameDatabase {
|
|||||||
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) override;
|
||||||
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
std::optional<bool> IsPlaykeyActive(const int32_t playkeyId) override;
|
||||||
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
std::vector<IUgc::Model> GetUgcModels(const LWOOBJID& propertyId) override;
|
||||||
void AddIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void AddIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
void RemoveIgnore(const uint32_t playerId, const uint32_t ignoredPlayerId) override;
|
void RemoveIgnore(const LWOOBJID playerId, const LWOOBJID ignoredPlayerId) override;
|
||||||
std::vector<IIgnoreList::Info> GetIgnoreList(const uint32_t playerId) override;
|
std::vector<IIgnoreList::Info> GetIgnoreList(const LWOOBJID playerId) override;
|
||||||
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
void InsertRewardCode(const uint32_t account_id, const uint32_t reward_code) override;
|
||||||
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
std::vector<uint32_t> GetRewardCodesByAccountID(const uint32_t account_id) override;
|
||||||
void AddBehavior(const IBehaviors::Info& info) override;
|
void AddBehavior(const IBehaviors::Info& info) override;
|
||||||
@@ -95,12 +95,12 @@ class TestSQLDatabase : public GameDatabase {
|
|||||||
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override { return {}; };
|
std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) override { return {}; };
|
||||||
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override { return {}; };
|
std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) override { return {}; };
|
||||||
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override { return {}; };
|
std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) override { return {}; };
|
||||||
void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override {};
|
void SaveScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override {};
|
||||||
void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) override {};
|
void UpdateScore(const LWOOBJID playerId, const uint32_t gameId, const Score& score) override {};
|
||||||
std::optional<ILeaderboard::Score> GetPlayerScore(const uint32_t playerId, const uint32_t gameId) override { return {}; };
|
std::optional<ILeaderboard::Score> GetPlayerScore(const LWOOBJID playerId, const uint32_t gameId) override { return {}; };
|
||||||
void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) override {};
|
void IncrementNumWins(const LWOOBJID playerId, const uint32_t gameId) override {};
|
||||||
void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) override {};
|
void IncrementTimesPlayed(const LWOOBJID playerId, const uint32_t gameId) override {};
|
||||||
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<uint32_t> characterId) override {};
|
void InsertUgcBuild(const std::string& modules, const LWOOBJID bigId, const std::optional<LWOOBJID> characterId) override {};
|
||||||
void DeleteUgcBuild(const LWOOBJID bigId) override {};
|
void DeleteUgcBuild(const LWOOBJID bigId) override {};
|
||||||
uint32_t GetAccountCount() override { return 0; };
|
uint32_t GetAccountCount() override { return 0; };
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "ePlayerFlag.h"
|
#include "ePlayerFlag.h"
|
||||||
#include "CDPlayerFlagsTable.h"
|
#include "CDPlayerFlagsTable.h"
|
||||||
|
|
||||||
Character::Character(uint32_t id, User* parentUser) {
|
Character::Character(LWOOBJID id, User* parentUser) {
|
||||||
//First load the name, etc:
|
//First load the name, etc:
|
||||||
m_ID = id;
|
m_ID = id;
|
||||||
m_ParentUser = parentUser;
|
m_ParentUser = parentUser;
|
||||||
@@ -50,6 +50,10 @@ void Character::UpdateInfoFromDatabase() {
|
|||||||
|
|
||||||
//Load the xmlData now:
|
//Load the xmlData now:
|
||||||
m_XMLData = Database::Get()->GetCharacterXml(m_ID);
|
m_XMLData = Database::Get()->GetCharacterXml(m_ID);
|
||||||
|
if (m_XMLData.empty()) {
|
||||||
|
LOG("Character %s (%llu) has no xml data!", m_Name.c_str(), m_ID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_ZoneID = 0; //TEMP! Set back to 0 when done. This is so we can see loading screen progress for testing.
|
m_ZoneID = 0; //TEMP! Set back to 0 when done. This is so we can see loading screen progress for testing.
|
||||||
m_ZoneInstanceID = 0; //These values don't really matter, these are only used on the char select screen and seem unused.
|
m_ZoneInstanceID = 0; //These values don't really matter, these are only used on the char select screen and seem unused.
|
||||||
@@ -61,7 +65,6 @@ void Character::UpdateInfoFromDatabase() {
|
|||||||
//Set our objectID:
|
//Set our objectID:
|
||||||
m_ObjectID = m_ID;
|
m_ObjectID = m_ID;
|
||||||
GeneralUtils::SetBit(m_ObjectID, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(m_ObjectID, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(m_ObjectID, eObjectBits::PERSISTENT);
|
|
||||||
|
|
||||||
m_OurEntity = nullptr;
|
m_OurEntity = nullptr;
|
||||||
m_BuildMode = false;
|
m_BuildMode = false;
|
||||||
@@ -75,7 +78,7 @@ void Character::DoQuickXMLDataParse() {
|
|||||||
if (m_XMLData.size() == 0) return;
|
if (m_XMLData.size() == 0) return;
|
||||||
|
|
||||||
if (m_Doc.Parse(m_XMLData.c_str(), m_XMLData.size()) == 0) {
|
if (m_Doc.Parse(m_XMLData.c_str(), m_XMLData.size()) == 0) {
|
||||||
LOG("Loaded xmlData for character %s (%i)!", m_Name.c_str(), m_ID);
|
LOG("Loaded xmlData for character %s (%llu)!", m_Name.c_str(), m_ID);
|
||||||
} else {
|
} else {
|
||||||
LOG("Failed to load xmlData (%i) (%s) (%s)!", m_Doc.ErrorID(), m_Doc.ErrorIDToName(m_Doc.ErrorID()), m_Doc.ErrorStr());
|
LOG("Failed to load xmlData (%i) (%s) (%s)!", m_Doc.ErrorID(), m_Doc.ErrorIDToName(m_Doc.ErrorID()), m_Doc.ErrorStr());
|
||||||
//Server::rakServer->CloseConnection(m_ParentUser->GetSystemAddress(), true);
|
//Server::rakServer->CloseConnection(m_ParentUser->GetSystemAddress(), true);
|
||||||
@@ -238,7 +241,7 @@ void Character::SetBuildMode(bool buildMode) {
|
|||||||
void Character::SaveXMLToDatabase() {
|
void Character::SaveXMLToDatabase() {
|
||||||
// Check that we can actually _save_ before saving
|
// Check that we can actually _save_ before saving
|
||||||
if (!m_OurEntity) {
|
if (!m_OurEntity) {
|
||||||
LOG("%i:%s didn't have an entity set while saving! CHARACTER WILL NOT BE SAVED!", this->GetID(), this->GetName().c_str());
|
LOG("%llu:%s didn't have an entity set while saving! CHARACTER WILL NOT BE SAVED!", this->GetID(), this->GetName().c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,7 +311,7 @@ void Character::SaveXMLToDatabase() {
|
|||||||
//For metrics, log the time it took to save:
|
//For metrics, log the time it took to save:
|
||||||
auto end = std::chrono::system_clock::now();
|
auto end = std::chrono::system_clock::now();
|
||||||
std::chrono::duration<double> elapsed = end - start;
|
std::chrono::duration<double> elapsed = end - start;
|
||||||
LOG("%i:%s Saved character to Database in: %fs", this->GetID(), this->GetName().c_str(), elapsed.count());
|
LOG("%llu:%s Saved character to Database in: %fs", this->GetID(), this->GetName().c_str(), elapsed.count());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Character::SetIsNewLogin() {
|
void Character::SetIsNewLogin() {
|
||||||
@@ -320,7 +323,7 @@ void Character::SetIsNewLogin() {
|
|||||||
while (currentChild) {
|
while (currentChild) {
|
||||||
auto* nextChild = currentChild->NextSiblingElement();
|
auto* nextChild = currentChild->NextSiblingElement();
|
||||||
if (currentChild->Attribute("si")) {
|
if (currentChild->Attribute("si")) {
|
||||||
LOG("Removed session flag (%s) from character %i:%s, saving character to database", currentChild->Attribute("si"), GetID(), GetName().c_str());
|
LOG("Removed session flag (%s) from character %llu:%s, saving character to database", currentChild->Attribute("si"), GetID(), GetName().c_str());
|
||||||
flags->DeleteChild(currentChild);
|
flags->DeleteChild(currentChild);
|
||||||
WriteToDatabase();
|
WriteToDatabase();
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,7 @@ enum class eLootSourceType : uint32_t;
|
|||||||
*/
|
*/
|
||||||
class Character {
|
class Character {
|
||||||
public:
|
public:
|
||||||
Character(uint32_t id, User* parentUser);
|
Character(LWOOBJID id, User* parentUser);
|
||||||
~Character();
|
~Character();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,7 +53,7 @@ public:
|
|||||||
* Gets the database ID of the character
|
* Gets the database ID of the character
|
||||||
* @return the database ID of the character
|
* @return the database ID of the character
|
||||||
*/
|
*/
|
||||||
uint32_t GetID() const { return m_ID; }
|
LWOOBJID GetID() const { return m_ID; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the (custom) name of the character
|
* Gets the (custom) name of the character
|
||||||
@@ -467,9 +467,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
void UpdateInfoFromDatabase();
|
void UpdateInfoFromDatabase();
|
||||||
/**
|
/**
|
||||||
* The ID of this character. First 32 bits of the ObjectID.
|
* The ID of this character.
|
||||||
*/
|
*/
|
||||||
uint32_t m_ID{};
|
LWOOBJID m_ID{};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The 64-bit unique ID used in the game.
|
* The 64-bit unique ID used in the game.
|
||||||
|
@@ -145,7 +145,7 @@ void QueryToLdf(Leaderboard& leaderboard, const std::vector<ILeaderboard::Entry>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ILeaderboard::Entry> FilterToNumResults(const std::vector<ILeaderboard::Entry>& leaderboard, const uint32_t relatedPlayer, const Leaderboard::InfoType infoType, const uint32_t numResults) {
|
std::vector<ILeaderboard::Entry> FilterToNumResults(const std::vector<ILeaderboard::Entry>& leaderboard, const LWOOBJID relatedPlayer, const Leaderboard::InfoType infoType, const uint32_t numResults) {
|
||||||
std::vector<ILeaderboard::Entry> toReturn;
|
std::vector<ILeaderboard::Entry> toReturn;
|
||||||
|
|
||||||
int32_t index = 0;
|
int32_t index = 0;
|
||||||
@@ -197,7 +197,7 @@ std::vector<ILeaderboard::Entry> FilterWeeklies(const std::vector<ILeaderboard::
|
|||||||
return weeklyLeaderboard;
|
return weeklyLeaderboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ILeaderboard::Entry> FilterFriends(const std::vector<ILeaderboard::Entry>& leaderboard, const uint32_t relatedPlayer) {
|
std::vector<ILeaderboard::Entry> FilterFriends(const std::vector<ILeaderboard::Entry>& leaderboard, const LWOOBJID relatedPlayer) {
|
||||||
// Filter the leaderboard to only include friends of the player
|
// Filter the leaderboard to only include friends of the player
|
||||||
auto friendOfPlayer = Database::Get()->GetFriendsList(relatedPlayer);
|
auto friendOfPlayer = Database::Get()->GetFriendsList(relatedPlayer);
|
||||||
std::vector<ILeaderboard::Entry> friendsLeaderboard;
|
std::vector<ILeaderboard::Entry> friendsLeaderboard;
|
||||||
@@ -217,7 +217,7 @@ std::vector<ILeaderboard::Entry> ProcessLeaderboard(
|
|||||||
const std::vector<ILeaderboard::Entry>& leaderboard,
|
const std::vector<ILeaderboard::Entry>& leaderboard,
|
||||||
const bool weekly,
|
const bool weekly,
|
||||||
const Leaderboard::InfoType infoType,
|
const Leaderboard::InfoType infoType,
|
||||||
const uint32_t relatedPlayer,
|
const LWOOBJID relatedPlayer,
|
||||||
const uint32_t numResults) {
|
const uint32_t numResults) {
|
||||||
std::vector<ILeaderboard::Entry> toReturn;
|
std::vector<ILeaderboard::Entry> toReturn;
|
||||||
|
|
||||||
|
@@ -39,11 +39,11 @@ User::User(const SystemAddress& sysAddr, const std::string& username, const std:
|
|||||||
if (Game::server->GetZoneID() != 0) {
|
if (Game::server->GetZoneID() != 0) {
|
||||||
auto characterList = Database::Get()->GetAccountCharacterIds(m_AccountID);
|
auto characterList = Database::Get()->GetAccountCharacterIds(m_AccountID);
|
||||||
if (!characterList.empty()) {
|
if (!characterList.empty()) {
|
||||||
const uint32_t lastUsedCharacterId = characterList.front();
|
const auto lastUsedCharacterId = characterList.front();
|
||||||
Character* character = new Character(lastUsedCharacterId, this);
|
Character* character = new Character(lastUsedCharacterId, this);
|
||||||
character->UpdateFromDatabase();
|
character->UpdateFromDatabase();
|
||||||
m_Characters.push_back(character);
|
m_Characters.push_back(character);
|
||||||
LOG("Loaded %i as it is the last used char", lastUsedCharacterId);
|
LOG("Loaded %llu as it is the last used char", lastUsedCharacterId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -325,7 +325,9 @@ void UserManager::CreateCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Now that the name is ok, we can get an objectID from Master:
|
//Now that the name is ok, we can get an objectID from Master:
|
||||||
ObjectIDManager::RequestPersistentID([=, this](uint32_t objectID) {
|
ObjectIDManager::RequestPersistentID([=, this](uint32_t persistentID) {
|
||||||
|
LWOOBJID objectID = persistentID;
|
||||||
|
GeneralUtils::SetBit(objectID, eObjectBits::CHARACTER);
|
||||||
if (Database::Get()->GetCharacterInfo(objectID)) {
|
if (Database::Get()->GetCharacterInfo(objectID)) {
|
||||||
LOG("Character object id unavailable, check object_id_tracker!");
|
LOG("Character object id unavailable, check object_id_tracker!");
|
||||||
WorldPackets::SendCharacterCreationResponse(sysAddr, eCharacterCreationResponse::OBJECT_ID_UNAVAILABLE);
|
WorldPackets::SendCharacterCreationResponse(sysAddr, eCharacterCreationResponse::OBJECT_ID_UNAVAILABLE);
|
||||||
@@ -409,9 +411,8 @@ void UserManager::DeleteCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
CINSTREAM_SKIP_HEADER;
|
CINSTREAM_SKIP_HEADER;
|
||||||
LWOOBJID objectID;
|
LWOOBJID objectID;
|
||||||
inStream.Read(objectID);
|
inStream.Read(objectID);
|
||||||
uint32_t charID = static_cast<uint32_t>(objectID);
|
|
||||||
|
|
||||||
LOG("Received char delete req for ID: %llu (%u)", objectID, charID);
|
LOG("Received char delete req for ID: %llu", objectID);
|
||||||
|
|
||||||
bool hasCharacter = CheatDetection::VerifyLwoobjidIsSender(
|
bool hasCharacter = CheatDetection::VerifyLwoobjidIsSender(
|
||||||
objectID,
|
objectID,
|
||||||
@@ -423,8 +424,8 @@ void UserManager::DeleteCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
if (!hasCharacter) {
|
if (!hasCharacter) {
|
||||||
WorldPackets::SendCharacterDeleteResponse(sysAddr, false);
|
WorldPackets::SendCharacterDeleteResponse(sysAddr, false);
|
||||||
} else {
|
} else {
|
||||||
LOG("Deleting character %i", charID);
|
LOG("Deleting character %llu", objectID);
|
||||||
Database::Get()->DeleteCharacter(charID);
|
Database::Get()->DeleteCharacter(objectID);
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT);
|
BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT);
|
||||||
@@ -445,11 +446,8 @@ void UserManager::RenameCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
CINSTREAM_SKIP_HEADER;
|
CINSTREAM_SKIP_HEADER;
|
||||||
LWOOBJID objectID;
|
LWOOBJID objectID;
|
||||||
inStream.Read(objectID);
|
inStream.Read(objectID);
|
||||||
GeneralUtils::ClearBit(objectID, eObjectBits::CHARACTER);
|
|
||||||
GeneralUtils::ClearBit(objectID, eObjectBits::PERSISTENT);
|
|
||||||
|
|
||||||
uint32_t charID = static_cast<uint32_t>(objectID);
|
LOG("Received char rename request for ID: %llu", objectID);
|
||||||
LOG("Received char rename request for ID: %llu (%u)", objectID, charID);
|
|
||||||
|
|
||||||
LUWString LUWStringName;
|
LUWString LUWStringName;
|
||||||
inStream.Read(LUWStringName);
|
inStream.Read(LUWStringName);
|
||||||
@@ -466,7 +464,7 @@ void UserManager::RenameCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
u->GetAccountID());
|
u->GetAccountID());
|
||||||
|
|
||||||
auto unusedItr = std::find_if(u->GetCharacters().begin(), u->GetCharacters().end(), [&](Character* c) {
|
auto unusedItr = std::find_if(u->GetCharacters().begin(), u->GetCharacters().end(), [&](Character* c) {
|
||||||
if (c->GetID() == charID) {
|
if (c->GetID() == objectID) {
|
||||||
character = c;
|
character = c;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -483,12 +481,12 @@ void UserManager::RenameCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
|
|
||||||
if (!Database::Get()->GetCharacterInfo(newName)) {
|
if (!Database::Get()->GetCharacterInfo(newName)) {
|
||||||
if (IsNamePreapproved(newName)) {
|
if (IsNamePreapproved(newName)) {
|
||||||
Database::Get()->SetCharacterName(charID, newName);
|
Database::Get()->SetCharacterName(objectID, newName);
|
||||||
LOG("Character %s now known as %s", character->GetName().c_str(), newName.c_str());
|
LOG("Character %s now known as %s", character->GetName().c_str(), newName.c_str());
|
||||||
WorldPackets::SendCharacterRenameResponse(sysAddr, eRenameResponse::SUCCESS);
|
WorldPackets::SendCharacterRenameResponse(sysAddr, eRenameResponse::SUCCESS);
|
||||||
UserManager::RequestCharacterList(sysAddr);
|
UserManager::RequestCharacterList(sysAddr);
|
||||||
} else {
|
} else {
|
||||||
Database::Get()->SetPendingCharacterName(charID, newName);
|
Database::Get()->SetPendingCharacterName(objectID, newName);
|
||||||
LOG("Character %s has been renamed to %s and is pending approval by a moderator.", character->GetName().c_str(), newName.c_str());
|
LOG("Character %s has been renamed to %s and is pending approval by a moderator.", character->GetName().c_str(), newName.c_str());
|
||||||
WorldPackets::SendCharacterRenameResponse(sysAddr, eRenameResponse::SUCCESS);
|
WorldPackets::SendCharacterRenameResponse(sysAddr, eRenameResponse::SUCCESS);
|
||||||
UserManager::RequestCharacterList(sysAddr);
|
UserManager::RequestCharacterList(sysAddr);
|
||||||
@@ -502,7 +500,7 @@ void UserManager::RenameCharacter(const SystemAddress& sysAddr, Packet* packet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserManager::LoginCharacter(const SystemAddress& sysAddr, uint32_t playerID) {
|
void UserManager::LoginCharacter(const SystemAddress& sysAddr, LWOOBJID playerID) {
|
||||||
User* u = GetUser(sysAddr);
|
User* u = GetUser(sysAddr);
|
||||||
if (!u) {
|
if (!u) {
|
||||||
LOG("Couldn't get user to log in character");
|
LOG("Couldn't get user to log in character");
|
||||||
|
@@ -35,7 +35,7 @@ public:
|
|||||||
void CreateCharacter(const SystemAddress& sysAddr, Packet* packet);
|
void CreateCharacter(const SystemAddress& sysAddr, Packet* packet);
|
||||||
void DeleteCharacter(const SystemAddress& sysAddr, Packet* packet);
|
void DeleteCharacter(const SystemAddress& sysAddr, Packet* packet);
|
||||||
void RenameCharacter(const SystemAddress& sysAddr, Packet* packet);
|
void RenameCharacter(const SystemAddress& sysAddr, Packet* packet);
|
||||||
void LoginCharacter(const SystemAddress& sysAddr, uint32_t playerID);
|
void LoginCharacter(const SystemAddress& sysAddr, LWOOBJID playerID);
|
||||||
|
|
||||||
void SaveAllActiveCharacters();
|
void SaveAllActiveCharacters();
|
||||||
|
|
||||||
|
@@ -64,7 +64,6 @@ PropertyManagementComponent::PropertyManagementComponent(Entity* parent) : Compo
|
|||||||
this->propertyId = propertyInfo->id;
|
this->propertyId = propertyInfo->id;
|
||||||
this->owner = propertyInfo->ownerId;
|
this->owner = propertyInfo->ownerId;
|
||||||
GeneralUtils::SetBit(this->owner, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(this->owner, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(this->owner, eObjectBits::PERSISTENT);
|
|
||||||
this->clone_Id = propertyInfo->cloneId;
|
this->clone_Id = propertyInfo->cloneId;
|
||||||
this->propertyName = propertyInfo->name;
|
this->propertyName = propertyInfo->name;
|
||||||
this->propertyDescription = propertyInfo->description;
|
this->propertyDescription = propertyInfo->description;
|
||||||
|
@@ -76,8 +76,8 @@ void LogAndSaveFailedAntiCheatCheck(const LWOOBJID& id, const SystemAddress& sys
|
|||||||
auto* user = UserManager::Instance()->GetUser(sysAddr);
|
auto* user = UserManager::Instance()->GetUser(sysAddr);
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
LOG("User at system address (%s) (%s) (%llu) sent a packet as (%i) which is not an id they own.",
|
LOG("User at system address (%s) (%s) (%llu) sent a packet as (%llu) which is not an id they own.",
|
||||||
sysAddr.ToString(), user->GetLastUsedChar()->GetName().c_str(), user->GetLastUsedChar()->GetObjectID(), static_cast<int32_t>(id));
|
sysAddr.ToString(), user->GetLastUsedChar()->GetName().c_str(), user->GetLastUsedChar()->GetObjectID(), id);
|
||||||
// Can't know sending player. Just log system address for IP banning.
|
// Can't know sending player. Just log system address for IP banning.
|
||||||
} else {
|
} else {
|
||||||
LOG("No user found for system address (%s).", sysAddr.ToString());
|
LOG("No user found for system address (%s).", sysAddr.ToString());
|
||||||
@@ -117,7 +117,7 @@ bool CheatDetection::VerifyLwoobjidIsSender(const LWOOBJID& id, const SystemAddr
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
invalidPacket = true;
|
invalidPacket = true;
|
||||||
const uint32_t characterId = static_cast<uint32_t>(id);
|
const auto characterId = id;
|
||||||
// Check to make sure the ID provided is one of the user's characters.
|
// Check to make sure the ID provided is one of the user's characters.
|
||||||
for (const auto& character : sendingUser->GetCharacters()) {
|
for (const auto& character : sendingUser->GetCharacters()) {
|
||||||
if (character && character->GetID() == characterId) {
|
if (character && character->GetID() == characterId) {
|
||||||
|
@@ -141,7 +141,6 @@ namespace GMGreaterThanZeroCommands {
|
|||||||
characterId = characterInfo->id;
|
characterId = characterInfo->id;
|
||||||
|
|
||||||
GeneralUtils::SetBit(characterId, eObjectBits::CHARACTER);
|
GeneralUtils::SetBit(characterId, eObjectBits::CHARACTER);
|
||||||
GeneralUtils::SetBit(characterId, eObjectBits::PERSISTENT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accountId == 0) {
|
if (accountId == 0) {
|
||||||
|
@@ -15,8 +15,8 @@ struct MailInfo {
|
|||||||
std::string subject;
|
std::string subject;
|
||||||
std::string body;
|
std::string body;
|
||||||
uint64_t id{};
|
uint64_t id{};
|
||||||
uint32_t senderId{};
|
LWOOBJID senderId{};
|
||||||
uint32_t receiverId{};
|
LWOOBJID receiverId{};
|
||||||
uint64_t timeSent{};
|
uint64_t timeSent{};
|
||||||
bool wasRead{};
|
bool wasRead{};
|
||||||
uint16_t languageCode{};
|
uint16_t languageCode{};
|
||||||
|
@@ -861,7 +861,7 @@ void HandlePacket(Packet* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (luBitStream.connectionType != ServiceType::WORLD) return;
|
if (luBitStream.connectionType != ServiceType::WORLD) return;
|
||||||
|
LOG_DEBUG("Got world packet %s", StringifiedEnum::ToString(static_cast<MessageType::World>(luBitStream.internalPacketID)).data());
|
||||||
switch (static_cast<MessageType::World>(luBitStream.internalPacketID)) {
|
switch (static_cast<MessageType::World>(luBitStream.internalPacketID)) {
|
||||||
case MessageType::World::VALIDATION: {
|
case MessageType::World::VALIDATION: {
|
||||||
CINSTREAM_SKIP_HEADER;
|
CINSTREAM_SKIP_HEADER;
|
||||||
@@ -983,7 +983,7 @@ void HandlePacket(Packet* packet) {
|
|||||||
|
|
||||||
LWOOBJID playerID = 0;
|
LWOOBJID playerID = 0;
|
||||||
inStream.Read(playerID);
|
inStream.Read(playerID);
|
||||||
|
LOG("User is requesting to login with character %llu", playerID);
|
||||||
bool valid = CheatDetection::VerifyLwoobjidIsSender(
|
bool valid = CheatDetection::VerifyLwoobjidIsSender(
|
||||||
playerID,
|
playerID,
|
||||||
packet->systemAddress,
|
packet->systemAddress,
|
||||||
@@ -991,18 +991,15 @@ void HandlePacket(Packet* packet) {
|
|||||||
"Sending login request with a sending player that does not match their own. Player ID: %llu",
|
"Sending login request with a sending player that does not match their own. Player ID: %llu",
|
||||||
playerID
|
playerID
|
||||||
);
|
);
|
||||||
|
LOG("Login request for player %llu is %s", playerID, valid ? "valid" : "invalid");
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
|
|
||||||
GeneralUtils::ClearBit(playerID, eObjectBits::CHARACTER);
|
|
||||||
GeneralUtils::ClearBit(playerID, eObjectBits::PERSISTENT);
|
|
||||||
|
|
||||||
auto user = UserManager::Instance()->GetUser(packet->systemAddress);
|
auto user = UserManager::Instance()->GetUser(packet->systemAddress);
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
auto lastCharacter = user->GetLoggedInChar();
|
auto lastCharacter = user->GetLoggedInChar();
|
||||||
// This means we swapped characters and we need to remove the previous player from the container.
|
// This means we swapped characters and we need to remove the previous player from the container.
|
||||||
if (static_cast<uint32_t>(lastCharacter) != playerID) {
|
if (lastCharacter != playerID) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT);
|
BitStreamUtils::WriteHeader(bitStream, ServiceType::CHAT, MessageType::Chat::UNEXPECTED_DISCONNECT);
|
||||||
bitStream.Write(lastCharacter);
|
bitStream.Write(lastCharacter);
|
||||||
@@ -1010,7 +1007,7 @@ void HandlePacket(Packet* packet) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UserManager::Instance()->LoginCharacter(packet->systemAddress, static_cast<uint32_t>(playerID));
|
UserManager::Instance()->LoginCharacter(packet->systemAddress, playerID);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
migrations/dlu/mysql/23_store_character_id_as_objectid.sql
Normal file
23
migrations/dlu/mysql/23_store_character_id_as_objectid.sql
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
START TRANSACTION;
|
||||||
|
ALTER TABLE mail MODIFY COLUMN sender_id BIGINT NOT NULL;
|
||||||
|
ALTER TABLE bug_reports MODIFY COLUMN reporter_id BIGINT;
|
||||||
|
/* This is done to prevent all entries on the leaderboard from updating */
|
||||||
|
ALTER TABLE leaderboard CHANGE last_played last_played TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();
|
||||||
|
SET foreign_key_checks = 0;
|
||||||
|
UPDATE activity_log SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE behaviors SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE bug_reports SET reporter_id = reporter_id | 0x1000000000000000;
|
||||||
|
UPDATE charinfo SET id = id | 0x1000000000000000;
|
||||||
|
UPDATE charxml SET id = id | 0x1000000000000000;
|
||||||
|
UPDATE command_log SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE friends SET player_id = player_id | 0x1000000000000000, friend_id = friend_id | 0x1000000000000000;
|
||||||
|
UPDATE ignore_list SET player_id = player_id | 0x1000000000000000, ignored_player_id = ignored_player_id | 0x1000000000000000;
|
||||||
|
UPDATE leaderboard SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE mail SET sender_id = sender_id | 0x1000000000000000, receiver_id = receiver_id | 0x1000000000000000;
|
||||||
|
UPDATE pet_names SET owner_id = owner_id | 0x1000000000000000;
|
||||||
|
UPDATE properties SET owner_id = owner_id | 0x1000000000000000;
|
||||||
|
UPDATE ugc SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE ugc_modular_build SET character_id = character_id | 0x1000000000000000;
|
||||||
|
SET foreign_key_checks = 1;
|
||||||
|
ALTER TABLE leaderboard CHANGE last_played last_played TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP();
|
||||||
|
COMMIT;
|
21
migrations/dlu/sqlite/6_store_character_id_as_objectid.sql
Normal file
21
migrations/dlu/sqlite/6_store_character_id_as_objectid.sql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
START TRANSACTION;
|
||||||
|
ALTER TABLE mail MODIFY COLUMN sender_id BIGINT NOT NULL;
|
||||||
|
ALTER TABLE bug_reports MODIFY COLUMN reporter_id BIGINT;
|
||||||
|
/* The leaderboard last_played change is not needed here since sqlite does not have ON UPDATE */
|
||||||
|
SET foreign_key_checks = 0;
|
||||||
|
UPDATE activity_log SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE behaviors SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE bug_reports SET reporter_id = reporter_id | 0x1000000000000000;
|
||||||
|
UPDATE charinfo SET id = id | 0x1000000000000000;
|
||||||
|
UPDATE charxml SET id = id | 0x1000000000000000;
|
||||||
|
UPDATE command_log SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE friends SET player_id = player_id | 0x1000000000000000, friend_id = friend_id | 0x1000000000000000;
|
||||||
|
UPDATE ignore_list SET player_id = player_id | 0x1000000000000000, ignored_player_id = ignored_player_id | 0x1000000000000000;
|
||||||
|
UPDATE leaderboard SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE mail SET sender_id = sender_id | 0x1000000000000000, receiver_id = receiver_id | 0x1000000000000000;
|
||||||
|
UPDATE pet_names SET owner_id = owner_id | 0x1000000000000000;
|
||||||
|
UPDATE properties SET owner_id = owner_id | 0x1000000000000000;
|
||||||
|
UPDATE ugc SET character_id = character_id | 0x1000000000000000;
|
||||||
|
UPDATE ugc_modular_build SET character_id = character_id | 0x1000000000000000;
|
||||||
|
SET foreign_key_checks = 1;
|
||||||
|
COMMIT;
|
Reference in New Issue
Block a user