[Feature] Add Experience Gain Toggle. (#2676)

* [Feature] Add Experience Gain Toggle.

# Perl
- Add `$client->IsEXPEnabled()`.
- Add `$client->SetEXPEnabled(is_exp_enabled)`.

# Lua
- Add `client:IsEXPEnabled()`.
- Add `client:SetEXPEnabled(is_exp_enabled)`.

# Commands
- Add `#exptoggle [Toggle] - Toggle your or your target's experience gain.`.

# Notes
- Allows operators to turn on/off a player's experience gain individually without changing their rule values.
- The command allows operators to give players access to the command to disable their own experience gain.
This commit is contained in:
Alex King
2022-12-30 17:30:23 -05:00
committed by GitHub
parent 0c9c78fbab
commit a6fa6084fa
16 changed files with 489 additions and 371 deletions
+20 -1
View File
@@ -738,7 +738,7 @@ bool Client::Save(uint8 iCommitNow) {
}
}
database.SaveCharacterData(CharacterID(), AccountID(), &m_pp, &m_epp); /* Save Character Data */
database.SaveCharacterData(this, &m_pp, &m_epp); /* Save Character Data */
return true;
}
@@ -9136,6 +9136,25 @@ void Client::SetDevToolsEnabled(bool in_dev_tools_enabled)
Client::dev_tools_enabled = in_dev_tools_enabled;
}
bool Client::IsEXPEnabled() const {
return m_exp_enabled;
}
void Client::SetEXPEnabled(bool is_exp_enabled)
{
auto c = CharacterDataRepository::FindOne(database, CharacterID());
c.exp_enabled = is_exp_enabled;
auto updated = CharacterDataRepository::UpdateOne(database, c);
if (!updated) {
return;
}
m_exp_enabled = is_exp_enabled;
}
/**
* @param model_id
*/
+5
View File
@@ -239,6 +239,9 @@ public:
bool IsDevToolsEnabled() const;
void SetDevToolsEnabled(bool in_dev_tools_enabled);
bool IsEXPEnabled() const;
void SetEXPEnabled(bool is_exp_enabled);
void SetPrimaryWeaponOrnamentation(uint32 model_id);
void SetSecondaryWeaponOrnamentation(uint32 model_id);
@@ -1963,6 +1966,8 @@ public:
int64 GetSharedTaskId() const;
private:
bool m_exp_enabled;
//Anti Spam Stuff
Timer *KarmaUpdateTimer;
uint32 TotalKarma;
+8 -4
View File
@@ -1217,15 +1217,19 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app)
}
/* Load Character Data */
query = StringFormat("SELECT `lfp`, `lfg`, `xtargets`, `firstlogon`, `guild_id`, `rank` FROM `character_data` LEFT JOIN `guild_members` ON `id` = `char_id` WHERE `id` = %i", cid);
query = fmt::format(
"SELECT `lfp`, `lfg`, `xtargets`, `firstlogon`, `guild_id`, `rank`, `exp_enabled` FROM `character_data` LEFT JOIN `guild_members` ON `id` = `char_id` WHERE `id` = {}",
cid
);
auto results = database.QueryDatabase(query);
for (auto row = results.begin(); row != results.end(); ++row) {
for (auto row : results) {
if (row[4] && atoi(row[4]) > 0) {
guild_id = atoi(row[4]);
if (row[5] != nullptr) { guildrank = atoi(row[5]); }
else { guildrank = GUILD_RANK_NONE; }
guildrank = row[5] ? atoi(row[5]) : GUILD_RANK_NONE;
}
SetEXPEnabled(atobool(row[6]));
if (LFP) { LFP = atoi(row[0]); }
if (LFG) { LFG = atoi(row[1]); }
if (row[3])
+2
View File
@@ -140,6 +140,7 @@ int command_init(void)
command_add("enablerecipe", "[Recipe ID] - Enables a Recipe", AccountStatus::QuestTroupe, command_enablerecipe) ||
command_add("endurance", "Restores your or your target's endurance.", AccountStatus::Guide, command_endurance) ||
command_add("equipitem", "[slotid(0-21)] - Equip the item on your cursor into the specified slot", AccountStatus::Guide, command_equipitem) ||
command_add("exptoggle", "[Toggle] - Toggle your or your target's experience gain.", AccountStatus::QuestTroupe, command_exptoggle) ||
command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", AccountStatus::QuestTroupe, command_faction) ||
command_add("factionassociation", "[factionid] [amount] - triggers a faction hits via association", AccountStatus::GMLeadAdmin, command_faction_association) ||
command_add("feature", "Change your or your target's feature's temporarily", AccountStatus::QuestTroupe, command_feature) ||
@@ -977,6 +978,7 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/enablerecipe.cpp"
#include "gm_commands/endurance.cpp"
#include "gm_commands/equipitem.cpp"
#include "gm_commands/exptoggle.cpp"
#include "gm_commands/faction.cpp"
#include "gm_commands/feature.cpp"
#include "gm_commands/findaa.cpp"
+1
View File
@@ -82,6 +82,7 @@ void command_emptyinventory(Client *c, const Seperator *sep);
void command_enablerecipe(Client *c, const Seperator *sep);
void command_endurance(Client *c, const Seperator *sep);
void command_equipitem(Client *c, const Seperator *sep);
void command_exptoggle(Client *c, const Seperator *sep);
void command_faction(Client *c, const Seperator *sep);
void command_faction_association(Client *c, const Seperator *sep);
void command_feature(Client *c, const Seperator *sep);
+4 -1
View File
@@ -496,7 +496,7 @@ void Client::CalculateExp(uint32 in_add_exp, uint32 &add_exp, uint32 &add_aaxp,
}
add_exp = GetEXP() + add_exp;
//Enforce Percent XP Cap per kill, if rule is enabled
int kill_percent_xp_cap = RuleI(Character, ExperiencePercentCapPerKill);
if (kill_percent_xp_cap >= 0) {
@@ -509,6 +509,9 @@ void Client::CalculateExp(uint32 in_add_exp, uint32 &add_exp, uint32 &add_aaxp,
}
void Client::AddEXP(uint32 in_add_exp, uint8 conlevel, bool resexp) {
if (!IsEXPEnabled()) {
return;
}
EVENT_ITEM_ScriptStopReturn();
+28
View File
@@ -0,0 +1,28 @@
#include "../client.h"
void command_exptoggle(Client *c, const Seperator *sep)
{
auto arguments = sep->argnum;
if (!arguments || arguments > 1) {
c->Message(Chat::White, "Usage: #exptoggle [Toggle] - Toggle your or your target's experience gain.");
return;
}
auto t = c;
if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) {
t = c->GetTarget()->CastToClient();
}
const auto is_exp_enabled = Strings::ToBool(sep->arg[1]);
t->SetEXPEnabled(is_exp_enabled);
c->Message(
Chat::White,
fmt::format(
"Experience gain for {} is now {}abled.",
c->GetTargetDescription(t, TargetDescriptionType::LCSelf),
is_exp_enabled ? "en" : "dis"
).c_str()
);
}
+12
View File
@@ -2906,6 +2906,16 @@ luabind::object Lua_Client::GetAugmentIDsBySlotID(lua_State* L, int16 slot_id) {
return lua_table;
}
bool Lua_Client::IsEXPEnabled() {
Lua_Safe_Call_Bool();
return self->IsEXPEnabled();
}
void Lua_Client::SetEXPEnabled(bool is_exp_enabled) {
Lua_Safe_Call_Void();
self->SetEXPEnabled(is_exp_enabled);
}
#ifdef BOTS
int Lua_Client::GetBotRequiredLevel()
@@ -3248,6 +3258,7 @@ luabind::scope lua_register_client() {
.def("IsCrouching", (bool(Lua_Client::*)(void))&Lua_Client::IsCrouching)
.def("IsDead", &Lua_Client::IsDead)
.def("IsDueling", (bool(Lua_Client::*)(void))&Lua_Client::IsDueling)
.def("IsEXPEnabled", (bool(Lua_Client::*)(void))&Lua_Client::IsEXPEnabled)
.def("IsGrouped", (bool(Lua_Client::*)(void))&Lua_Client::IsGrouped)
.def("IsLD", (bool(Lua_Client::*)(void))&Lua_Client::IsLD)
.def("IsMedding", (bool(Lua_Client::*)(void))&Lua_Client::IsMedding)
@@ -3409,6 +3420,7 @@ luabind::scope lua_register_client() {
.def("SetDueling", (void(Lua_Client::*)(bool))&Lua_Client::SetDueling)
.def("SetEXP", (void(Lua_Client::*)(uint32,uint32))&Lua_Client::SetEXP)
.def("SetEXP", (void(Lua_Client::*)(uint32,uint32,bool))&Lua_Client::SetEXP)
.def("SetEXPEnabled", (void(Lua_Client::*)(bool))&Lua_Client::SetEXPEnabled)
.def("SetEXPModifier", (void(Lua_Client::*)(uint32,double))&Lua_Client::SetEXPModifier)
.def("SetEXPModifier", (void(Lua_Client::*)(uint32,double,int16))&Lua_Client::SetEXPModifier)
.def("SetEbonCrystals", (void(Lua_Client::*)(uint32))&Lua_Client::SetEbonCrystals)
+2
View File
@@ -455,6 +455,8 @@ public:
std::string GetGuildPublicNote();
void MaxSkills();
luabind::object GetAugmentIDsBySlotID(lua_State* L, int16 slot_id);
bool IsEXPEnabled();
void SetEXPEnabled(bool is_exp_enabled);
void ApplySpell(int spell_id);
void ApplySpell(int spell_id, int duration);
+12
View File
@@ -2784,6 +2784,16 @@ perl::array Perl_Client_GetAugmentIDsBySlotID(Client* self, int16 slot_id)
return result;
}
bool Perl_Client_IsEXPEnabled(Client* self)
{
return self->IsEXPEnabled();
}
void Perl_Client_SetEXPEnabled(Client* self, bool is_exp_enabled)
{
self->SetEXPEnabled(is_exp_enabled);
}
#ifdef BOTS
int Perl_Client_GetBotRequiredLevel(Client* self)
@@ -3119,6 +3129,7 @@ void perl_register_client()
package.add("IsBecomeNPC", &Perl_Client_IsBecomeNPC);
package.add("IsCrouching", &Perl_Client_IsCrouching);
package.add("IsDueling", &Perl_Client_IsDueling);
package.add("IsEXPEnabled", &Perl_Client_IsEXPEnabled);
package.add("IsGrouped", &Perl_Client_IsGrouped);
package.add("IsLD", &Perl_Client_IsLD);
package.add("IsMedding", &Perl_Client_IsMedding);
@@ -3282,6 +3293,7 @@ void perl_register_client()
package.add("SetEbonCrystals", &Perl_Client_SetEbonCrystals);
package.add("SetEndurance", &Perl_Client_SetEndurance);
package.add("SetEnvironmentDamageModifier", &Perl_Client_SetEnvironmentDamageModifier);
package.add("SetEXPEnabled", &Perl_Client_SetEXPEnabled);
package.add("SetFactionLevel", &Perl_Client_SetFactionLevel);
package.add("SetFactionLevel2", (void(*)(Client*, uint32, int32, uint8, uint8, uint8, int32))&Perl_Client_SetFactionLevel2);
package.add("SetFactionLevel2", (void(*)(Client*, uint32, int32, uint8, uint8, uint8, int32, uint8))&Perl_Client_SetFactionLevel2);
+121 -106
View File
@@ -1144,16 +1144,24 @@ bool ZoneDatabase::SaveCharacterLeadershipAA(uint32 character_id, PlayerProfile_
return true;
}
bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp){
bool ZoneDatabase::SaveCharacterData(
Client* c,
PlayerProfile_Struct* pp,
ExtendedProfile_Struct* m_epp
) {
if (!c) {
return false;
}
/* If this is ever zero - the client hasn't fully loaded and potentially crashed during zone */
if (account_id <= 0)
if (c->AccountID() <= 0) {
return false;
}
std::string mail_key = database.GetMailKey(character_id);
const auto mail_key = database.GetMailKey(c->CharacterID());
clock_t t = std::clock(); /* Function timer start */
std::string query = StringFormat(
const auto query = fmt::format(
"REPLACE INTO `character_data` ("
" id, "
" account_id, "
@@ -1185,6 +1193,7 @@ bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, Pla
" title, "
" suffix, "
" exp, "
" exp_enabled, "
" points, "
" mana, "
" cur_hp, "
@@ -1252,106 +1261,107 @@ bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, Pla
" mailkey "
") "
"VALUES ("
"%u," // id " id, "
"%u," // account_id " account_id, "
"'%s'," // `name` pp->name, " `name`, "
"'%s'," // last_name pp->last_name, " last_name, "
"%u," // gender pp->gender, " gender, "
"%u," // race pp->race, " race, "
"%u," // class pp->class_, " class, "
"%u," // `level` pp->level, " `level`, "
"%u," // deity pp->deity, " deity, "
"%u," // birthday pp->birthday, " birthday, "
"%u," // last_login pp->lastlogin, " last_login, "
"%u," // time_played pp->timePlayedMin, " time_played, "
"%u," // pvp_status pp->pvp, " pvp_status, "
"%u," // level2 pp->level2, " level2, "
"%u," // anon pp->anon, " anon, "
"%u," // gm pp->gm, " gm, "
"%u," // intoxication pp->intoxication, " intoxication, "
"%u," // hair_color pp->haircolor, " hair_color, "
"%u," // beard_color pp->beardcolor, " beard_color, "
"%u," // eye_color_1 pp->eyecolor1, " eye_color_1, "
"%u," // eye_color_2 pp->eyecolor2, " eye_color_2, "
"%u," // hair_style pp->hairstyle, " hair_style, "
"%u," // beard pp->beard, " beard, "
"%u," // ability_time_seconds pp->ability_time_seconds, " ability_time_seconds, "
"%u," // ability_number pp->ability_number, " ability_number, "
"%u," // ability_time_minutes pp->ability_time_minutes, " ability_time_minutes, "
"%u," // ability_time_hours pp->ability_time_hours, " ability_time_hours, "
"'%s'," // title pp->title, " title, " "
"'%s'," // suffix pp->suffix, " suffix, "
"%u," // exp pp->exp, " exp, "
"%u," // points pp->points, " points, "
"%u," // mana pp->mana, " mana, "
"%u," // cur_hp pp->cur_hp, " cur_hp, "
"%u," // str pp->STR, " str, "
"%u," // sta pp->STA, " sta, "
"%u," // cha pp->CHA, " cha, "
"%u," // dex pp->DEX, " dex, "
"%u," // `int` pp->INT, " `int`, "
"%u," // agi pp->AGI, " agi, "
"%u," // wis pp->WIS, " wis, "
"%u," // face pp->face, " face, "
"%f," // y pp->y, " y, "
"%f," // x pp->x, " x, "
"%f," // z pp->z, " z, "
"%f," // heading pp->heading, " heading, "
"%u," // pvp2 pp->pvp2, " pvp2, "
"%u," // pvp_type pp->pvptype, " pvp_type, "
"%u," // autosplit_enabled pp->autosplit, " autosplit_enabled, "
"%u," // zone_change_count pp->zone_change_count, " zone_change_count, "
"%u," // drakkin_heritage pp->drakkin_heritage, " drakkin_heritage, "
"%u," // drakkin_tattoo pp->drakkin_tattoo, " drakkin_tattoo, "
"%u," // drakkin_details pp->drakkin_details, " drakkin_details, "
"%i," // toxicity pp->toxicity, " toxicity, "
"%i," // hunger_level pp->hunger_level, " hunger_level, "
"%i," // thirst_level pp->thirst_level, " thirst_level, "
"%u," // ability_up pp->ability_up, " ability_up, "
"%u," // zone_id pp->zone_id, " zone_id, "
"%u," // zone_instance pp->zoneInstance, " zone_instance, "
"%u," // leadership_exp_on pp->leadAAActive, " leadership_exp_on, "
"%u," // ldon_points_guk pp->ldon_points_guk, " ldon_points_guk, "
"%u," // ldon_points_mir pp->ldon_points_mir, " ldon_points_mir, "
"%u," // ldon_points_mmc pp->ldon_points_mmc, " ldon_points_mmc, "
"%u," // ldon_points_ruj pp->ldon_points_ruj, " ldon_points_ruj, "
"%u," // ldon_points_tak pp->ldon_points_tak, " ldon_points_tak, "
"%u," // ldon_points_available pp->ldon_points_available, " ldon_points_available, "
"%u," // tribute_time_remaining pp->tribute_time_remaining, " tribute_time_remaining, "
"%u," // show_helm pp->showhelm, " show_helm, "
"%u," // career_tribute_points pp->career_tribute_points, " career_tribute_points, "
"%u," // tribute_points pp->tribute_points, " tribute_points, "
"%u," // tribute_active pp->tribute_active, " tribute_active, "
"%u," // endurance pp->endurance, " endurance, "
"%u," // group_leadership_exp pp->group_leadership_exp, " group_leadership_exp, "
"%u," // raid_leadership_exp pp->raid_leadership_exp, " raid_leadership_exp, "
"%u," // group_leadership_points pp->group_leadership_points, " group_leadership_points, "
"%u," // raid_leadership_points pp->raid_leadership_points, " raid_leadership_points, "
"%u," // air_remaining pp->air_remaining, " air_remaining, "
"%u," // pvp_kills pp->PVPKills, " pvp_kills, "
"%u," // pvp_deaths pp->PVPDeaths, " pvp_deaths, "
"%u," // pvp_current_points pp->PVPCurrentPoints, " pvp_current_points, "
"%u," // pvp_career_points pp->PVPCareerPoints, " pvp_career_points, "
"%u," // pvp_best_kill_streak pp->PVPBestKillStreak, " pvp_best_kill_streak, "
"%u," // pvp_worst_death_streak pp->PVPWorstDeathStreak, " pvp_worst_death_streak, "
"%u," // pvp_current_kill_streak pp->PVPCurrentKillStreak, " pvp_current_kill_streak, "
"%u," // aa_points_spent pp->aapoints_spent, " aa_points_spent, "
"%u," // aa_exp pp->expAA, " aa_exp, "
"%u," // aa_points pp->aapoints, " aa_points, "
"%u," // group_auto_consent pp->groupAutoconsent, " group_auto_consent, "
"%u," // raid_auto_consent pp->raidAutoconsent, " raid_auto_consent, "
"%u," // guild_auto_consent pp->guildAutoconsent, " guild_auto_consent, "
"%u," // RestTimer pp->RestTimer, " RestTimer) "
"%u," // e_aa_effects
"%u," // e_percent_to_aa
"%u," // e_expended_aa_spent
"%u," // e_last_invsnapshot
"'%s'" // mailkey mail_key
"{}," // id " id, "
"{}," // account_id " account_id, "
"'{}'," // `name` pp->name, " `name`, "
"'{}'," // last_name pp->last_name, " last_name, "
"{}," // gender pp->gender, " gender, "
"{}," // race pp->race, " race, "
"{}," // class pp->class_, " class, "
"{}," // `level` pp->level, " `level`, "
"{}," // deity pp->deity, " deity, "
"{}," // birthday pp->birthday, " birthday, "
"{}," // last_login pp->lastlogin, " last_login, "
"{}," // time_played pp->timePlayedMin, " time_played, "
"{}," // pvp_status pp->pvp, " pvp_status, "
"{}," // level2 pp->level2, " level2, "
"{}," // anon pp->anon, " anon, "
"{}," // gm pp->gm, " gm, "
"{}," // intoxication pp->intoxication, " intoxication, "
"{}," // hair_color pp->haircolor, " hair_color, "
"{}," // beard_color pp->beardcolor, " beard_color, "
"{}," // eye_color_1 pp->eyecolor1, " eye_color_1, "
"{}," // eye_color_2 pp->eyecolor2, " eye_color_2, "
"{}," // hair_style pp->hairstyle, " hair_style, "
"{}," // beard pp->beard, " beard, "
"{}," // ability_time_seconds pp->ability_time_seconds, " ability_time_seconds, "
"{}," // ability_number pp->ability_number, " ability_number, "
"{}," // ability_time_minutes pp->ability_time_minutes, " ability_time_minutes, "
"{}," // ability_time_hours pp->ability_time_hours, " ability_time_hours, "
"'{}'," // title pp->title, " title, " "
"'{}'," // suffix pp->suffix, " suffix, "
"{}," // exp pp->exp, " exp, "
"{}," // exp_enabled epp->exp_enabled, " exp_enabled, "
"{}," // points pp->points, " points, "
"{}," // mana pp->mana, " mana, "
"{}," // cur_hp pp->cur_hp, " cur_hp, "
"{}," // str pp->STR, " str, "
"{}," // sta pp->STA, " sta, "
"{}," // cha pp->CHA, " cha, "
"{}," // dex pp->DEX, " dex, "
"{}," // `int` pp->INT, " `int`, "
"{}," // agi pp->AGI, " agi, "
"{}," // wis pp->WIS, " wis, "
"{}," // face pp->face, " face, "
"{:.2f}," // y pp->y, " y, "
"{:.2f}," // x pp->x, " x, "
"{:.2f}," // z pp->z, " z, "
"{:.2f}," // heading pp->heading, " heading, "
"{}," // pvp2 pp->pvp2, " pvp2, "
"{}," // pvp_type pp->pvptype, " pvp_type, "
"{}," // autosplit_enabled pp->autosplit, " autosplit_enabled, "
"{}," // zone_change_count pp->zone_change_count, " zone_change_count, "
"{}," // drakkin_heritage pp->drakkin_heritage, " drakkin_heritage, "
"{}," // drakkin_tattoo pp->drakkin_tattoo, " drakkin_tattoo, "
"{}," // drakkin_details pp->drakkin_details, " drakkin_details, "
"{}," // toxicity pp->toxicity, " toxicity, "
"{}," // hunger_level pp->hunger_level, " hunger_level, "
"{}," // thirst_level pp->thirst_level, " thirst_level, "
"{}," // ability_up pp->ability_up, " ability_up, "
"{}," // zone_id pp->zone_id, " zone_id, "
"{}," // zone_instance pp->zoneInstance, " zone_instance, "
"{}," // leadership_exp_on pp->leadAAActive, " leadership_exp_on, "
"{}," // ldon_points_guk pp->ldon_points_guk, " ldon_points_guk, "
"{}," // ldon_points_mir pp->ldon_points_mir, " ldon_points_mir, "
"{}," // ldon_points_mmc pp->ldon_points_mmc, " ldon_points_mmc, "
"{}," // ldon_points_ruj pp->ldon_points_ruj, " ldon_points_ruj, "
"{}," // ldon_points_tak pp->ldon_points_tak, " ldon_points_tak, "
"{}," // ldon_points_available pp->ldon_points_available, " ldon_points_available, "
"{}," // tribute_time_remaining pp->tribute_time_remaining, " tribute_time_remaining, "
"{}," // show_helm pp->showhelm, " show_helm, "
"{}," // career_tribute_points pp->career_tribute_points, " career_tribute_points, "
"{}," // tribute_points pp->tribute_points, " tribute_points, "
"{}," // tribute_active pp->tribute_active, " tribute_active, "
"{}," // endurance pp->endurance, " endurance, "
"{}," // group_leadership_exp pp->group_leadership_exp, " group_leadership_exp, "
"{}," // raid_leadership_exp pp->raid_leadership_exp, " raid_leadership_exp, "
"{}," // group_leadership_points pp->group_leadership_points, " group_leadership_points, "
"{}," // raid_leadership_points pp->raid_leadership_points, " raid_leadership_points, "
"{}," // air_remaining pp->air_remaining, " air_remaining, "
"{}," // pvp_kills pp->PVPKills, " pvp_kills, "
"{}," // pvp_deaths pp->PVPDeaths, " pvp_deaths, "
"{}," // pvp_current_points pp->PVPCurrentPoints, " pvp_current_points, "
"{}," // pvp_career_points pp->PVPCareerPoints, " pvp_career_points, "
"{}," // pvp_best_kill_streak pp->PVPBestKillStreak, " pvp_best_kill_streak, "
"{}," // pvp_worst_death_streak pp->PVPWorstDeathStreak, " pvp_worst_death_streak, "
"{}," // pvp_current_kill_streak pp->PVPCurrentKillStreak, " pvp_current_kill_streak, "
"{}," // aa_points_spent pp->aapoints_spent, " aa_points_spent, "
"{}," // aa_exp pp->expAA, " aa_exp, "
"{}," // aa_points pp->aapoints, " aa_points, "
"{}," // group_auto_consent pp->groupAutoconsent, " group_auto_consent, "
"{}," // raid_auto_consent pp->raidAutoconsent, " raid_auto_consent, "
"{}," // guild_auto_consent pp->guildAutoconsent, " guild_auto_consent, "
"{}," // RestTimer pp->RestTimer, " RestTimer) "
"{}," // e_aa_effects
"{}," // e_percent_to_aa
"{}," // e_expended_aa_spent
"{}," // e_last_invsnapshot
"'{}'" // mailkey mail_key
")",
character_id, // " id, "
account_id, // " account_id, "
Strings::Escape(pp->name).c_str(), // " `name`, "
Strings::Escape(pp->last_name).c_str(), // " last_name, "
c->CharacterID(), // " id, "
c->AccountID(), // " account_id, "
Strings::Escape(pp->name), // " `name`, "
Strings::Escape(pp->last_name), // " last_name, "
pp->gender, // " gender, "
pp->race, // " race, "
pp->class_, // " class, "
@@ -1375,9 +1385,10 @@ bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, Pla
pp->ability_number, // " ability_number, "
pp->ability_time_minutes, // " ability_time_minutes, "
pp->ability_time_hours, // " ability_time_hours, "
Strings::Escape(pp->title).c_str(), // " title, "
Strings::Escape(pp->suffix).c_str(), // " suffix, "
Strings::Escape(pp->title), // " title, "
Strings::Escape(pp->suffix), // " suffix, "
pp->exp, // " exp, "
c->IsEXPEnabled(), // " exp_enabled, "
pp->points, // " points, "
pp->mana, // " mana, "
pp->cur_hp, // " cur_hp, "
@@ -1445,7 +1456,11 @@ bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, Pla
mail_key.c_str()
);
auto results = database.QueryDatabase(query);
LogDebug("ZoneDatabase::SaveCharacterData [{}], done Took [{}] seconds", character_id, ((float)(std::clock() - t)) / CLOCKS_PER_SEC);
LogDebug(
"ZoneDatabase::SaveCharacterData [{}], done Took [{}] seconds",
c->CharacterID(),
((float)(std::clock() - t)) / CLOCKS_PER_SEC
);
return true;
}
+1 -1
View File
@@ -400,7 +400,7 @@ public:
bool SaveCharacterBandolier(uint32 character_id, uint8 bandolier_id, uint8 bandolier_slot, uint32 item_id, uint32 icon, const char* bandolier_name);
bool SaveCharacterBindPoint(uint32 character_id, const BindStruct &bind, uint32 bind_number);
bool SaveCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp);
bool SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
bool SaveCharacterData(Client* c, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
bool SaveCharacterDisc(uint32 character_id, uint32 slot_id, uint32 disc_id);
bool SaveCharacterLanguage(uint32 character_id, uint32 lang_id, uint32 value);
bool SaveCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp);