27 #include <boost/algorithm/string.hpp> 
   37     sDatabase.RunQuery(res, 
"SELECT ClientSeed FROM srvStatus WHERE AI = 1");
 
   46     if (ccp.user_name.empty()) {
 
   47         failMsg = 
"Account Name is empty.";
 
   50     if (ccp.user_name.length() < 3) {
 
   51         failMsg = 
"Account Name is too short.";
 
   56     if (ccp.user_name.length() > 20) {    
 
   57         failMsg = 
"Account Name is too long.";
 
   63             failMsg = 
"Account Name contains invalid characters.";
 
   74     sDatabase.DoEscapeString(eLogin, ccp.user_name);
 
   78         "SELECT accountID, clientID, password, hash, role, type, online, banned, logonCount, lastLogin" 
   79         " FROM account WHERE accountName = '%s'", eLogin.c_str() ) )
 
   81         sLog.Error( 
"ServiceDB", 
"Error in query: %s.", res.
error.
c_str() );
 
   82         failMsg = 
"Error in DB Query";
 
   83         failMsg += 
": Account not found for ";
 
   92         if (
sConfig.account.autoAccountRole > 0) {
 
   93             std::string ePass, ePassHash;
 
   94             sDatabase.DoEscapeString(ePass, ccp.user_password);
 
   95             sDatabase.DoEscapeString(ePassHash, ccp.user_password_hash);
 
   97             if ( accountID > 0 ) {
 
  101                 failMsg = 
"Failed to create a new account.";
 
  105             failMsg = 
"That account doesn't exist and AutoAccount is disabled.";
 
  127     std::string eLogin, eHash;
 
  128     sDatabase.DoEscapeString(eLogin, username);
 
  132     if (!
sDatabase.RunQuery(err, 
"UPDATE account SET hash='%s' WHERE accountName='%s'", eHash.
c_str(), eLogin.c_str())) {
 
  133         sLog.Error( 
"AccountDB", 
"Unable to update account information for: %s.", username );
 
  143     if (!
sDatabase.RunQuery(err, 
"UPDATE account SET lastLogin=now(), logonCount=logonCount+1 WHERE accountID=%u", accountID)) {
 
  144         sLog.Error( 
"AccountDB", 
"Unable to update account information for accountID %u.", accountID);
 
  157     if ( !
sDatabase.RunQueryLID( err, accountID,
 
  158             "INSERT INTO account ( accountName, password, hash, role, clientID )" 
  159             " VALUES ( '%s', '%s', '%s', %li, %u )",
 
  160                     login, pass, passHash, role, clientID ) )
 
  162         sLog.Error( 
"ServiceDB", 
"Failed to create a new account '%s':'%s': %s.", login, pass, err.
c_str() );
 
  166     sDatabase.RunQuery(err, 
"UPDATE srvStatus SET ClientSeed = ClientSeed + 1 WHERE AI = 1");
 
  173     sDatabase.RunQuery(err, 
"UPDATE account SET password = '%s' WHERE accountID=%u", pass, accountID);
 
  178     _log(CLIENT__TRACE, 
"ServiceDB:  Setting character %u %s.", char_id, online ? 
"Online" : 
"Offline");
 
  180     sDatabase.RunQuery(err, 
"UPDATE chrCharacters SET online = %u WHERE characterID = %u", (online?1:0), char_id);
 
  183         sDatabase.RunQuery(err, 
"UPDATE srvStatus SET Connections = Connections + 1");
 
  189                        "UPDATE srvStatus SET Online = %u, Connections = 0, startTime = %s WHERE AI = 1",
 
  190                        (online ? 1 : 0), (online ? 
"UNIX_TIMESTAMP(CURRENT_TIMESTAMP)" : 
"0"));
 
  193     sDatabase.RunQuery(err, 
"UPDATE chrCharacters SET online = 0 WHERE 1");
 
  194     sDatabase.RunQuery(err, 
"UPDATE account SET online = 0 WHERE 1");
 
  195     sDatabase.RunQuery( err, 
"DELETE FROM chrPausedSkillQueue WHERE 1");
 
  200     if (!
sDatabase.RunQuery(err, 
"UPDATE account SET online = %u WHERE accountID= %u ", (online?1:0), accountID)) {
 
  201         codelog(DATABASE__ERROR, 
"Error in query: %s", err.
c_str());
 
  207     if (!
sDatabase.RunQuery(err, 
"UPDATE account SET banned = %u WHERE accountID = %u", (banned?1:0), accountID)) {
 
  208         codelog(DATABASE__ERROR, 
"Error in query: %s", err.
c_str());
 
  215             " INSERT INTO chrKillTable (solarSystemID, victimCharacterID, victimCorporationID, victimAllianceID, victimFactionID," 
  216             "victimShipTypeID, victimDamageTaken, finalCharacterID, finalCorporationID, finalAllianceID, finalFactionID, finalShipTypeID," 
  217             "finalWeaponTypeID, finalSecurityStatus, finalDamageDone, killBlob, killTime, moonID)" 
  218             " VALUES (%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%f,%u,'%s',%li,%u)",
 
  229     if (!
sDatabase.RunQuery(res, 
"SELECT corporationID FROM staStations WHERE stationID = %u", stationID)) {
 
  230         codelog(DATABASE__ERROR, 
"Failed to query info for station %u: %s.", stationID, res.
error.
c_str());
 
  249     if (!
sDatabase.RunQuery(res, 
"SELECT constantValue FROM eveConstants WHERE constantID='%s'", escaped.c_str() ))
 
  257         _log(DATABASE__MESSAGE, 
"Unable to find constant %s", name);
 
  268     if (oldValue.compare(newValue) == 0)
 
  276     std::string newEscValue;
 
  277     sDatabase.DoEscapeString(newEscValue, newValue);
 
  279     std::string qValue = 
" ";
 
  282     qValue += newEscValue.c_str();
 
  284     dbQ.push_back(qValue);
 
  289     if (oldValue == newValue)
 
  297     int* nullInt(
nullptr);
 
  298     std::string qValue(key);
 
  300     qValue += fcvt(newValue, 2, nullInt, nullInt);
 
  301     dbQ.push_back(qValue);
 
  306     if (oldValue == newValue)
 
  314     std::string qValue(key);
 
  316     qValue += std::to_string(newValue);
 
  317     dbQ.push_back(qValue);
 
  322     if (oldValue == newValue)
 
  330     std::string qValue(key);
 
  332     qValue += std::to_string(newValue);
 
  333     dbQ.push_back(qValue);
 
  350     "     updateTime = UNIX_TIMESTAMP(CURRENT_TIMESTAMP)" 
  354     _log(DATABASE__INFO, 
"Server Stats Saved");
 
  361     std::string matchEsc;
 
  362     sDatabase.DoEscapeString(matchEsc, match);
 
  363     if (matchEsc == 
"__ALL__") {
 
  366             "   characterID AS ownerID" 
  367             " FROM chrCharacters" 
  370             _log(DATABASE__ERROR, 
"Error in LookupChars query: %s", res.
error.
c_str());
 
  378             " WHERE itemName %s '%s'",
 
  379             exact?
"=":
"LIKE", matchEsc.c_str()
 
  382             _log(DATABASE__ERROR, 
"Error in LookupChars query: %s", res.
error.
c_str());
 
  394     std::string matchEsc;
 
  395     sDatabase.DoEscapeString(matchEsc, match);
 
  404         "  characterID AS ownerID," 
  405         "  characterName AS ownerName," 
  407         " FROM chrCharacters" 
  408         " WHERE characterName %s '%s'", (exact?
"=":
"LIKE"), matchEsc.c_str());
 
  412         "  corporationID AS ownerID," 
  413         "  corporationName AS ownerName," 
  415         " FROM crpCorporation" 
  416         " WHERE corporationName %s '%s'", (exact?
"=":
"LIKE"), matchEsc.c_str());
 
  420         "  corporationID AS ownerID," 
  421         "  corporationName AS ownerName," 
  423         " FROM crpCorporation" 
  424         " WHERE tickerName %s '%s'", (exact?
"=":
"LIKE"), matchEsc.c_str());
 
  428         "  allianceID AS ownerID," 
  429         "  allianceName AS ownerName," 
  432         " WHERE allianceName %s '%s'", (exact?
"=":
"LIKE"), matchEsc.c_str());
 
  436         "  allianceID AS ownerID," 
  437         "  shortName AS ownerName," 
  440         " WHERE shortName %s '%s'", (exact?
"=":
"LIKE"), matchEsc.c_str());
 
  448     sDatabase.DoEscapeString(secure, search);
 
  452         "   corporationID, corporationName, corporationType " 
  453         " FROM crpCorporation " 
  454         " WHERE corporationName LIKE '%s'", secure.c_str()))
 
  467     sDatabase.DoEscapeString(secure, search);
 
  471         "   factionID, factionName " 
  473         " WHERE factionName LIKE '%s'", secure.c_str()))
 
  486     sDatabase.DoEscapeString(secure, search);
 
  490         "   corporationID, corporationName, tickerName " 
  491         " FROM crpCorporation " 
  492         " WHERE tickerName LIKE '%s'", secure.c_str()))
 
  505     sDatabase.DoEscapeString(secure, search);
 
  509         "   stationID, stationName, stationTypeID " 
  511         " WHERE stationName LIKE '%s'", secure.c_str()))
 
  524     sDatabase.DoEscapeString(secure, search);
 
  528         "   itemID, itemName, typeID " 
  530         " WHERE itemName LIKE '%s' AND typeID = %u", secure.c_str(), typeID))
 
  545     for (
auto cur : itemIDs) {
 
  547             sDatabase.RunQuery(res, 
"SELECT characterID, characterName, typeID FROM chrCharacters WHERE characterID = %u", cur);
 
  549             sDatabase.RunQuery(res, 
"SELECT corporationID, corporationName, typeID FROM crpCorporation WHERE corporationID = %u", cur);
 
  551             sDatabase.RunQuery(res, 
"SELECT allianceID, allianceName, typeID FROM alnAlliance WHERE allianceID = %u", cur);
 
  569     std::string table = 
"crpWalletDivisons";
 
  571         table = 
"crpNPCWalletDivisons";
 
  574         " SELECT division1,division2,division3,division4,division5,division6,division7" 
  576         " WHERE corporationID = %u", table.c_str(), corpID))
 
  578         codelog(CORP__DB_ERROR, 
"Error in retrieving corporation's data (%u)", corpID);
 
  592         _log(CORP__DB_ERROR, 
"CorpID %u has no division data.", corpID);
 
static bool IncrementLoginCount(uint32 accountID)
 
#define sConfig
A macro for easier access to the singleton. 
 
static void SetCharacterOnlineStatus(uint32 char_id, bool online=false)
 
#define IsNPCCorp(itemID)
 
uint32 GetStationOwner(uint32 stationID)
 
uint32 finalCorporationID
 
void ProcessRealChange(const char *key, double oldValue, double newValue, PyDict *notif, std::vector< std::string > &dbQ)
 
const char * GetText(uint32 index) const 
 
#define _log(type, fmt,...)
 
int32 GetInt(uint32 index) const 
 
void ProcessIntChange(const char *key, uint32 oldValue, uint32 newValue, PyDict *notif, std::vector< std::string > &dbQ)
 
static PyRep * LookupCorporationTickers(const std::string &)
 
uint32 GetUInt(uint32 index) const 
 
static const std::array< std::string, 18 > badChars
 
static PyRep * LookupOwners(const char *match, bool exact=false)
 
Python floating point number. 
 
static void SaveKillOrLoss(CharKillData &data)
 
static uint32 CreateNewAccount(const char *login, const char *pass, const char *passHash, int64 role)
 
static void SetAccountBanStatus(uint32 accountID, bool banned=false)
 
static uint32 SetClientSeed()
 
static void SaveServerStats(double threads, float rss, float vm, float user, float kernel, uint32 items, uint32 bubbles)
 
static void GetCorpHangarNames(uint32 corpID, std::map< uint8, std::string > &hangarNames)
 
static bool GetConstant(const char *name, uint32 &into)
 
void ProcessStringChange(const char *key, const std::string &oldValue, std::string newValue, PyDict *notif, std::vector< std::string > &dbQ)
 
bool GetRow(DBResultRow &into)
 
static PyRep * LookupKnownLocationsByGroup(const std::string &, uint32)
 
#define sLog
Evaluates to a NewLog instance. 
 
static PyRep * LookupCorporations(const std::string &)
 
const char * c_str() const 
 
static void UpdatePassword(uint32 accountID, const char *pass)
 
#define codelog(type, fmt,...)
 
static void SetAccountOnlineStatus(uint32 accountID, bool online=false)
 
uint32 victimCorporationID
 
PyObject * DBResultToRowset(DBQueryResult &result)
 
bool IsNull(uint32 index) const 
 
#define IsPlayerCorp(itemID)
 
#define IsCharacterID(itemID)
 
void ProcessLongChange(const char *key, int64 oldValue, int64 newValue, PyDict *notif, std::vector< std::string > &dbQ)
 
double finalSecurityStatus
 
static bool UpdateAccountHash(const char *username, std::string &hash)
 
static PyRep * PrimeOwners(std::vector< int32 > &itemIDs)
 
static PyRep * LookupChars(const char *match, bool exact=false)
 
static bool GetAccountInformation(CryptoChallengePacket &ccp, AccountData &aData, std::string &failMsg)
 
static void SetServerOnlineStatus(bool online=false)
 
static PyRep * LookupStations(const std::string &)
 
static bool ValidateAccountName(CryptoChallengePacket &ccp, std::string &failMsg)
 
#define IsAlliance(itemID)
 
typeID Spawn an NPC with the specified type text Search for items matching the specified query() type() key(value)-Send an OnRemoteMessage" ) COMMAND( setbpattr
 
static PyRep * LookupFactions(const std::string &)
 
int64 GetInt64(uint32 index) const 
 
entityID heal the character with the entityID note giving you detailed ship status information gives a list of all dynamic entities and players and their destinyState in this bubble shows some current destiny variables save all items
 
void SetItem(PyRep *key, PyRep *value)
SetItem adds or sets a database entry. 
 
void SetItemString(const char *key, PyRep *value)
SetItemString adds or sets a database entry. 
 
bool icontains(std::string data, std::string toSearch, size_t pos=0)