mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 13:41:31 +00:00
Added transactions for corpse creation, added sql to fix a bug in raid member saving in some situations, fixed a bug in encounters
This commit is contained in:
parent
fe7774ab75
commit
d987ccf289
@ -234,6 +234,18 @@ bool DBcore::RunQuery(const char* query, uint32 querylen, char* errbuf, MYSQL_RE
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DBcore::TransactionBegin() {
|
||||||
|
QueryDatabase("START TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBcore::TransactionCommit() {
|
||||||
|
QueryDatabase("COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBcore::TransactionRollback() {
|
||||||
|
QueryDatabase("ROLLBACK");
|
||||||
|
}
|
||||||
|
|
||||||
uint32 DBcore::DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen) {
|
uint32 DBcore::DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen) {
|
||||||
// No good reason to lock the DB, we only need it in the first place to check char encoding.
|
// No good reason to lock the DB, we only need it in the first place to check char encoding.
|
||||||
// LockMutex lock(&MDatabase);
|
// LockMutex lock(&MDatabase);
|
||||||
|
|||||||
@ -26,6 +26,9 @@ public:
|
|||||||
bool RunQuery(const char* query, uint32 querylen, char* errbuf = 0, MYSQL_RES** result = 0, uint32* affected_rows = 0, uint32* last_insert_id = 0, uint32* errnum = 0, bool retry = true);
|
bool RunQuery(const char* query, uint32 querylen, char* errbuf = 0, MYSQL_RES** result = 0, uint32* affected_rows = 0, uint32* last_insert_id = 0, uint32* errnum = 0, bool retry = true);
|
||||||
MySQLRequestResult QueryDatabase(const char* query, uint32 querylen, bool retryOnFailureOnce = true);
|
MySQLRequestResult QueryDatabase(const char* query, uint32 querylen, bool retryOnFailureOnce = true);
|
||||||
MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true);
|
MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true);
|
||||||
|
void TransactionBegin();
|
||||||
|
void TransactionCommit();
|
||||||
|
void TransactionRollback();
|
||||||
uint32 DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen);
|
uint32 DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen);
|
||||||
void ping();
|
void ping();
|
||||||
MYSQL* getMySQL(){ return &mysql; }
|
MYSQL* getMySQL(){ return &mysql; }
|
||||||
|
|||||||
@ -402,6 +402,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
database.TransactionBegin();
|
||||||
if(removed_list.size() != 0) {
|
if(removed_list.size() != 0) {
|
||||||
std::stringstream ss("");
|
std::stringstream ss("");
|
||||||
ss << "DELETE FROM inventory WHERE charid=" << client->CharacterID();
|
ss << "DELETE FROM inventory WHERE charid=" << client->CharacterID();
|
||||||
@ -433,6 +434,12 @@ Corpse::Corpse(Client* client, int32 in_rezexp)
|
|||||||
|
|
||||||
client->CalcBonuses(); // will only affect offline profile viewing of dead characters..unneeded overhead
|
client->CalcBonuses(); // will only affect offline profile viewing of dead characters..unneeded overhead
|
||||||
client->Save();
|
client->Save();
|
||||||
|
|
||||||
|
Rezzed(false);
|
||||||
|
Save();
|
||||||
|
database.TransactionCommit();
|
||||||
|
|
||||||
|
return;
|
||||||
} //end "not leaving naked corpses"
|
} //end "not leaving naked corpses"
|
||||||
|
|
||||||
Rezzed(false);
|
Rezzed(false);
|
||||||
|
|||||||
@ -146,6 +146,7 @@ void unregister_event(std::string package_name, std::string name, int evt) {
|
|||||||
iter = elist.erase(iter);
|
iter = elist.erase(iter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
++iter;
|
||||||
}
|
}
|
||||||
lua_encounter_events_registered[package_name] = elist;
|
lua_encounter_events_registered[package_name] = elist;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,6 +94,10 @@ void Raid::AddMember(Client *c, uint32 group, bool rleader, bool groupleader, bo
|
|||||||
c->GetName(), groupleader, rleader, looter);
|
c->GetName(), groupleader, rleader, looter);
|
||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
|
|
||||||
|
if(!results.Success()) {
|
||||||
|
LogFile->write(EQEMuLog::Error, "Error inserting into raid members: %s", results.ErrorMessage().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
LearnMembers();
|
LearnMembers();
|
||||||
VerifyRaid();
|
VerifyRaid();
|
||||||
if (rleader) {
|
if (rleader) {
|
||||||
@ -225,12 +229,12 @@ void Raid::SetRaidLeader(const char *wasLead, const char *name)
|
|||||||
std::string query = StringFormat("UPDATE raid_members SET israidleader = 0 WHERE name = '%s'", wasLead);
|
std::string query = StringFormat("UPDATE raid_members SET israidleader = 0 WHERE name = '%s'", wasLead);
|
||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
if (!results.Success())
|
if (!results.Success())
|
||||||
printf("Set Raid Leader error: %s\n", results.ErrorMessage().c_str());
|
LogFile->write(EQEMuLog::Error, "Set Raid Leader error: %s\n", results.ErrorMessage().c_str());
|
||||||
|
|
||||||
query = StringFormat("UPDATE raid_members SET israidleader = 1 WHERE name = '%s'", name);
|
query = StringFormat("UPDATE raid_members SET israidleader = 1 WHERE name = '%s'", name);
|
||||||
results = database.QueryDatabase(query);
|
results = database.QueryDatabase(query);
|
||||||
if (!results.Success())
|
if (!results.Success())
|
||||||
printf("Set Raid Leader error: %s\n", results.ErrorMessage().c_str());
|
LogFile->write(EQEMuLog::Error, "Set Raid Leader error: %s\n", results.ErrorMessage().c_str());
|
||||||
|
|
||||||
strn0cpy(leadername, name, 64);
|
strn0cpy(leadername, name, 64);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user