exp modifiers, pets, timers

This commit is contained in:
Chris Miles
2025-05-17 15:43:31 -05:00
parent 36fc7b6e7f
commit 2c1cb55f14
6 changed files with 102 additions and 109 deletions
+1 -2
View File
@@ -11478,9 +11478,8 @@ void Client::SaveSpells()
}
}
CharacterSpellsRepository::DeleteWhere(database, fmt::format("id = {}", CharacterID()));
if (!character_spells.empty()) {
CharacterSpellsRepository::DeleteWhere(database, fmt::format("id = {}", CharacterID()));
CharacterSpellsRepository::InsertMany(database, character_spells);
}
}
+18 -17
View File
@@ -827,6 +827,8 @@ void Client::CompleteConnect()
parse->EventPlayer(EVENT_CONNECT, this, export_string, 0);
}
RecordStats();
if (is_first_login) {
e.first_login = time(nullptr);
TraderRepository::DeleteWhere(database, fmt::format("`char_id` = '{}'", CharacterID()));
@@ -1002,7 +1004,6 @@ void Client::CompleteConnect()
safe_delete(p);
}
RecordStats();
AutoGrantAAPoints();
// set initial position for mob tracking
@@ -1366,22 +1367,22 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app)
// set to full support in case they're a gm with items in disabled expansion slots...but, have their gm flag off...
// item loss will occur when they use the 'empty' slots, if this is not done
m_inv.SetGMInventory(true);
loaditems = database.GetInventory(this); /* Load Character Inventory */
database.LoadCharacterBandolier(cid, &m_pp); /* Load Character Bandolier */
database.LoadCharacterBindPoint(cid, &m_pp); /* Load Character Bind */
database.LoadCharacterMaterialColor(cid, &m_pp); /* Load Character Material */
database.LoadCharacterPotionBelt(cid, &m_pp); /* Load Character Potion Belt */
database.LoadCharacterCurrency(cid, &m_pp); /* Load Character Currency into PP */
database.LoadCharacterData(cid, &m_pp, &m_epp); /* Load Character Data from DB into PP as well as E_PP */
database.LoadCharacterSkills(cid, &m_pp); /* Load Character Skills */
database.LoadCharacterInspectMessage(cid, &m_inspect_message); /* Load Character Inspect Message */
database.LoadCharacterSpellBook(cid, &m_pp); /* Load Character Spell Book */
database.LoadCharacterMemmedSpells(cid, &m_pp); /* Load Character Memorized Spells */
database.LoadCharacterLanguages(cid, &m_pp); /* Load Character Languages */
database.LoadCharacterLeadershipAbilities(cid, &m_pp); /* Load Character Leadership AA's */
database.LoadCharacterTribute(this); /* Load CharacterTribute */
database.LoadCharacterEXPModifier(this); /* Load Character EXP Modifier */
database.LoadCharacterTitleSets(this); /* Load Character Title Sets */
loaditems = database.GetInventory(this);
database.LoadCharacterData(cid, &m_pp, &m_epp);
database.LoadCharacterBandolier(cid, &m_pp);
database.LoadCharacterBindPoint(cid, &m_pp);
database.LoadCharacterMaterialColor(cid, &m_pp);
database.LoadCharacterPotionBelt(cid, &m_pp);
database.LoadCharacterCurrency(cid, &m_pp);
database.LoadCharacterSkills(cid, &m_pp);
database.LoadCharacterInspectMessage(cid, &m_inspect_message);
database.LoadCharacterSpellBook(cid, &m_pp);
database.LoadCharacterMemmedSpells(cid, &m_pp);
database.LoadCharacterLanguages(cid, &m_pp);
database.LoadCharacterLeadershipAbilities(cid, &m_pp);
database.LoadCharacterTribute(this);
database.LoadCharacterEXPModifier(this);
database.LoadCharacterTitleSets(this);
// this pattern is strange
// this is remnants of the old way of doing things
+43 -36
View File
@@ -642,8 +642,8 @@ bool ZoneDatabase::LoadCharacterLanguages(uint32 character_id, PlayerProfile_Str
return false;
}
for (int i = 0; i < MAX_PP_LANGUAGE; ++i) { // Initialize Languages
pp->languages[i] = 0;
for (unsigned char & language : pp->languages) { // Initialize Languages
language = 0;
}
for (const auto& e : l) {
@@ -689,8 +689,8 @@ bool ZoneDatabase::LoadCharacterDisciplines(Client* c)
return false;
}
for (int slot_id = 0; slot_id < MAX_PP_DISCIPLINES; slot_id++) {
c->GetPP().disciplines.values[slot_id] = 0;
for (unsigned int & value : c->GetPP().disciplines.values) {
value = 0;
}
for (const auto& e : l) {
@@ -2879,14 +2879,6 @@ void ZoneDatabase::UpdateAltCurrencyValue(uint32 char_id, uint32 currency_id, ui
void ZoneDatabase::SaveBuffs(Client *client)
{
CharacterBuffsRepository::DeleteWhere(
database,
fmt::format(
"`character_id` = {}",
client->CharacterID()
)
);
auto buffs = client->GetBuffs();
const int max_buff_slots = client->GetMaxBuffSlots();
@@ -2904,6 +2896,16 @@ void ZoneDatabase::SaveBuffs(Client *client)
character_buff_count++;
}
if (character_buff_count) {
CharacterBuffsRepository::DeleteWhere(
database,
fmt::format(
"`character_id` = {}",
client->CharacterID()
)
);
}
v.reserve(character_buff_count);
for (int slot_id = 0; slot_id < max_buff_slots; slot_id++) {
@@ -3170,39 +3172,39 @@ void ZoneDatabase::SavePetInfo(Client *client)
}
}
CharacterPetInfoRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
if (!pet_infos.empty()) {
CharacterPetInfoRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
CharacterPetInfoRepository::InsertMany(database, pet_infos);
}
CharacterPetBuffsRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
if (!pet_buffs.empty()) {
CharacterPetBuffsRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
CharacterPetBuffsRepository::InsertMany(database, pet_buffs);
}
CharacterPetInventoryRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
if (!inventory.empty()) {
CharacterPetInventoryRepository::DeleteWhere(
database,
fmt::format(
"`char_id` = {}",
client->CharacterID()
)
);
CharacterPetInventoryRepository::InsertMany(database, inventory);
}
}
@@ -4261,6 +4263,11 @@ void ZoneDatabase::SaveCharacterEXPModifier(Client* c)
EXPModifier m = zone->exp_modifiers[c->CharacterID()];
// if both modifiers are 0, we don't need to save
if (m.aa_modifier == 0 && m.exp_modifier == 0) {
return;
}
CharacterExpModifiersRepository::ReplaceOne(
*this,
CharacterExpModifiersRepository::CharacterExpModifiers{