game: prepare guild setup queries
This commit is contained in:
@@ -103,6 +103,76 @@ namespace
|
|||||||
return stmt.BindParam(MYSQL_TYPE_LONG, &guildId);
|
return stmt.BindParam(MYSQL_TYPE_LONG, &guildId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool InsertGuildRecord(const char* name, uint32_t masterPid, uint32_t& guildId)
|
||||||
|
{
|
||||||
|
CStmt stmt;
|
||||||
|
const std::string query = std::string("INSERT INTO guild") + get_table_postfix()
|
||||||
|
+ "(name, master, sp, level, exp, skill_point, skill) "
|
||||||
|
+ "VALUES(?, ?, 1000, 1, 0, 0, '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0')";
|
||||||
|
|
||||||
|
guildId = 0;
|
||||||
|
|
||||||
|
if (!PrepareGameStmt(stmt, query))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!stmt.BindParam(MYSQL_TYPE_STRING, const_cast<char*>(name))
|
||||||
|
|| !stmt.BindParam(MYSQL_TYPE_LONG, &masterPid)
|
||||||
|
|| !stmt.Execute())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
guildId = static_cast<uint32_t>(stmt.GetInsertId());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InsertGuildGrade(uint32_t guildId, int grade, const char* gradeName, int authFlag)
|
||||||
|
{
|
||||||
|
CStmt stmt;
|
||||||
|
const std::string query = std::string("INSERT INTO guild_grade") + get_table_postfix() + " VALUES(?, ?, ?, ?)";
|
||||||
|
|
||||||
|
if (!PrepareGameStmt(stmt, query))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!stmt.BindParam(MYSQL_TYPE_LONG, &guildId)
|
||||||
|
|| !stmt.BindParam(MYSQL_TYPE_LONG, &grade)
|
||||||
|
|| !stmt.BindParam(MYSQL_TYPE_STRING, const_cast<char*>(gradeName))
|
||||||
|
|| !stmt.BindParam(MYSQL_TYPE_LONG, &authFlag))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return stmt.Execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoadGuildInviteLimit(uint32_t guildId, uint32_t& inviteLimit, bool& found)
|
||||||
|
{
|
||||||
|
CStmt stmt;
|
||||||
|
const std::string query = "SELECT value FROM guild_invite_limit WHERE id=?";
|
||||||
|
|
||||||
|
inviteLimit = 0;
|
||||||
|
found = false;
|
||||||
|
|
||||||
|
if (!PrepareGameStmt(stmt, query))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!stmt.BindParam(MYSQL_TYPE_LONG, &guildId)
|
||||||
|
|| !stmt.BindResult(MYSQL_TYPE_LONG, &inviteLimit)
|
||||||
|
|| !stmt.Execute())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stmt.iRows == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!stmt.Fetch())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
found = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
struct FGuildNameSender
|
struct FGuildNameSender
|
||||||
{
|
{
|
||||||
FGuildNameSender(uint32_t id, const char* guild_name) : id(id), name(guild_name)
|
FGuildNameSender(uint32_t id, const char* guild_name) : id(id), name(guild_name)
|
||||||
@@ -149,22 +219,15 @@ CGuild::CGuild(TGuildCreateParameter & cp)
|
|||||||
m_data.grade_array[i].auth_flag = 0;
|
m_data.grade_array[i].auth_flag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pmsg = DBManager::instance().DirectQuery(
|
InsertGuildRecord(m_data.name, m_data.master_pid, m_data.guild_id);
|
||||||
"INSERT INTO guild%s(name, master, sp, level, exp, skill_point, skill) "
|
|
||||||
"VALUES('%s', %u, 1000, 1, 0, 0, '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0')",
|
|
||||||
get_table_postfix(), m_data.name, m_data.master_pid);
|
|
||||||
|
|
||||||
// TODO if error occur?
|
|
||||||
m_data.guild_id = pmsg->Get()->uiInsertID;
|
|
||||||
|
|
||||||
for (int i = 0; i < GUILD_GRADE_COUNT; ++i)
|
for (int i = 0; i < GUILD_GRADE_COUNT; ++i)
|
||||||
{
|
{
|
||||||
DBManager::instance().Query("INSERT INTO guild_grade%s VALUES(%u, %d, '%s', %d)",
|
InsertGuildGrade(
|
||||||
get_table_postfix(),
|
m_data.guild_id,
|
||||||
m_data.guild_id,
|
i + 1,
|
||||||
i + 1,
|
m_data.grade_array[i].grade_name,
|
||||||
m_data.grade_array[i].grade_name,
|
m_data.grade_array[i].auth_flag);
|
||||||
m_data.grade_array[i].auth_flag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ComputeGuildPoints();
|
ComputeGuildPoints();
|
||||||
@@ -2200,13 +2263,13 @@ CGuild::GuildJoinErrCode CGuild::VerifyGuildJoinableCondition( const LPCHARACTER
|
|||||||
}
|
}
|
||||||
else if ( LC_IsBrazil() == true )
|
else if ( LC_IsBrazil() == true )
|
||||||
{
|
{
|
||||||
auto pMsg = DBManager::instance().DirectQuery("SELECT value FROM guild_invite_limit WHERE id=%d", GetID());
|
uint32_t inviteLimit = 0;
|
||||||
|
bool hasInviteLimit = false;
|
||||||
|
|
||||||
if ( pMsg->Get()->uiNumRows > 0 )
|
if (LoadGuildInviteLimit(GetID(), inviteLimit, hasInviteLimit) && hasInviteLimit)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
|
|
||||||
time_t limit_time=0;
|
time_t limit_time=0;
|
||||||
str_to_number( limit_time, row[0] );
|
limit_time = inviteLimit;
|
||||||
|
|
||||||
if (test_server)
|
if (test_server)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -188,3 +188,11 @@ unsigned long long CStmt::GetAffectedRows() const
|
|||||||
|
|
||||||
return mysql_stmt_affected_rows(m_pkStmt);
|
return mysql_stmt_affected_rows(m_pkStmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long long CStmt::GetInsertId() const
|
||||||
|
{
|
||||||
|
if (!m_pkStmt)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mysql_stmt_insert_id(m_pkStmt);
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class CStmt
|
|||||||
bool Fetch();
|
bool Fetch();
|
||||||
unsigned long GetResultLength(unsigned int index) const;
|
unsigned long GetResultLength(unsigned int index) const;
|
||||||
unsigned long long GetAffectedRows() const;
|
unsigned long long GetAffectedRows() const;
|
||||||
|
unsigned long long GetInsertId() const;
|
||||||
|
|
||||||
void Error(const char * c_pszMsg);
|
void Error(const char * c_pszMsg);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user