mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-06 04:42:28 +00:00
Merge a66394e3c46129837b120bf4c298742fcf5f91b5 into e5ce882b9d5784f3c2f4dae763ae243203fabf44
This commit is contained in:
commit
7ef00a8cba
@ -7226,6 +7226,45 @@ ALTER TABLE `npc_spells_entries` MODIFY COLUMN `spellid` INTEGER NOT NULL DEFAUL
|
|||||||
ALTER TABLE `spell_buckets` MODIFY COLUMN `spell_id` INTEGER NOT NULL;
|
ALTER TABLE `spell_buckets` MODIFY COLUMN `spell_id` INTEGER NOT NULL;
|
||||||
)"
|
)"
|
||||||
},
|
},
|
||||||
|
ManifestEntry{
|
||||||
|
.version = 9330,
|
||||||
|
.description = "2026_04_30_buffdurations.sql",
|
||||||
|
.check = "SHOW COLUMNS FROM `character_buffs` LIKE 'initialduration'",
|
||||||
|
.condition = "empty",
|
||||||
|
.match = "",
|
||||||
|
.sql = R"(
|
||||||
|
ALTER TABLE `character_buffs`
|
||||||
|
ADD COLUMN `initialduration` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `ticsremaining`,
|
||||||
|
CHANGE COLUMN `dot_rune` `dot_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
UPDATE `character_buffs` SET `initialduration` = `ticsremaining` WHERE TRUE;
|
||||||
|
|
||||||
|
ALTER TABLE IF EXISTS `merc_buffs`
|
||||||
|
CHANGE COLUMN `dot_rune` `dot_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN `InitialDuration` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `TicsRemaining`,
|
||||||
|
ADD COLUMN `instrument_mod` INT(10) UNSIGNED NOT NULL DEFAULT 10 AFTER `ExtraDIChance`;
|
||||||
|
IF EXISTS(
|
||||||
|
SELECT 1 FROM `information_schema`.`TABLES` WHERE `table_schema` = DATABASE() AND `table_name` = 'merc_buffs'
|
||||||
|
) THEN UPDATE `merc_buffs` SET `InitialDuration` = `TicsRemaining` WHERE TRUE; END IF;
|
||||||
|
|
||||||
|
ALTER TABLE `character_pet_buffs`
|
||||||
|
CHANGE COLUMN `char_id` `character_id` INT(11) UNSIGNED NOT NULL,
|
||||||
|
CHANGE COLUMN `slot` `slot_id` TINYINT(3) UNSIGNED NOT NULL,
|
||||||
|
CHANGE COLUMN `caster_level` `caster_level` TINYINT(3) UNSIGNED NOT NULL,
|
||||||
|
RENAME COLUMN `castername` TO `caster_name`,
|
||||||
|
ADD COLUMN `initialduration` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `ticsremaining`,
|
||||||
|
CHANGE COLUMN `counters` `counters` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
CHANGE COLUMN `numhits` `numhits` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
CHANGE COLUMN `rune` `melee_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
ADD COLUMN `magic_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `melee_rune`,
|
||||||
|
ADD COLUMN `persistent` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `magic_rune`,
|
||||||
|
ADD COLUMN `dot_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `persistent`,
|
||||||
|
ADD COLUMN `caston_x` INT(10) NOT NULL DEFAULT 0 AFTER `dot_rune`,
|
||||||
|
ADD COLUMN `caston_y` INT(10) NOT NULL DEFAULT 0 AFTER `caston_x`,
|
||||||
|
ADD COLUMN `caston_z` INT(10) NOT NULL DEFAULT 0 AFTER `caston_y`,
|
||||||
|
ADD COLUMN `ExtraDIChance` INT(10) NOT NULL DEFAULT 0 AFTER `caston_z`,
|
||||||
|
CHANGE COLUMN `instrument_mod` `instrument_mod` INT(10) UNSIGNED NOT NULL DEFAULT 10 AFTER `ExtraDIChance`;
|
||||||
|
)",
|
||||||
|
},
|
||||||
// -- template; copy/paste this when you need to create a new entry
|
// -- template; copy/paste this when you need to create a new entry
|
||||||
// ManifestEntry{
|
// ManifestEntry{
|
||||||
// .version = 9228,
|
// .version = 9228,
|
||||||
|
|||||||
@ -2191,6 +2191,36 @@ ALTER TABLE `bot_spells_entries` MODIFY COLUMN `spell_id` INTEGER NOT NULL DEFAU
|
|||||||
ALTER TABLE `bot_timers` MODIFY COLUMN `spell_id` INTEGER NOT NULL DEFAULT 0;
|
ALTER TABLE `bot_timers` MODIFY COLUMN `spell_id` INTEGER NOT NULL DEFAULT 0;
|
||||||
)"
|
)"
|
||||||
},
|
},
|
||||||
|
ManifestEntry{
|
||||||
|
.version = 9057,
|
||||||
|
.description = "2026_04_30_buffdurations.sql",
|
||||||
|
.check = "SHOW COLUMNS FROM `bot_buffs` LIKE 'initial_duration'",
|
||||||
|
.condition = "empty",
|
||||||
|
.match = "",
|
||||||
|
.sql = R"(
|
||||||
|
ALTER TABLE `bot_buffs`
|
||||||
|
ADD COLUMN `caster_name` VARCHAR(64) NOT NULL DEFAULT '' AFTER `caster_level`,
|
||||||
|
ADD COLUMN `initial_duration` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `tics_remaining`;
|
||||||
|
UPDATE `bot_buffs` SET `initial_duration` = `tics_remaining` WHERE TRUE;
|
||||||
|
|
||||||
|
ALTER TABLE `bot_pet_buffs`
|
||||||
|
ADD COLUMN `caster_name` VARCHAR(64) NOT NULL DEFAULT '' AFTER `caster_level`,
|
||||||
|
CHANGE COLUMN `duration` `tics_remaining` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `caster_name`,
|
||||||
|
ADD COLUMN `initial_duration` INT(11) SIGNED NOT NULL DEFAULT 0 AFTER `tics_remaining`,
|
||||||
|
ADD COLUMN `counters` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `initial_duration`,
|
||||||
|
ADD COLUMN `numhits` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `counters`,
|
||||||
|
ADD COLUMN `melee_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `numhits`,
|
||||||
|
ADD COLUMN `magic_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `melee_rune`,
|
||||||
|
ADD COLUMN `dot_rune` INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `magic_rune`,
|
||||||
|
ADD COLUMN `persistent` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `dot_rune`,
|
||||||
|
ADD COLUMN `caston_x` INT(10) NOT NULL DEFAULT 0 AFTER `persistent`,
|
||||||
|
ADD COLUMN `caston_y` INT(10) NOT NULL DEFAULT 0 AFTER `caston_x`,
|
||||||
|
ADD COLUMN `caston_z` INT(10) NOT NULL DEFAULT 0 AFTER `caston_y`,
|
||||||
|
ADD COLUMN `extra_di_chance` INT(10) NOT NULL DEFAULT 0 AFTER `caston_z`,
|
||||||
|
ADD COLUMN `instrument_mod` INT(10) UNSIGNED NOT NULL DEFAULT 10 AFTER `extra_di_chance`;
|
||||||
|
UPDATE `bot_pet_buffs` SET `initial_duration` = `tics_remaining` WHERE TRUE;
|
||||||
|
)",
|
||||||
|
},
|
||||||
// -- template; copy/paste this when you need to create a new entry
|
// -- template; copy/paste this when you need to create a new entry
|
||||||
// ManifestEntry{
|
// ManifestEntry{
|
||||||
// .version = 9228,
|
// .version = 9228,
|
||||||
|
|||||||
@ -36,26 +36,28 @@
|
|||||||
class BaseBotBuffsRepository {
|
class BaseBotBuffsRepository {
|
||||||
public:
|
public:
|
||||||
struct BotBuffs {
|
struct BotBuffs {
|
||||||
uint32_t buffs_index;
|
uint32_t buffs_index;
|
||||||
uint32_t bot_id;
|
uint32_t bot_id;
|
||||||
int32_t spell_id;
|
int32_t spell_id;
|
||||||
uint8_t caster_level;
|
uint8_t caster_level;
|
||||||
uint32_t duration_formula;
|
std::string caster_name;
|
||||||
uint32_t tics_remaining;
|
uint32_t duration_formula;
|
||||||
uint32_t poison_counters;
|
uint32_t tics_remaining;
|
||||||
uint32_t disease_counters;
|
int32_t initial_duration;
|
||||||
uint32_t curse_counters;
|
uint32_t poison_counters;
|
||||||
uint32_t corruption_counters;
|
uint32_t disease_counters;
|
||||||
uint32_t numhits;
|
uint32_t curse_counters;
|
||||||
uint32_t melee_rune;
|
uint32_t corruption_counters;
|
||||||
uint32_t magic_rune;
|
uint32_t numhits;
|
||||||
uint32_t dot_rune;
|
uint32_t melee_rune;
|
||||||
int8_t persistent;
|
uint32_t magic_rune;
|
||||||
int32_t caston_x;
|
uint32_t dot_rune;
|
||||||
int32_t caston_y;
|
int8_t persistent;
|
||||||
int32_t caston_z;
|
int32_t caston_x;
|
||||||
uint32_t extra_di_chance;
|
int32_t caston_y;
|
||||||
int32_t instrument_mod;
|
int32_t caston_z;
|
||||||
|
uint32_t extra_di_chance;
|
||||||
|
int32_t instrument_mod;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
@ -70,8 +72,10 @@ public:
|
|||||||
"bot_id",
|
"bot_id",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
|
"caster_name",
|
||||||
"duration_formula",
|
"duration_formula",
|
||||||
"tics_remaining",
|
"tics_remaining",
|
||||||
|
"initial_duration",
|
||||||
"poison_counters",
|
"poison_counters",
|
||||||
"disease_counters",
|
"disease_counters",
|
||||||
"curse_counters",
|
"curse_counters",
|
||||||
@ -96,8 +100,10 @@ public:
|
|||||||
"bot_id",
|
"bot_id",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
|
"caster_name",
|
||||||
"duration_formula",
|
"duration_formula",
|
||||||
"tics_remaining",
|
"tics_remaining",
|
||||||
|
"initial_duration",
|
||||||
"poison_counters",
|
"poison_counters",
|
||||||
"disease_counters",
|
"disease_counters",
|
||||||
"curse_counters",
|
"curse_counters",
|
||||||
@ -156,8 +162,10 @@ public:
|
|||||||
e.bot_id = 0;
|
e.bot_id = 0;
|
||||||
e.spell_id = 0;
|
e.spell_id = 0;
|
||||||
e.caster_level = 0;
|
e.caster_level = 0;
|
||||||
|
e.caster_name = "";
|
||||||
e.duration_formula = 0;
|
e.duration_formula = 0;
|
||||||
e.tics_remaining = 0;
|
e.tics_remaining = 0;
|
||||||
|
e.initial_duration = 0;
|
||||||
e.poison_counters = 0;
|
e.poison_counters = 0;
|
||||||
e.disease_counters = 0;
|
e.disease_counters = 0;
|
||||||
e.curse_counters = 0;
|
e.curse_counters = 0;
|
||||||
@ -212,22 +220,24 @@ public:
|
|||||||
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration_formula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.tics_remaining = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
e.duration_formula = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||||
e.poison_counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.tics_remaining = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||||
e.disease_counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.initial_duration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.curse_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.poison_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.corruption_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.disease_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.numhits = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.curse_counters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.corruption_counters = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.numhits = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
e.melee_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.persistent = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
|
e.magic_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.dot_rune = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_x = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.extra_di_chance = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
|
e.caston_y = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
e.instrument_mod = row[19] ? static_cast<int32_t>(atoi(row[19])) : 10;
|
e.caston_z = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.extra_di_chance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
|
||||||
|
e.instrument_mod = row[21] ? static_cast<int32_t>(atoi(row[21])) : 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -264,22 +274,24 @@ public:
|
|||||||
v.push_back(columns[1] + " = " + std::to_string(e.bot_id));
|
v.push_back(columns[1] + " = " + std::to_string(e.bot_id));
|
||||||
v.push_back(columns[2] + " = " + std::to_string(e.spell_id));
|
v.push_back(columns[2] + " = " + std::to_string(e.spell_id));
|
||||||
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
||||||
v.push_back(columns[4] + " = " + std::to_string(e.duration_formula));
|
v.push_back(columns[4] + " = '" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(columns[5] + " = " + std::to_string(e.tics_remaining));
|
v.push_back(columns[5] + " = " + std::to_string(e.duration_formula));
|
||||||
v.push_back(columns[6] + " = " + std::to_string(e.poison_counters));
|
v.push_back(columns[6] + " = " + std::to_string(e.tics_remaining));
|
||||||
v.push_back(columns[7] + " = " + std::to_string(e.disease_counters));
|
v.push_back(columns[7] + " = " + std::to_string(e.initial_duration));
|
||||||
v.push_back(columns[8] + " = " + std::to_string(e.curse_counters));
|
v.push_back(columns[8] + " = " + std::to_string(e.poison_counters));
|
||||||
v.push_back(columns[9] + " = " + std::to_string(e.corruption_counters));
|
v.push_back(columns[9] + " = " + std::to_string(e.disease_counters));
|
||||||
v.push_back(columns[10] + " = " + std::to_string(e.numhits));
|
v.push_back(columns[10] + " = " + std::to_string(e.curse_counters));
|
||||||
v.push_back(columns[11] + " = " + std::to_string(e.melee_rune));
|
v.push_back(columns[11] + " = " + std::to_string(e.corruption_counters));
|
||||||
v.push_back(columns[12] + " = " + std::to_string(e.magic_rune));
|
v.push_back(columns[12] + " = " + std::to_string(e.numhits));
|
||||||
v.push_back(columns[13] + " = " + std::to_string(e.dot_rune));
|
v.push_back(columns[13] + " = " + std::to_string(e.melee_rune));
|
||||||
v.push_back(columns[14] + " = " + std::to_string(e.persistent));
|
v.push_back(columns[14] + " = " + std::to_string(e.magic_rune));
|
||||||
v.push_back(columns[15] + " = " + std::to_string(e.caston_x));
|
v.push_back(columns[15] + " = " + std::to_string(e.dot_rune));
|
||||||
v.push_back(columns[16] + " = " + std::to_string(e.caston_y));
|
v.push_back(columns[16] + " = " + std::to_string(e.persistent));
|
||||||
v.push_back(columns[17] + " = " + std::to_string(e.caston_z));
|
v.push_back(columns[17] + " = " + std::to_string(e.caston_x));
|
||||||
v.push_back(columns[18] + " = " + std::to_string(e.extra_di_chance));
|
v.push_back(columns[18] + " = " + std::to_string(e.caston_y));
|
||||||
v.push_back(columns[19] + " = " + std::to_string(e.instrument_mod));
|
v.push_back(columns[19] + " = " + std::to_string(e.caston_z));
|
||||||
|
v.push_back(columns[20] + " = " + std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(columns[21] + " = " + std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -305,8 +317,10 @@ public:
|
|||||||
v.push_back(std::to_string(e.bot_id));
|
v.push_back(std::to_string(e.bot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.duration_formula));
|
v.push_back(std::to_string(e.duration_formula));
|
||||||
v.push_back(std::to_string(e.tics_remaining));
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
v.push_back(std::to_string(e.poison_counters));
|
v.push_back(std::to_string(e.poison_counters));
|
||||||
v.push_back(std::to_string(e.disease_counters));
|
v.push_back(std::to_string(e.disease_counters));
|
||||||
v.push_back(std::to_string(e.curse_counters));
|
v.push_back(std::to_string(e.curse_counters));
|
||||||
@ -354,8 +368,10 @@ public:
|
|||||||
v.push_back(std::to_string(e.bot_id));
|
v.push_back(std::to_string(e.bot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.duration_formula));
|
v.push_back(std::to_string(e.duration_formula));
|
||||||
v.push_back(std::to_string(e.tics_remaining));
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
v.push_back(std::to_string(e.poison_counters));
|
v.push_back(std::to_string(e.poison_counters));
|
||||||
v.push_back(std::to_string(e.disease_counters));
|
v.push_back(std::to_string(e.disease_counters));
|
||||||
v.push_back(std::to_string(e.curse_counters));
|
v.push_back(std::to_string(e.curse_counters));
|
||||||
@ -407,22 +423,24 @@ public:
|
|||||||
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration_formula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.tics_remaining = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
e.duration_formula = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||||
e.poison_counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.tics_remaining = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||||
e.disease_counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.initial_duration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.curse_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.poison_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.corruption_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.disease_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.numhits = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.curse_counters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.corruption_counters = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.numhits = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
e.melee_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.persistent = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
|
e.magic_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.dot_rune = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_x = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.extra_di_chance = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
|
e.caston_y = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
e.instrument_mod = row[19] ? static_cast<int32_t>(atoi(row[19])) : 10;
|
e.caston_z = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.extra_di_chance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
|
||||||
|
e.instrument_mod = row[21] ? static_cast<int32_t>(atoi(row[21])) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -451,22 +469,24 @@ public:
|
|||||||
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.bot_id = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration_formula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.tics_remaining = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
e.duration_formula = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||||
e.poison_counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.tics_remaining = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||||
e.disease_counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.initial_duration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.curse_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.poison_counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.corruption_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.disease_counters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.numhits = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.curse_counters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.corruption_counters = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.numhits = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
e.melee_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.persistent = row[14] ? static_cast<int8_t>(atoi(row[14])) : 0;
|
e.magic_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.dot_rune = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_x = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.extra_di_chance = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 0;
|
e.caston_y = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
e.instrument_mod = row[19] ? static_cast<int32_t>(atoi(row[19])) : 10;
|
e.caston_z = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.extra_di_chance = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 0;
|
||||||
|
e.instrument_mod = row[21] ? static_cast<int32_t>(atoi(row[21])) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -545,8 +565,10 @@ public:
|
|||||||
v.push_back(std::to_string(e.bot_id));
|
v.push_back(std::to_string(e.bot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.duration_formula));
|
v.push_back(std::to_string(e.duration_formula));
|
||||||
v.push_back(std::to_string(e.tics_remaining));
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
v.push_back(std::to_string(e.poison_counters));
|
v.push_back(std::to_string(e.poison_counters));
|
||||||
v.push_back(std::to_string(e.disease_counters));
|
v.push_back(std::to_string(e.disease_counters));
|
||||||
v.push_back(std::to_string(e.curse_counters));
|
v.push_back(std::to_string(e.curse_counters));
|
||||||
@ -587,8 +609,10 @@ public:
|
|||||||
v.push_back(std::to_string(e.bot_id));
|
v.push_back(std::to_string(e.bot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.duration_formula));
|
v.push_back(std::to_string(e.duration_formula));
|
||||||
v.push_back(std::to_string(e.tics_remaining));
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
v.push_back(std::to_string(e.poison_counters));
|
v.push_back(std::to_string(e.poison_counters));
|
||||||
v.push_back(std::to_string(e.disease_counters));
|
v.push_back(std::to_string(e.disease_counters));
|
||||||
v.push_back(std::to_string(e.curse_counters));
|
v.push_back(std::to_string(e.curse_counters));
|
||||||
|
|||||||
@ -36,11 +36,24 @@
|
|||||||
class BaseBotPetBuffsRepository {
|
class BaseBotPetBuffsRepository {
|
||||||
public:
|
public:
|
||||||
struct BotPetBuffs {
|
struct BotPetBuffs {
|
||||||
uint32_t pet_buffs_index;
|
uint32_t pet_buffs_index;
|
||||||
uint32_t pets_index;
|
uint32_t pets_index;
|
||||||
int32_t spell_id;
|
int32_t spell_id;
|
||||||
uint32_t caster_level;
|
uint32_t caster_level;
|
||||||
uint32_t duration;
|
std::string caster_name;
|
||||||
|
int32_t tics_remaining;
|
||||||
|
int32_t initial_duration;
|
||||||
|
uint32_t counters;
|
||||||
|
uint32_t numhits;
|
||||||
|
uint32_t melee_rune;
|
||||||
|
uint32_t magic_rune;
|
||||||
|
uint32_t dot_rune;
|
||||||
|
uint8_t persistent;
|
||||||
|
int32_t caston_x;
|
||||||
|
int32_t caston_y;
|
||||||
|
int32_t caston_z;
|
||||||
|
int32_t extra_di_chance;
|
||||||
|
uint32_t instrument_mod;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
@ -55,7 +68,20 @@ public:
|
|||||||
"pets_index",
|
"pets_index",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
"duration",
|
"caster_name",
|
||||||
|
"tics_remaining",
|
||||||
|
"initial_duration",
|
||||||
|
"counters",
|
||||||
|
"numhits",
|
||||||
|
"melee_rune",
|
||||||
|
"magic_rune",
|
||||||
|
"dot_rune",
|
||||||
|
"persistent",
|
||||||
|
"caston_x",
|
||||||
|
"caston_y",
|
||||||
|
"caston_z",
|
||||||
|
"extra_di_chance",
|
||||||
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +92,20 @@ public:
|
|||||||
"pets_index",
|
"pets_index",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
"duration",
|
"caster_name",
|
||||||
|
"tics_remaining",
|
||||||
|
"initial_duration",
|
||||||
|
"counters",
|
||||||
|
"numhits",
|
||||||
|
"melee_rune",
|
||||||
|
"magic_rune",
|
||||||
|
"dot_rune",
|
||||||
|
"persistent",
|
||||||
|
"caston_x",
|
||||||
|
"caston_y",
|
||||||
|
"caston_z",
|
||||||
|
"extra_di_chance",
|
||||||
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,11 +146,24 @@ public:
|
|||||||
{
|
{
|
||||||
BotPetBuffs e{};
|
BotPetBuffs e{};
|
||||||
|
|
||||||
e.pet_buffs_index = 0;
|
e.pet_buffs_index = 0;
|
||||||
e.pets_index = 0;
|
e.pets_index = 0;
|
||||||
e.spell_id = 0;
|
e.spell_id = 0;
|
||||||
e.caster_level = 0;
|
e.caster_level = 0;
|
||||||
e.duration = 0;
|
e.caster_name = "";
|
||||||
|
e.tics_remaining = 0;
|
||||||
|
e.initial_duration = 0;
|
||||||
|
e.counters = 0;
|
||||||
|
e.numhits = 0;
|
||||||
|
e.melee_rune = 0;
|
||||||
|
e.magic_rune = 0;
|
||||||
|
e.dot_rune = 0;
|
||||||
|
e.persistent = 0;
|
||||||
|
e.caston_x = 0;
|
||||||
|
e.caston_y = 0;
|
||||||
|
e.caston_z = 0;
|
||||||
|
e.extra_di_chance = 0;
|
||||||
|
e.instrument_mod = 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -148,11 +200,24 @@ public:
|
|||||||
if (results.RowCount() == 1) {
|
if (results.RowCount() == 1) {
|
||||||
BotPetBuffs e{};
|
BotPetBuffs e{};
|
||||||
|
|
||||||
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
|
e.tics_remaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
|
e.initial_duration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.extra_di_chance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -189,7 +254,20 @@ public:
|
|||||||
v.push_back(columns[1] + " = " + std::to_string(e.pets_index));
|
v.push_back(columns[1] + " = " + std::to_string(e.pets_index));
|
||||||
v.push_back(columns[2] + " = " + std::to_string(e.spell_id));
|
v.push_back(columns[2] + " = " + std::to_string(e.spell_id));
|
||||||
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
||||||
v.push_back(columns[4] + " = " + std::to_string(e.duration));
|
v.push_back(columns[4] + " = '" + Strings::Escape(e.caster_name) + "'");
|
||||||
|
v.push_back(columns[5] + " = " + std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(columns[6] + " = " + std::to_string(e.initial_duration));
|
||||||
|
v.push_back(columns[7] + " = " + std::to_string(e.counters));
|
||||||
|
v.push_back(columns[8] + " = " + std::to_string(e.numhits));
|
||||||
|
v.push_back(columns[9] + " = " + std::to_string(e.melee_rune));
|
||||||
|
v.push_back(columns[10] + " = " + std::to_string(e.magic_rune));
|
||||||
|
v.push_back(columns[11] + " = " + std::to_string(e.dot_rune));
|
||||||
|
v.push_back(columns[12] + " = " + std::to_string(e.persistent));
|
||||||
|
v.push_back(columns[13] + " = " + std::to_string(e.caston_x));
|
||||||
|
v.push_back(columns[14] + " = " + std::to_string(e.caston_y));
|
||||||
|
v.push_back(columns[15] + " = " + std::to_string(e.caston_z));
|
||||||
|
v.push_back(columns[16] + " = " + std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(columns[17] + " = " + std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -215,7 +293,20 @@ public:
|
|||||||
v.push_back(std::to_string(e.pets_index));
|
v.push_back(std::to_string(e.pets_index));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back(std::to_string(e.duration));
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
|
v.push_back(std::to_string(e.counters));
|
||||||
|
v.push_back(std::to_string(e.numhits));
|
||||||
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -249,7 +340,20 @@ public:
|
|||||||
v.push_back(std::to_string(e.pets_index));
|
v.push_back(std::to_string(e.pets_index));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back(std::to_string(e.duration));
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
|
v.push_back(std::to_string(e.counters));
|
||||||
|
v.push_back(std::to_string(e.numhits));
|
||||||
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
@ -283,11 +387,24 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
BotPetBuffs e{};
|
BotPetBuffs e{};
|
||||||
|
|
||||||
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
|
e.tics_remaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
|
e.initial_duration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.extra_di_chance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -312,11 +429,24 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
BotPetBuffs e{};
|
BotPetBuffs e{};
|
||||||
|
|
||||||
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.pet_buffs_index = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.pets_index = row[1] ? static_cast<uint32_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.duration = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
|
e.tics_remaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
|
e.initial_duration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.extra_di_chance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<uint32_t>(strtoul(row[17], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -395,7 +525,20 @@ public:
|
|||||||
v.push_back(std::to_string(e.pets_index));
|
v.push_back(std::to_string(e.pets_index));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back(std::to_string(e.duration));
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
|
v.push_back(std::to_string(e.counters));
|
||||||
|
v.push_back(std::to_string(e.numhits));
|
||||||
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -422,7 +565,20 @@ public:
|
|||||||
v.push_back(std::to_string(e.pets_index));
|
v.push_back(std::to_string(e.pets_index));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back(std::to_string(e.duration));
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
|
v.push_back(std::to_string(e.tics_remaining));
|
||||||
|
v.push_back(std::to_string(e.initial_duration));
|
||||||
|
v.push_back(std::to_string(e.counters));
|
||||||
|
v.push_back(std::to_string(e.numhits));
|
||||||
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.extra_di_chance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,12 +42,13 @@ public:
|
|||||||
uint8_t caster_level;
|
uint8_t caster_level;
|
||||||
std::string caster_name;
|
std::string caster_name;
|
||||||
int32_t ticsremaining;
|
int32_t ticsremaining;
|
||||||
|
int32_t initialduration;
|
||||||
uint32_t counters;
|
uint32_t counters;
|
||||||
uint32_t numhits;
|
uint32_t numhits;
|
||||||
uint32_t melee_rune;
|
uint32_t melee_rune;
|
||||||
uint32_t magic_rune;
|
uint32_t magic_rune;
|
||||||
uint8_t persistent;
|
uint8_t persistent;
|
||||||
int32_t dot_rune;
|
uint32_t dot_rune;
|
||||||
int32_t caston_x;
|
int32_t caston_x;
|
||||||
int32_t caston_y;
|
int32_t caston_y;
|
||||||
int32_t caston_z;
|
int32_t caston_z;
|
||||||
@ -69,6 +70,7 @@ public:
|
|||||||
"caster_level",
|
"caster_level",
|
||||||
"caster_name",
|
"caster_name",
|
||||||
"ticsremaining",
|
"ticsremaining",
|
||||||
|
"initialduration",
|
||||||
"counters",
|
"counters",
|
||||||
"numhits",
|
"numhits",
|
||||||
"melee_rune",
|
"melee_rune",
|
||||||
@ -92,6 +94,7 @@ public:
|
|||||||
"caster_level",
|
"caster_level",
|
||||||
"caster_name",
|
"caster_name",
|
||||||
"ticsremaining",
|
"ticsremaining",
|
||||||
|
"initialduration",
|
||||||
"counters",
|
"counters",
|
||||||
"numhits",
|
"numhits",
|
||||||
"melee_rune",
|
"melee_rune",
|
||||||
@ -143,23 +146,24 @@ public:
|
|||||||
{
|
{
|
||||||
CharacterBuffs e{};
|
CharacterBuffs e{};
|
||||||
|
|
||||||
e.character_id = 0;
|
e.character_id = 0;
|
||||||
e.slot_id = 0;
|
e.slot_id = 0;
|
||||||
e.spell_id = 0;
|
e.spell_id = 0;
|
||||||
e.caster_level = 0;
|
e.caster_level = 0;
|
||||||
e.caster_name = "";
|
e.caster_name = "";
|
||||||
e.ticsremaining = 0;
|
e.ticsremaining = 0;
|
||||||
e.counters = 0;
|
e.initialduration = 0;
|
||||||
e.numhits = 0;
|
e.counters = 0;
|
||||||
e.melee_rune = 0;
|
e.numhits = 0;
|
||||||
e.magic_rune = 0;
|
e.melee_rune = 0;
|
||||||
e.persistent = 0;
|
e.magic_rune = 0;
|
||||||
e.dot_rune = 0;
|
e.persistent = 0;
|
||||||
e.caston_x = 0;
|
e.dot_rune = 0;
|
||||||
e.caston_y = 0;
|
e.caston_x = 0;
|
||||||
e.caston_z = 0;
|
e.caston_y = 0;
|
||||||
e.ExtraDIChance = 0;
|
e.caston_z = 0;
|
||||||
e.instrument_mod = 10;
|
e.ExtraDIChance = 0;
|
||||||
|
e.instrument_mod = 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -196,23 +200,24 @@ public:
|
|||||||
if (results.RowCount() == 1) {
|
if (results.RowCount() == 1) {
|
||||||
CharacterBuffs e{};
|
CharacterBuffs e{};
|
||||||
|
|
||||||
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.caster_name = row[4] ? row[4] : "";
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.initialduration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
|
e.persistent = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
|
e.dot_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
|
e.ExtraDIChance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<int32_t>(atoi(row[17])) : 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -252,17 +257,18 @@ public:
|
|||||||
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
v.push_back(columns[3] + " = " + std::to_string(e.caster_level));
|
||||||
v.push_back(columns[4] + " = '" + Strings::Escape(e.caster_name) + "'");
|
v.push_back(columns[4] + " = '" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(columns[5] + " = " + std::to_string(e.ticsremaining));
|
v.push_back(columns[5] + " = " + std::to_string(e.ticsremaining));
|
||||||
v.push_back(columns[6] + " = " + std::to_string(e.counters));
|
v.push_back(columns[6] + " = " + std::to_string(e.initialduration));
|
||||||
v.push_back(columns[7] + " = " + std::to_string(e.numhits));
|
v.push_back(columns[7] + " = " + std::to_string(e.counters));
|
||||||
v.push_back(columns[8] + " = " + std::to_string(e.melee_rune));
|
v.push_back(columns[8] + " = " + std::to_string(e.numhits));
|
||||||
v.push_back(columns[9] + " = " + std::to_string(e.magic_rune));
|
v.push_back(columns[9] + " = " + std::to_string(e.melee_rune));
|
||||||
v.push_back(columns[10] + " = " + std::to_string(e.persistent));
|
v.push_back(columns[10] + " = " + std::to_string(e.magic_rune));
|
||||||
v.push_back(columns[11] + " = " + std::to_string(e.dot_rune));
|
v.push_back(columns[11] + " = " + std::to_string(e.persistent));
|
||||||
v.push_back(columns[12] + " = " + std::to_string(e.caston_x));
|
v.push_back(columns[12] + " = " + std::to_string(e.dot_rune));
|
||||||
v.push_back(columns[13] + " = " + std::to_string(e.caston_y));
|
v.push_back(columns[13] + " = " + std::to_string(e.caston_x));
|
||||||
v.push_back(columns[14] + " = " + std::to_string(e.caston_z));
|
v.push_back(columns[14] + " = " + std::to_string(e.caston_y));
|
||||||
v.push_back(columns[15] + " = " + std::to_string(e.ExtraDIChance));
|
v.push_back(columns[15] + " = " + std::to_string(e.caston_z));
|
||||||
v.push_back(columns[16] + " = " + std::to_string(e.instrument_mod));
|
v.push_back(columns[16] + " = " + std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(columns[17] + " = " + std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -290,6 +296,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.melee_rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
@ -336,6 +343,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.melee_rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
@ -380,23 +388,24 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
CharacterBuffs e{};
|
CharacterBuffs e{};
|
||||||
|
|
||||||
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.caster_name = row[4] ? row[4] : "";
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.initialduration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
|
e.persistent = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
|
e.dot_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
|
e.ExtraDIChance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<int32_t>(atoi(row[17])) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -421,23 +430,24 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
CharacterBuffs e{};
|
CharacterBuffs e{};
|
||||||
|
|
||||||
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
e.slot_id = row[1] ? static_cast<uint8_t>(strtoul(row[1], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.spell_id = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
||||||
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.caster_level = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.caster_name = row[4] ? row[4] : "";
|
e.caster_name = row[4] ? row[4] : "";
|
||||||
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.ticsremaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.counters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.initialduration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.numhits = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.counters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.melee_rune = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.numhits = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.magic_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.melee_rune = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.persistent = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.magic_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[11] ? static_cast<int32_t>(atoi(row[11])) : 0;
|
e.persistent = row[11] ? static_cast<uint8_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[12] ? static_cast<int32_t>(atoi(row[12])) : 0;
|
e.dot_rune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.caston_y = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.caston_x = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
||||||
e.caston_z = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.caston_y = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
e.ExtraDIChance = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
e.caston_z = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.instrument_mod = row[16] ? static_cast<int32_t>(atoi(row[16])) : 10;
|
e.ExtraDIChance = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.instrument_mod = row[17] ? static_cast<int32_t>(atoi(row[17])) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -518,6 +528,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.melee_rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
@ -557,6 +568,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.melee_rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
|||||||
@ -36,37 +36,53 @@
|
|||||||
class BaseCharacterPetBuffsRepository {
|
class BaseCharacterPetBuffsRepository {
|
||||||
public:
|
public:
|
||||||
struct CharacterPetBuffs {
|
struct CharacterPetBuffs {
|
||||||
int32_t char_id;
|
uint32_t character_id;
|
||||||
int32_t pet;
|
int32_t pet;
|
||||||
int32_t slot;
|
uint8_t slot_id;
|
||||||
int32_t spell_id;
|
int32_t spell_id;
|
||||||
int8_t caster_level;
|
uint8_t caster_level;
|
||||||
std::string castername;
|
std::string caster_name;
|
||||||
int32_t ticsremaining;
|
int32_t ticsremaining;
|
||||||
int32_t counters;
|
int32_t initialduration;
|
||||||
int32_t numhits;
|
uint32_t counters;
|
||||||
int32_t rune;
|
uint32_t numhits;
|
||||||
uint8_t instrument_mod;
|
uint32_t melee_rune;
|
||||||
|
uint32_t magic_rune;
|
||||||
|
uint8_t persistent;
|
||||||
|
uint32_t dot_rune;
|
||||||
|
int32_t caston_x;
|
||||||
|
int32_t caston_y;
|
||||||
|
int32_t caston_z;
|
||||||
|
int32_t ExtraDIChance;
|
||||||
|
uint32_t instrument_mod;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
{
|
{
|
||||||
return std::string("char_id");
|
return std::string("character_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::vector<std::string> Columns()
|
static std::vector<std::string> Columns()
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"char_id",
|
"character_id",
|
||||||
"pet",
|
"pet",
|
||||||
"slot",
|
"slot_id",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
"castername",
|
"caster_name",
|
||||||
"ticsremaining",
|
"ticsremaining",
|
||||||
|
"initialduration",
|
||||||
"counters",
|
"counters",
|
||||||
"numhits",
|
"numhits",
|
||||||
"rune",
|
"melee_rune",
|
||||||
|
"magic_rune",
|
||||||
|
"persistent",
|
||||||
|
"dot_rune",
|
||||||
|
"caston_x",
|
||||||
|
"caston_y",
|
||||||
|
"caston_z",
|
||||||
|
"ExtraDIChance",
|
||||||
"instrument_mod",
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -74,16 +90,24 @@ public:
|
|||||||
static std::vector<std::string> SelectColumns()
|
static std::vector<std::string> SelectColumns()
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"char_id",
|
"character_id",
|
||||||
"pet",
|
"pet",
|
||||||
"slot",
|
"slot_id",
|
||||||
"spell_id",
|
"spell_id",
|
||||||
"caster_level",
|
"caster_level",
|
||||||
"castername",
|
"caster_name",
|
||||||
"ticsremaining",
|
"ticsremaining",
|
||||||
|
"initialduration",
|
||||||
"counters",
|
"counters",
|
||||||
"numhits",
|
"numhits",
|
||||||
"rune",
|
"melee_rune",
|
||||||
|
"magic_rune",
|
||||||
|
"persistent",
|
||||||
|
"dot_rune",
|
||||||
|
"caston_x",
|
||||||
|
"caston_y",
|
||||||
|
"caston_z",
|
||||||
|
"ExtraDIChance",
|
||||||
"instrument_mod",
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -125,17 +149,25 @@ public:
|
|||||||
{
|
{
|
||||||
CharacterPetBuffs e{};
|
CharacterPetBuffs e{};
|
||||||
|
|
||||||
e.char_id = 0;
|
e.character_id = 0;
|
||||||
e.pet = 0;
|
e.pet = 0;
|
||||||
e.slot = 0;
|
e.slot_id = 0;
|
||||||
e.spell_id = 0;
|
e.spell_id = 0;
|
||||||
e.caster_level = 0;
|
e.caster_level = 0;
|
||||||
e.castername = "";
|
e.caster_name = "";
|
||||||
e.ticsremaining = 0;
|
e.ticsremaining = 0;
|
||||||
e.counters = 0;
|
e.initialduration = 0;
|
||||||
e.numhits = 0;
|
e.counters = 0;
|
||||||
e.rune = 0;
|
e.numhits = 0;
|
||||||
e.instrument_mod = 10;
|
e.melee_rune = 0;
|
||||||
|
e.magic_rune = 0;
|
||||||
|
e.persistent = 0;
|
||||||
|
e.dot_rune = 0;
|
||||||
|
e.caston_x = 0;
|
||||||
|
e.caston_y = 0;
|
||||||
|
e.caston_z = 0;
|
||||||
|
e.ExtraDIChance = 0;
|
||||||
|
e.instrument_mod = 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -146,7 +178,7 @@ public:
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
for (auto &character_pet_buffs : character_pet_buffss) {
|
for (auto &character_pet_buffs : character_pet_buffss) {
|
||||||
if (character_pet_buffs.char_id == character_pet_buffs_id) {
|
if (character_pet_buffs.character_id == character_pet_buffs_id) {
|
||||||
return character_pet_buffs;
|
return character_pet_buffs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,17 +204,25 @@ public:
|
|||||||
if (results.RowCount() == 1) {
|
if (results.RowCount() == 1) {
|
||||||
CharacterPetBuffs e{};
|
CharacterPetBuffs e{};
|
||||||
|
|
||||||
e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
||||||
e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.slot_id = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
||||||
e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
|
e.caster_level = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.castername = row[5] ? row[5] : "";
|
e.caster_name = row[5] ? row[5] : "";
|
||||||
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
e.initialduration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
|
e.counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
|
e.numhits = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
|
e.melee_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_y = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.caston_z = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.ExtraDIChance = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
|
e.instrument_mod = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -216,17 +256,25 @@ public:
|
|||||||
|
|
||||||
auto columns = Columns();
|
auto columns = Columns();
|
||||||
|
|
||||||
v.push_back(columns[0] + " = " + std::to_string(e.char_id));
|
v.push_back(columns[0] + " = " + std::to_string(e.character_id));
|
||||||
v.push_back(columns[1] + " = " + std::to_string(e.pet));
|
v.push_back(columns[1] + " = " + std::to_string(e.pet));
|
||||||
v.push_back(columns[2] + " = " + std::to_string(e.slot));
|
v.push_back(columns[2] + " = " + std::to_string(e.slot_id));
|
||||||
v.push_back(columns[3] + " = " + std::to_string(e.spell_id));
|
v.push_back(columns[3] + " = " + std::to_string(e.spell_id));
|
||||||
v.push_back(columns[4] + " = " + std::to_string(e.caster_level));
|
v.push_back(columns[4] + " = " + std::to_string(e.caster_level));
|
||||||
v.push_back(columns[5] + " = '" + Strings::Escape(e.castername) + "'");
|
v.push_back(columns[5] + " = '" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(columns[6] + " = " + std::to_string(e.ticsremaining));
|
v.push_back(columns[6] + " = " + std::to_string(e.ticsremaining));
|
||||||
v.push_back(columns[7] + " = " + std::to_string(e.counters));
|
v.push_back(columns[7] + " = " + std::to_string(e.initialduration));
|
||||||
v.push_back(columns[8] + " = " + std::to_string(e.numhits));
|
v.push_back(columns[8] + " = " + std::to_string(e.counters));
|
||||||
v.push_back(columns[9] + " = " + std::to_string(e.rune));
|
v.push_back(columns[9] + " = " + std::to_string(e.numhits));
|
||||||
v.push_back(columns[10] + " = " + std::to_string(e.instrument_mod));
|
v.push_back(columns[10] + " = " + std::to_string(e.melee_rune));
|
||||||
|
v.push_back(columns[11] + " = " + std::to_string(e.magic_rune));
|
||||||
|
v.push_back(columns[12] + " = " + std::to_string(e.persistent));
|
||||||
|
v.push_back(columns[13] + " = " + std::to_string(e.dot_rune));
|
||||||
|
v.push_back(columns[14] + " = " + std::to_string(e.caston_x));
|
||||||
|
v.push_back(columns[15] + " = " + std::to_string(e.caston_y));
|
||||||
|
v.push_back(columns[16] + " = " + std::to_string(e.caston_z));
|
||||||
|
v.push_back(columns[17] + " = " + std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(columns[18] + " = " + std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -234,7 +282,7 @@ public:
|
|||||||
TableName(),
|
TableName(),
|
||||||
Strings::Implode(", ", v),
|
Strings::Implode(", ", v),
|
||||||
PrimaryKey(),
|
PrimaryKey(),
|
||||||
e.char_id
|
e.character_id
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -248,16 +296,24 @@ public:
|
|||||||
{
|
{
|
||||||
std::vector<std::string> v;
|
std::vector<std::string> v;
|
||||||
|
|
||||||
v.push_back(std::to_string(e.char_id));
|
v.push_back(std::to_string(e.character_id));
|
||||||
v.push_back(std::to_string(e.pet));
|
v.push_back(std::to_string(e.pet));
|
||||||
v.push_back(std::to_string(e.slot));
|
v.push_back(std::to_string(e.slot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.castername) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
v.push_back(std::to_string(e.instrument_mod));
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
@ -269,7 +325,7 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (results.Success()) {
|
if (results.Success()) {
|
||||||
e.char_id = results.LastInsertedID();
|
e.character_id = results.LastInsertedID();
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,16 +344,24 @@ public:
|
|||||||
for (auto &e: entries) {
|
for (auto &e: entries) {
|
||||||
std::vector<std::string> v;
|
std::vector<std::string> v;
|
||||||
|
|
||||||
v.push_back(std::to_string(e.char_id));
|
v.push_back(std::to_string(e.character_id));
|
||||||
v.push_back(std::to_string(e.pet));
|
v.push_back(std::to_string(e.pet));
|
||||||
v.push_back(std::to_string(e.slot));
|
v.push_back(std::to_string(e.slot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.castername) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
v.push_back(std::to_string(e.instrument_mod));
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
@ -332,17 +396,25 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
CharacterPetBuffs e{};
|
CharacterPetBuffs e{};
|
||||||
|
|
||||||
e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
||||||
e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.slot_id = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
||||||
e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
|
e.caster_level = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.castername = row[5] ? row[5] : "";
|
e.caster_name = row[5] ? row[5] : "";
|
||||||
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
e.initialduration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
|
e.counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
|
e.numhits = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
|
e.melee_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_y = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.caston_z = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.ExtraDIChance = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
|
e.instrument_mod = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -367,17 +439,25 @@ public:
|
|||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
CharacterPetBuffs e{};
|
CharacterPetBuffs e{};
|
||||||
|
|
||||||
e.char_id = row[0] ? static_cast<int32_t>(atoi(row[0])) : 0;
|
e.character_id = row[0] ? static_cast<uint32_t>(strtoul(row[0], nullptr, 10)) : 0;
|
||||||
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
e.pet = row[1] ? static_cast<int32_t>(atoi(row[1])) : 0;
|
||||||
e.slot = row[2] ? static_cast<int32_t>(atoi(row[2])) : 0;
|
e.slot_id = row[2] ? static_cast<uint8_t>(strtoul(row[2], nullptr, 10)) : 0;
|
||||||
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
e.spell_id = row[3] ? static_cast<int32_t>(atoi(row[3])) : 0;
|
||||||
e.caster_level = row[4] ? static_cast<int8_t>(atoi(row[4])) : 0;
|
e.caster_level = row[4] ? static_cast<uint8_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.castername = row[5] ? row[5] : "";
|
e.caster_name = row[5] ? row[5] : "";
|
||||||
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
e.ticsremaining = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.counters = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
e.initialduration = row[7] ? static_cast<int32_t>(atoi(row[7])) : 0;
|
||||||
e.numhits = row[8] ? static_cast<int32_t>(atoi(row[8])) : 0;
|
e.counters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.rune = row[9] ? static_cast<int32_t>(atoi(row[9])) : 0;
|
e.numhits = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.instrument_mod = row[10] ? static_cast<uint8_t>(strtoul(row[10], nullptr, 10)) : 10;
|
e.melee_rune = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
|
e.magic_rune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
|
e.persistent = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
|
e.dot_rune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
|
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
||||||
|
e.caston_y = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
|
e.caston_z = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
|
e.ExtraDIChance = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
|
e.instrument_mod = row[18] ? static_cast<uint32_t>(strtoul(row[18], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -452,16 +532,24 @@ public:
|
|||||||
{
|
{
|
||||||
std::vector<std::string> v;
|
std::vector<std::string> v;
|
||||||
|
|
||||||
v.push_back(std::to_string(e.char_id));
|
v.push_back(std::to_string(e.character_id));
|
||||||
v.push_back(std::to_string(e.pet));
|
v.push_back(std::to_string(e.pet));
|
||||||
v.push_back(std::to_string(e.slot));
|
v.push_back(std::to_string(e.slot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.castername) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
v.push_back(std::to_string(e.instrument_mod));
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
@ -485,16 +573,24 @@ public:
|
|||||||
for (auto &e: entries) {
|
for (auto &e: entries) {
|
||||||
std::vector<std::string> v;
|
std::vector<std::string> v;
|
||||||
|
|
||||||
v.push_back(std::to_string(e.char_id));
|
v.push_back(std::to_string(e.character_id));
|
||||||
v.push_back(std::to_string(e.pet));
|
v.push_back(std::to_string(e.pet));
|
||||||
v.push_back(std::to_string(e.slot));
|
v.push_back(std::to_string(e.slot_id));
|
||||||
v.push_back(std::to_string(e.spell_id));
|
v.push_back(std::to_string(e.spell_id));
|
||||||
v.push_back(std::to_string(e.caster_level));
|
v.push_back(std::to_string(e.caster_level));
|
||||||
v.push_back("'" + Strings::Escape(e.castername) + "'");
|
v.push_back("'" + Strings::Escape(e.caster_name) + "'");
|
||||||
v.push_back(std::to_string(e.ticsremaining));
|
v.push_back(std::to_string(e.ticsremaining));
|
||||||
|
v.push_back(std::to_string(e.initialduration));
|
||||||
v.push_back(std::to_string(e.counters));
|
v.push_back(std::to_string(e.counters));
|
||||||
v.push_back(std::to_string(e.numhits));
|
v.push_back(std::to_string(e.numhits));
|
||||||
v.push_back(std::to_string(e.rune));
|
v.push_back(std::to_string(e.melee_rune));
|
||||||
|
v.push_back(std::to_string(e.magic_rune));
|
||||||
|
v.push_back(std::to_string(e.persistent));
|
||||||
|
v.push_back(std::to_string(e.dot_rune));
|
||||||
|
v.push_back(std::to_string(e.caston_x));
|
||||||
|
v.push_back(std::to_string(e.caston_y));
|
||||||
|
v.push_back(std::to_string(e.caston_z));
|
||||||
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
v.push_back(std::to_string(e.instrument_mod));
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
|
|||||||
@ -42,6 +42,7 @@ public:
|
|||||||
uint32_t CasterLevel;
|
uint32_t CasterLevel;
|
||||||
uint32_t DurationFormula;
|
uint32_t DurationFormula;
|
||||||
int32_t TicsRemaining;
|
int32_t TicsRemaining;
|
||||||
|
int32_t InitialDuration;
|
||||||
uint32_t PoisonCounters;
|
uint32_t PoisonCounters;
|
||||||
uint32_t DiseaseCounters;
|
uint32_t DiseaseCounters;
|
||||||
uint32_t CurseCounters;
|
uint32_t CurseCounters;
|
||||||
@ -49,12 +50,13 @@ public:
|
|||||||
uint32_t HitCount;
|
uint32_t HitCount;
|
||||||
uint32_t MeleeRune;
|
uint32_t MeleeRune;
|
||||||
uint32_t MagicRune;
|
uint32_t MagicRune;
|
||||||
int32_t dot_rune;
|
uint32_t dot_rune;
|
||||||
int32_t caston_x;
|
int32_t caston_x;
|
||||||
int8_t Persistent;
|
int8_t Persistent;
|
||||||
int32_t caston_y;
|
int32_t caston_y;
|
||||||
int32_t caston_z;
|
int32_t caston_z;
|
||||||
int32_t ExtraDIChance;
|
int32_t ExtraDIChance;
|
||||||
|
uint32_t instrument_mod;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
@ -71,6 +73,7 @@ public:
|
|||||||
"CasterLevel",
|
"CasterLevel",
|
||||||
"DurationFormula",
|
"DurationFormula",
|
||||||
"TicsRemaining",
|
"TicsRemaining",
|
||||||
|
"InitialDuration",
|
||||||
"PoisonCounters",
|
"PoisonCounters",
|
||||||
"DiseaseCounters",
|
"DiseaseCounters",
|
||||||
"CurseCounters",
|
"CurseCounters",
|
||||||
@ -84,6 +87,7 @@ public:
|
|||||||
"caston_y",
|
"caston_y",
|
||||||
"caston_z",
|
"caston_z",
|
||||||
"ExtraDIChance",
|
"ExtraDIChance",
|
||||||
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,6 +100,7 @@ public:
|
|||||||
"CasterLevel",
|
"CasterLevel",
|
||||||
"DurationFormula",
|
"DurationFormula",
|
||||||
"TicsRemaining",
|
"TicsRemaining",
|
||||||
|
"InitialDuration",
|
||||||
"PoisonCounters",
|
"PoisonCounters",
|
||||||
"DiseaseCounters",
|
"DiseaseCounters",
|
||||||
"CurseCounters",
|
"CurseCounters",
|
||||||
@ -109,6 +114,7 @@ public:
|
|||||||
"caston_y",
|
"caston_y",
|
||||||
"caston_z",
|
"caston_z",
|
||||||
"ExtraDIChance",
|
"ExtraDIChance",
|
||||||
|
"instrument_mod",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +161,7 @@ public:
|
|||||||
e.CasterLevel = 0;
|
e.CasterLevel = 0;
|
||||||
e.DurationFormula = 0;
|
e.DurationFormula = 0;
|
||||||
e.TicsRemaining = 0;
|
e.TicsRemaining = 0;
|
||||||
|
e.InitialDuration = 0;
|
||||||
e.PoisonCounters = 0;
|
e.PoisonCounters = 0;
|
||||||
e.DiseaseCounters = 0;
|
e.DiseaseCounters = 0;
|
||||||
e.CurseCounters = 0;
|
e.CurseCounters = 0;
|
||||||
@ -168,6 +175,7 @@ public:
|
|||||||
e.caston_y = 0;
|
e.caston_y = 0;
|
||||||
e.caston_z = 0;
|
e.caston_z = 0;
|
||||||
e.ExtraDIChance = 0;
|
e.ExtraDIChance = 0;
|
||||||
|
e.instrument_mod = 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -210,19 +218,21 @@ public:
|
|||||||
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.PoisonCounters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.InitialDuration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.DiseaseCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.PoisonCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.CurseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.DiseaseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.CorruptionCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.CurseCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.HitCount = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.CorruptionCounters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.MeleeRune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.HitCount = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.MagicRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.MeleeRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.MagicRune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.dot_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.Persistent = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
|
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.Persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_y = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.ExtraDIChance = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
e.caston_z = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
|
e.ExtraDIChance = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.instrument_mod = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 10;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -261,19 +271,21 @@ public:
|
|||||||
v.push_back(columns[3] + " = " + std::to_string(e.CasterLevel));
|
v.push_back(columns[3] + " = " + std::to_string(e.CasterLevel));
|
||||||
v.push_back(columns[4] + " = " + std::to_string(e.DurationFormula));
|
v.push_back(columns[4] + " = " + std::to_string(e.DurationFormula));
|
||||||
v.push_back(columns[5] + " = " + std::to_string(e.TicsRemaining));
|
v.push_back(columns[5] + " = " + std::to_string(e.TicsRemaining));
|
||||||
v.push_back(columns[6] + " = " + std::to_string(e.PoisonCounters));
|
v.push_back(columns[6] + " = " + std::to_string(e.InitialDuration));
|
||||||
v.push_back(columns[7] + " = " + std::to_string(e.DiseaseCounters));
|
v.push_back(columns[7] + " = " + std::to_string(e.PoisonCounters));
|
||||||
v.push_back(columns[8] + " = " + std::to_string(e.CurseCounters));
|
v.push_back(columns[8] + " = " + std::to_string(e.DiseaseCounters));
|
||||||
v.push_back(columns[9] + " = " + std::to_string(e.CorruptionCounters));
|
v.push_back(columns[9] + " = " + std::to_string(e.CurseCounters));
|
||||||
v.push_back(columns[10] + " = " + std::to_string(e.HitCount));
|
v.push_back(columns[10] + " = " + std::to_string(e.CorruptionCounters));
|
||||||
v.push_back(columns[11] + " = " + std::to_string(e.MeleeRune));
|
v.push_back(columns[11] + " = " + std::to_string(e.HitCount));
|
||||||
v.push_back(columns[12] + " = " + std::to_string(e.MagicRune));
|
v.push_back(columns[12] + " = " + std::to_string(e.MeleeRune));
|
||||||
v.push_back(columns[13] + " = " + std::to_string(e.dot_rune));
|
v.push_back(columns[13] + " = " + std::to_string(e.MagicRune));
|
||||||
v.push_back(columns[14] + " = " + std::to_string(e.caston_x));
|
v.push_back(columns[14] + " = " + std::to_string(e.dot_rune));
|
||||||
v.push_back(columns[15] + " = " + std::to_string(e.Persistent));
|
v.push_back(columns[15] + " = " + std::to_string(e.caston_x));
|
||||||
v.push_back(columns[16] + " = " + std::to_string(e.caston_y));
|
v.push_back(columns[16] + " = " + std::to_string(e.Persistent));
|
||||||
v.push_back(columns[17] + " = " + std::to_string(e.caston_z));
|
v.push_back(columns[17] + " = " + std::to_string(e.caston_y));
|
||||||
v.push_back(columns[18] + " = " + std::to_string(e.ExtraDIChance));
|
v.push_back(columns[18] + " = " + std::to_string(e.caston_z));
|
||||||
|
v.push_back(columns[19] + " = " + std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(columns[20] + " = " + std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -301,6 +313,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.CasterLevel));
|
v.push_back(std::to_string(e.CasterLevel));
|
||||||
v.push_back(std::to_string(e.DurationFormula));
|
v.push_back(std::to_string(e.DurationFormula));
|
||||||
v.push_back(std::to_string(e.TicsRemaining));
|
v.push_back(std::to_string(e.TicsRemaining));
|
||||||
|
v.push_back(std::to_string(e.InitialDuration));
|
||||||
v.push_back(std::to_string(e.PoisonCounters));
|
v.push_back(std::to_string(e.PoisonCounters));
|
||||||
v.push_back(std::to_string(e.DiseaseCounters));
|
v.push_back(std::to_string(e.DiseaseCounters));
|
||||||
v.push_back(std::to_string(e.CurseCounters));
|
v.push_back(std::to_string(e.CurseCounters));
|
||||||
@ -314,6 +327,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caston_y));
|
v.push_back(std::to_string(e.caston_y));
|
||||||
v.push_back(std::to_string(e.caston_z));
|
v.push_back(std::to_string(e.caston_z));
|
||||||
v.push_back(std::to_string(e.ExtraDIChance));
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -349,6 +363,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.CasterLevel));
|
v.push_back(std::to_string(e.CasterLevel));
|
||||||
v.push_back(std::to_string(e.DurationFormula));
|
v.push_back(std::to_string(e.DurationFormula));
|
||||||
v.push_back(std::to_string(e.TicsRemaining));
|
v.push_back(std::to_string(e.TicsRemaining));
|
||||||
|
v.push_back(std::to_string(e.InitialDuration));
|
||||||
v.push_back(std::to_string(e.PoisonCounters));
|
v.push_back(std::to_string(e.PoisonCounters));
|
||||||
v.push_back(std::to_string(e.DiseaseCounters));
|
v.push_back(std::to_string(e.DiseaseCounters));
|
||||||
v.push_back(std::to_string(e.CurseCounters));
|
v.push_back(std::to_string(e.CurseCounters));
|
||||||
@ -362,6 +377,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caston_y));
|
v.push_back(std::to_string(e.caston_y));
|
||||||
v.push_back(std::to_string(e.caston_z));
|
v.push_back(std::to_string(e.caston_z));
|
||||||
v.push_back(std::to_string(e.ExtraDIChance));
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
@ -401,19 +417,21 @@ public:
|
|||||||
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.PoisonCounters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.InitialDuration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.DiseaseCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.PoisonCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.CurseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.DiseaseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.CorruptionCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.CurseCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.HitCount = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.CorruptionCounters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.MeleeRune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.HitCount = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.MagicRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.MeleeRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.MagicRune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.dot_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.Persistent = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
|
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.Persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_y = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.ExtraDIChance = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
e.caston_z = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
|
e.ExtraDIChance = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.instrument_mod = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -444,19 +462,21 @@ public:
|
|||||||
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
e.CasterLevel = row[3] ? static_cast<uint32_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||||
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
e.DurationFormula = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||||
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
e.TicsRemaining = row[5] ? static_cast<int32_t>(atoi(row[5])) : 0;
|
||||||
e.PoisonCounters = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
|
e.InitialDuration = row[6] ? static_cast<int32_t>(atoi(row[6])) : 0;
|
||||||
e.DiseaseCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
e.PoisonCounters = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||||
e.CurseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
e.DiseaseCounters = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
|
||||||
e.CorruptionCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
e.CurseCounters = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
|
||||||
e.HitCount = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
e.CorruptionCounters = row[10] ? static_cast<uint32_t>(strtoul(row[10], nullptr, 10)) : 0;
|
||||||
e.MeleeRune = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
e.HitCount = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
|
||||||
e.MagicRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
e.MeleeRune = row[12] ? static_cast<uint32_t>(strtoul(row[12], nullptr, 10)) : 0;
|
||||||
e.dot_rune = row[13] ? static_cast<int32_t>(atoi(row[13])) : 0;
|
e.MagicRune = row[13] ? static_cast<uint32_t>(strtoul(row[13], nullptr, 10)) : 0;
|
||||||
e.caston_x = row[14] ? static_cast<int32_t>(atoi(row[14])) : 0;
|
e.dot_rune = row[14] ? static_cast<uint32_t>(strtoul(row[14], nullptr, 10)) : 0;
|
||||||
e.Persistent = row[15] ? static_cast<int8_t>(atoi(row[15])) : 0;
|
e.caston_x = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
|
||||||
e.caston_y = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.Persistent = row[16] ? static_cast<int8_t>(atoi(row[16])) : 0;
|
||||||
e.caston_z = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
e.caston_y = row[17] ? static_cast<int32_t>(atoi(row[17])) : 0;
|
||||||
e.ExtraDIChance = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
e.caston_z = row[18] ? static_cast<int32_t>(atoi(row[18])) : 0;
|
||||||
|
e.ExtraDIChance = row[19] ? static_cast<int32_t>(atoi(row[19])) : 0;
|
||||||
|
e.instrument_mod = row[20] ? static_cast<uint32_t>(strtoul(row[20], nullptr, 10)) : 10;
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -537,6 +557,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.CasterLevel));
|
v.push_back(std::to_string(e.CasterLevel));
|
||||||
v.push_back(std::to_string(e.DurationFormula));
|
v.push_back(std::to_string(e.DurationFormula));
|
||||||
v.push_back(std::to_string(e.TicsRemaining));
|
v.push_back(std::to_string(e.TicsRemaining));
|
||||||
|
v.push_back(std::to_string(e.InitialDuration));
|
||||||
v.push_back(std::to_string(e.PoisonCounters));
|
v.push_back(std::to_string(e.PoisonCounters));
|
||||||
v.push_back(std::to_string(e.DiseaseCounters));
|
v.push_back(std::to_string(e.DiseaseCounters));
|
||||||
v.push_back(std::to_string(e.CurseCounters));
|
v.push_back(std::to_string(e.CurseCounters));
|
||||||
@ -550,6 +571,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caston_y));
|
v.push_back(std::to_string(e.caston_y));
|
||||||
v.push_back(std::to_string(e.caston_z));
|
v.push_back(std::to_string(e.caston_z));
|
||||||
v.push_back(std::to_string(e.ExtraDIChance));
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -578,6 +600,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.CasterLevel));
|
v.push_back(std::to_string(e.CasterLevel));
|
||||||
v.push_back(std::to_string(e.DurationFormula));
|
v.push_back(std::to_string(e.DurationFormula));
|
||||||
v.push_back(std::to_string(e.TicsRemaining));
|
v.push_back(std::to_string(e.TicsRemaining));
|
||||||
|
v.push_back(std::to_string(e.InitialDuration));
|
||||||
v.push_back(std::to_string(e.PoisonCounters));
|
v.push_back(std::to_string(e.PoisonCounters));
|
||||||
v.push_back(std::to_string(e.DiseaseCounters));
|
v.push_back(std::to_string(e.DiseaseCounters));
|
||||||
v.push_back(std::to_string(e.CurseCounters));
|
v.push_back(std::to_string(e.CurseCounters));
|
||||||
@ -591,6 +614,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.caston_y));
|
v.push_back(std::to_string(e.caston_y));
|
||||||
v.push_back(std::to_string(e.caston_z));
|
v.push_back(std::to_string(e.caston_z));
|
||||||
v.push_back(std::to_string(e.ExtraDIChance));
|
v.push_back(std::to_string(e.ExtraDIChance));
|
||||||
|
v.push_back(std::to_string(e.instrument_mod));
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,6 +38,6 @@
|
|||||||
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CURRENT_BINARY_DATABASE_VERSION 9329
|
#define CURRENT_BINARY_DATABASE_VERSION 9330
|
||||||
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9056
|
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9057
|
||||||
#define CUSTOM_BINARY_DATABASE_VERSION 0
|
#define CUSTOM_BINARY_DATABASE_VERSION 0
|
||||||
|
|||||||
@ -77,6 +77,7 @@ CREATE TABLE `merc_buffs`
|
|||||||
`CasterLevel` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`CasterLevel` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`DurationFormula` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`DurationFormula` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`TicsRemaining` int(11) NOT NULL DEFAULT 0,
|
`TicsRemaining` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`InitialDuration` int(11) NOT NULL DEFAULT 0,
|
||||||
`PoisonCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
`PoisonCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`DiseaseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
`DiseaseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`CurseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
`CurseCounters` int(11) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
@ -84,12 +85,13 @@ CREATE TABLE `merc_buffs`
|
|||||||
`HitCount` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`HitCount` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`MeleeRune` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`MeleeRune` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`MagicRune` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
`MagicRune` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`dot_rune` int(10) NOT NULL DEFAULT 0,
|
`dot_rune` int(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`caston_x` int(10) NOT NULL DEFAULT 0,
|
`caston_x` int(10) NOT NULL DEFAULT 0,
|
||||||
`Persistent` tinyint(1) NOT NULL DEFAULT 0,
|
`Persistent` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
`caston_y` int(10) NOT NULL DEFAULT 0,
|
`caston_y` int(10) NOT NULL DEFAULT 0,
|
||||||
`caston_z` int(10) NOT NULL DEFAULT 0,
|
`caston_z` int(10) NOT NULL DEFAULT 0,
|
||||||
`ExtraDIChance` int(10) NOT NULL DEFAULT 0,
|
`ExtraDIChance` int(10) NOT NULL DEFAULT 0,
|
||||||
|
`instrument_mod` int(10) UNSIGNED NOT NULL DEFAULT 10,
|
||||||
PRIMARY KEY (`MercBuffId`) USING BTREE,
|
PRIMARY KEY (`MercBuffId`) USING BTREE,
|
||||||
INDEX `FK_mercbuff_1`(`MercId`) USING BTREE
|
INDEX `FK_mercbuff_1`(`MercId`) USING BTREE
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
|
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
|
||||||
|
|||||||
10
zone/bot.cpp
10
zone/bot.cpp
@ -1568,7 +1568,7 @@ bool Bot::LoadPet()
|
|||||||
|
|
||||||
NPC *pet_inst = GetPet()->CastToNPC();
|
NPC *pet_inst = GetPet()->CastToNPC();
|
||||||
|
|
||||||
SpellBuff_Struct pet_buffs[PET_BUFF_COUNT];
|
Buffs_Struct pet_buffs[PET_BUFF_COUNT];
|
||||||
memset(pet_buffs, 0, (sizeof(SpellBuff_Struct) * PET_BUFF_COUNT));
|
memset(pet_buffs, 0, (sizeof(SpellBuff_Struct) * PET_BUFF_COUNT));
|
||||||
database.botdb.LoadPetBuffs(GetBotID(), pet_buffs);
|
database.botdb.LoadPetBuffs(GetBotID(), pet_buffs);
|
||||||
|
|
||||||
@ -1576,7 +1576,7 @@ bool Bot::LoadPet()
|
|||||||
memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT));
|
memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT));
|
||||||
database.botdb.LoadPetItems(GetBotID(), pet_items);
|
database.botdb.LoadPetItems(GetBotID(), pet_items);
|
||||||
|
|
||||||
pet_inst->SetPetState(pet_buffs, pet_items);
|
pet_inst->RestorePetState(pet_buffs, pet_items);
|
||||||
pet_inst->CalcBonuses();
|
pet_inst->CalcBonuses();
|
||||||
pet_inst->SetHP(pet_hp);
|
pet_inst->SetHP(pet_hp);
|
||||||
pet_inst->SetMana(pet_mana);
|
pet_inst->SetMana(pet_mana);
|
||||||
@ -1601,14 +1601,14 @@ bool Bot::SavePet()
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto pet_name = new char[64];
|
auto pet_name = new char[64];
|
||||||
SpellBuff_Struct pet_buffs[PET_BUFF_COUNT];
|
Buffs_Struct pet_buffs[PET_BUFF_COUNT];
|
||||||
uint32 pet_items[EQ::invslot::EQUIPMENT_COUNT];
|
uint32 pet_items[EQ::invslot::EQUIPMENT_COUNT];
|
||||||
|
|
||||||
memset(pet_name, 0, 64);
|
memset(pet_name, 0, 64);
|
||||||
memset(pet_buffs, 0, (sizeof(SpellBuff_Struct) * PET_BUFF_COUNT));
|
memset(pet_buffs, 0, (sizeof(Buffs_Struct) * PET_BUFF_COUNT));
|
||||||
memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT));
|
memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT));
|
||||||
|
|
||||||
pet_inst->GetPetState(pet_buffs, pet_items, pet_name);
|
pet_inst->SavePetState(pet_buffs, pet_items, pet_name);
|
||||||
|
|
||||||
std::string pet_name_str = pet_name;
|
std::string pet_name_str = pet_name;
|
||||||
safe_delete_array(pet_name)
|
safe_delete_array(pet_name)
|
||||||
|
|||||||
@ -622,41 +622,70 @@ bool BotDatabase::LoadBuffs(Bot* b)
|
|||||||
buffs[index].spellid = SPELL_UNKNOWN;
|
buffs[index].spellid = SPELL_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 buff_count = 0;
|
uint32 buff_index = 0;
|
||||||
|
|
||||||
for (const auto& e : l) {
|
for (const auto& e : l) {
|
||||||
if (buff_count >= BUFF_COUNT) {
|
if (buff_index >= BUFF_COUNT) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffs[buff_count].spellid = e.spell_id;
|
Client* c = entity_list.GetClientByName(e.caster_name.c_str());
|
||||||
buffs[buff_count].casterlevel = e.caster_level;
|
|
||||||
buffs[buff_count].ticsremaining = e.tics_remaining;
|
|
||||||
buffs[buff_count].counters = 0;
|
|
||||||
|
|
||||||
if (CalculatePoisonCounters(buffs[buff_count].spellid) > 0) {
|
buffs[buff_index].spellid = e.spell_id;
|
||||||
buffs[buff_count].counters = e.poison_counters;
|
buffs[buff_index].casterlevel = e.caster_level;
|
||||||
} else if (CalculateDiseaseCounters(buffs[buff_count].spellid) > 0) {
|
|
||||||
buffs[buff_count].counters = e.disease_counters;
|
if (c) {
|
||||||
} else if (CalculateCurseCounters(buffs[buff_count].spellid) > 0) {
|
buffs[buff_index].casterid = c->GetID();
|
||||||
buffs[buff_count].counters = e.curse_counters;
|
buffs[buff_index].client = true;
|
||||||
} else if (CalculateCorruptionCounters(buffs[buff_count].spellid) > 0) {
|
|
||||||
buffs[buff_count].counters = e.corruption_counters;
|
strncpy(buffs[buff_index].caster_name, c->GetName(), 64);
|
||||||
|
} else {
|
||||||
|
buffs[buff_index].casterid = 0;
|
||||||
|
buffs[buff_index].client = false;
|
||||||
|
|
||||||
|
strncpy(buffs[buff_index].caster_name, "", 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffs[buff_count].hit_number = e.numhits;
|
buffs[buff_index].ticsremaining = e.tics_remaining;
|
||||||
buffs[buff_count].melee_rune = e.melee_rune;
|
buffs[buff_index].initialduration = e.initial_duration;
|
||||||
buffs[buff_count].magic_rune = e.magic_rune;
|
buffs[buff_index].counters = 0;
|
||||||
buffs[buff_count].dot_rune = e.dot_rune;
|
buffs[buff_index].hit_number = e.numhits;
|
||||||
buffs[buff_count].persistant_buff = e.persistent;
|
buffs[buff_index].melee_rune = e.melee_rune;
|
||||||
buffs[buff_count].caston_x = e.caston_x;
|
buffs[buff_index].magic_rune = e.magic_rune;
|
||||||
buffs[buff_count].caston_y = e.caston_y;
|
buffs[buff_index].persistent_buff = e.persistent ? true : false;
|
||||||
buffs[buff_count].caston_z = e.caston_z;
|
buffs[buff_index].dot_rune = e.dot_rune;
|
||||||
buffs[buff_count].ExtraDIChance = e.extra_di_chance;
|
buffs[buff_index].caston_x = e.caston_x;
|
||||||
buffs[buff_count].instrument_mod = e.instrument_mod;
|
buffs[buff_index].caston_y = e.caston_y;
|
||||||
buffs[buff_count].casterid = 0;
|
buffs[buff_index].caston_z = e.caston_z;
|
||||||
|
buffs[buff_index].ExtraDIChance = e.extra_di_chance;
|
||||||
|
buffs[buff_index].RootBreakChance = 0;
|
||||||
|
buffs[buff_index].virus_spread_time = 0;
|
||||||
|
buffs[buff_index].UpdateClient = false;
|
||||||
|
buffs[buff_index].instrument_mod = e.instrument_mod;
|
||||||
|
|
||||||
++buff_count;
|
if (CalculatePoisonCounters(buffs[buff_index].spellid) > 0) {
|
||||||
|
buffs[buff_index].counters = e.poison_counters;
|
||||||
|
} else if (CalculateDiseaseCounters(buffs[buff_index].spellid) > 0) {
|
||||||
|
buffs[buff_index].counters = e.disease_counters;
|
||||||
|
} else if (CalculateCurseCounters(buffs[buff_index].spellid) > 0) {
|
||||||
|
buffs[buff_index].counters = e.curse_counters;
|
||||||
|
} else if (CalculateCorruptionCounters(buffs[buff_index].spellid) > 0) {
|
||||||
|
buffs[buff_index].counters = e.corruption_counters;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffs[buff_index].hit_number = e.numhits;
|
||||||
|
buffs[buff_index].melee_rune = e.melee_rune;
|
||||||
|
buffs[buff_index].magic_rune = e.magic_rune;
|
||||||
|
buffs[buff_index].dot_rune = e.dot_rune;
|
||||||
|
buffs[buff_index].persistent_buff = e.persistent;
|
||||||
|
buffs[buff_index].caston_x = e.caston_x;
|
||||||
|
buffs[buff_index].caston_y = e.caston_y;
|
||||||
|
buffs[buff_index].caston_z = e.caston_z;
|
||||||
|
buffs[buff_index].ExtraDIChance = e.extra_di_chance;
|
||||||
|
buffs[buff_index].instrument_mod = e.instrument_mod;
|
||||||
|
buffs[buff_index].casterid = 0;
|
||||||
|
|
||||||
|
++buff_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -691,8 +720,10 @@ bool BotDatabase::SaveBuffs(Bot* b)
|
|||||||
|
|
||||||
e.spell_id = buffs[buff_index].spellid;
|
e.spell_id = buffs[buff_index].spellid;
|
||||||
e.caster_level = buffs[buff_index].casterlevel;
|
e.caster_level = buffs[buff_index].casterlevel;
|
||||||
|
e.caster_name = buffs[buff_index].caster_name;
|
||||||
e.duration_formula = spells[buffs[buff_index].spellid].buff_duration_formula;
|
e.duration_formula = spells[buffs[buff_index].spellid].buff_duration_formula;
|
||||||
e.tics_remaining = buffs[buff_index].ticsremaining;
|
e.tics_remaining = buffs[buff_index].ticsremaining;
|
||||||
|
e.initial_duration = buffs[buff_index].initialduration;
|
||||||
e.poison_counters = CalculatePoisonCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
e.poison_counters = CalculatePoisonCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
||||||
e.disease_counters = CalculateDiseaseCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
e.disease_counters = CalculateDiseaseCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
||||||
e.curse_counters = CalculateCurseCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
e.curse_counters = CalculateCurseCounters(buffs[buff_index].spellid) > 0 ? buffs[buff_index].counters : 0;
|
||||||
@ -701,7 +732,7 @@ bool BotDatabase::SaveBuffs(Bot* b)
|
|||||||
e.melee_rune = buffs[buff_index].melee_rune;
|
e.melee_rune = buffs[buff_index].melee_rune;
|
||||||
e.magic_rune = buffs[buff_index].magic_rune;
|
e.magic_rune = buffs[buff_index].magic_rune;
|
||||||
e.dot_rune = buffs[buff_index].dot_rune;
|
e.dot_rune = buffs[buff_index].dot_rune;
|
||||||
e.persistent = buffs[buff_index].persistant_buff ? 1 : 0;
|
e.persistent = buffs[buff_index].persistent_buff ? 1 : 0;
|
||||||
e.caston_x = buffs[buff_index].caston_x;
|
e.caston_x = buffs[buff_index].caston_x;
|
||||||
e.caston_y = buffs[buff_index].caston_y;
|
e.caston_y = buffs[buff_index].caston_y;
|
||||||
e.caston_z = buffs[buff_index].caston_z;
|
e.caston_z = buffs[buff_index].caston_z;
|
||||||
@ -1360,7 +1391,7 @@ bool BotDatabase::DeletePetStats(const uint32 bot_id)
|
|||||||
return BotPetsRepository::DeleteOne(database, saved_pet_index) == 1;
|
return BotPetsRepository::DeleteOne(database, saved_pet_index) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BotDatabase::LoadPetBuffs(const uint32 bot_id, SpellBuff_Struct* pet_buffs)
|
bool BotDatabase::LoadPetBuffs(const uint32 bot_id, Buffs_Struct* pet_buffs)
|
||||||
{
|
{
|
||||||
if (!bot_id) {
|
if (!bot_id) {
|
||||||
return false;
|
return false;
|
||||||
@ -1395,27 +1426,47 @@ bool BotDatabase::LoadPetBuffs(const uint32 bot_id, SpellBuff_Struct* pet_buffs)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pet_buffs[buff_index].spellid = e.spell_id;
|
Client* c = entity_list.GetClientByName(e.caster_name.c_str());
|
||||||
pet_buffs[buff_index].level = e.caster_level;
|
|
||||||
pet_buffs[buff_index].duration = e.duration;
|
|
||||||
|
|
||||||
if (CalculatePoisonCounters(pet_buffs[buff_index].spellid) > 0) {
|
pet_buffs[buff_index].spellid = e.spell_id;
|
||||||
pet_buffs[buff_index].counters = CalculatePoisonCounters(pet_buffs[buff_index].spellid);
|
pet_buffs[buff_index].casterlevel = e.caster_level;
|
||||||
} else if (CalculateDiseaseCounters(pet_buffs[buff_index].spellid) > 0) {
|
|
||||||
pet_buffs[buff_index].counters = CalculateDiseaseCounters(pet_buffs[buff_index].spellid);
|
if (c) {
|
||||||
} else if (CalculateCurseCounters(pet_buffs[buff_index].spellid) > 0) {
|
pet_buffs[buff_index].casterid = c->GetID();
|
||||||
pet_buffs[buff_index].counters = CalculateCurseCounters(pet_buffs[buff_index].spellid);
|
pet_buffs[buff_index].client = true;
|
||||||
} else if (CalculateCorruptionCounters(pet_buffs[buff_index].spellid) > 0) {
|
|
||||||
pet_buffs[buff_index].counters = CalculateCorruptionCounters(pet_buffs[buff_index].spellid);
|
strncpy(pet_buffs[buff_index].caster_name, c->GetName(), 64);
|
||||||
|
} else {
|
||||||
|
pet_buffs[buff_index].casterid = 0;
|
||||||
|
pet_buffs[buff_index].client = false;
|
||||||
|
|
||||||
|
strncpy(pet_buffs[buff_index].caster_name, "", 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pet_buffs[buff_index].ticsremaining = e.tics_remaining;
|
||||||
|
pet_buffs[buff_index].initialduration = e.initial_duration;
|
||||||
|
pet_buffs[buff_index].counters = e.counters;
|
||||||
|
pet_buffs[buff_index].hit_number = e.numhits;
|
||||||
|
pet_buffs[buff_index].melee_rune = e.melee_rune;
|
||||||
|
pet_buffs[buff_index].magic_rune = e.magic_rune;
|
||||||
|
pet_buffs[buff_index].persistent_buff = e.persistent ? true : false;
|
||||||
|
pet_buffs[buff_index].dot_rune = e.dot_rune;
|
||||||
|
pet_buffs[buff_index].caston_x = e.caston_x;
|
||||||
|
pet_buffs[buff_index].caston_y = e.caston_y;
|
||||||
|
pet_buffs[buff_index].caston_z = e.caston_z;
|
||||||
|
pet_buffs[buff_index].ExtraDIChance = e.extra_di_chance;
|
||||||
|
pet_buffs[buff_index].RootBreakChance = 0;
|
||||||
|
pet_buffs[buff_index].virus_spread_time = 0;
|
||||||
|
pet_buffs[buff_index].UpdateClient = false;
|
||||||
|
pet_buffs[buff_index].instrument_mod = e.instrument_mod;
|
||||||
|
|
||||||
++buff_index;
|
++buff_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BotDatabase::SavePetBuffs(const uint32 bot_id, const SpellBuff_Struct* pet_buffs, bool delete_flag)
|
bool BotDatabase::SavePetBuffs(const uint32 bot_id, const Buffs_Struct* pet_buffs, bool delete_flag)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
!bot_id ||
|
!bot_id ||
|
||||||
@ -1446,9 +1497,22 @@ bool BotDatabase::SavePetBuffs(const uint32 bot_id, const SpellBuff_Struct* pet_
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.spell_id = pet_buffs[buff_index].spellid;
|
e.spell_id = pet_buffs[buff_index].spellid;
|
||||||
e.caster_level = pet_buffs[buff_index].level;
|
e.caster_level = pet_buffs[buff_index].casterlevel;
|
||||||
e.duration = pet_buffs[buff_index].duration;
|
e.caster_name = pet_buffs[buff_index].caster_name;
|
||||||
|
e.tics_remaining = pet_buffs[buff_index].ticsremaining;
|
||||||
|
e.initial_duration = pet_buffs[buff_index].initialduration;
|
||||||
|
e.counters = pet_buffs[buff_index].counters;
|
||||||
|
e.numhits = pet_buffs[buff_index].hit_number;
|
||||||
|
e.melee_rune = pet_buffs[buff_index].melee_rune;
|
||||||
|
e.magic_rune = pet_buffs[buff_index].magic_rune;
|
||||||
|
e.persistent = pet_buffs[buff_index].persistent_buff;
|
||||||
|
e.dot_rune = pet_buffs[buff_index].dot_rune;
|
||||||
|
e.caston_x = pet_buffs[buff_index].caston_x;
|
||||||
|
e.caston_y = pet_buffs[buff_index].caston_y;
|
||||||
|
e.caston_z = pet_buffs[buff_index].caston_z;
|
||||||
|
e.extra_di_chance = pet_buffs[buff_index].ExtraDIChance;
|
||||||
|
e.instrument_mod = pet_buffs[buff_index].instrument_mod;
|
||||||
|
|
||||||
v.emplace_back(e);
|
v.emplace_back(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -96,8 +96,8 @@ public:
|
|||||||
bool SavePetStats(const uint32 bot_id, const std::string& pet_name, const uint32 pet_mana, const uint32 pet_hp, const int32 pet_spell_id);
|
bool SavePetStats(const uint32 bot_id, const std::string& pet_name, const uint32 pet_mana, const uint32 pet_hp, const int32 pet_spell_id);
|
||||||
bool DeletePetStats(const uint32 bot_id);
|
bool DeletePetStats(const uint32 bot_id);
|
||||||
|
|
||||||
bool LoadPetBuffs(const uint32 bot_id, SpellBuff_Struct* pet_buffs);
|
bool LoadPetBuffs(const uint32 bot_id, Buffs_Struct* pet_buffs);
|
||||||
bool SavePetBuffs(const uint32 bot_id, const SpellBuff_Struct* pet_buffs, bool delete_flag = false);
|
bool SavePetBuffs(const uint32 bot_id, const Buffs_Struct* pet_buffs, bool delete_flag = false);
|
||||||
bool DeletePetBuffs(const uint32 bot_id);
|
bool DeletePetBuffs(const uint32 bot_id);
|
||||||
|
|
||||||
bool LoadPetItems(const uint32 bot_id, uint32* pet_items);
|
bool LoadPetItems(const uint32 bot_id, uint32* pet_items);
|
||||||
|
|||||||
@ -1048,7 +1048,7 @@ bool Client::Save(uint8 iCommitNow) {
|
|||||||
m_petinfo.SpellID = pet->CastToNPC()->GetPetSpellID();
|
m_petinfo.SpellID = pet->CastToNPC()->GetPetSpellID();
|
||||||
m_petinfo.HP = pet->GetHP();
|
m_petinfo.HP = pet->GetHP();
|
||||||
m_petinfo.Mana = pet->GetMana();
|
m_petinfo.Mana = pet->GetMana();
|
||||||
pet->GetPetState(m_petinfo.Buffs, m_petinfo.Items, m_petinfo.Name);
|
pet->SavePetState(m_petinfo.Buffs, m_petinfo.Items, m_petinfo.Name);
|
||||||
m_petinfo.petpower = pet->GetPetPower();
|
m_petinfo.petpower = pet->GetPetPower();
|
||||||
m_petinfo.size = pet->GetSize();
|
m_petinfo.size = pet->GetSize();
|
||||||
m_petinfo.taunting = pet->CastToNPC()->IsTaunting();
|
m_petinfo.taunting = pet->CastToNPC()->IsTaunting();
|
||||||
@ -6325,7 +6325,7 @@ void Client::SuspendMinion(int value)
|
|||||||
|
|
||||||
if(value >= 1)
|
if(value >= 1)
|
||||||
{
|
{
|
||||||
CurrentPet->SetPetState(m_suspendedminion.Buffs, m_suspendedminion.Items);
|
CurrentPet->RestorePetState(m_suspendedminion.Buffs, m_suspendedminion.Items);
|
||||||
ClientPatch::SendFullBuffRefresh(CurrentPet);
|
ClientPatch::SendFullBuffRefresh(CurrentPet);
|
||||||
}
|
}
|
||||||
CurrentPet->CalcBonuses();
|
CurrentPet->CalcBonuses();
|
||||||
@ -6392,7 +6392,7 @@ void Client::SuspendMinion(int value)
|
|||||||
m_suspendedminion.size = CurrentPet->GetSize();
|
m_suspendedminion.size = CurrentPet->GetSize();
|
||||||
|
|
||||||
if(value >= 1)
|
if(value >= 1)
|
||||||
CurrentPet->GetPetState(m_suspendedminion.Buffs, m_suspendedminion.Items, m_suspendedminion.Name);
|
CurrentPet->SavePetState(m_suspendedminion.Buffs, m_suspendedminion.Items, m_suspendedminion.Name);
|
||||||
else
|
else
|
||||||
strn0cpy(m_suspendedminion.Name, CurrentPet->GetName(), 64); // Name stays even at rank 1
|
strn0cpy(m_suspendedminion.Name, CurrentPet->GetName(), 64); // Name stays even at rank 1
|
||||||
|
|
||||||
|
|||||||
@ -663,7 +663,7 @@ void Client::CompleteConnect()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffs[j1].persistant_buff) {
|
if (buffs[j1].persistent_buff) {
|
||||||
Mob *caster = entity_list.GetMobID(buffs[j1].casterid);
|
Mob *caster = entity_list.GetMobID(buffs[j1].casterid);
|
||||||
ApplySpellEffectIllusion(spell.id, caster, j1, spell.base_value[x1], spell.limit_value[x1], spell.max_value[x1]);
|
ApplySpellEffectIllusion(spell.id, caster, j1, spell.base_value[x1], spell.limit_value[x1], spell.max_value[x1]);
|
||||||
}
|
}
|
||||||
@ -1721,7 +1721,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app)
|
|||||||
m_petinfo.Name, m_petinfo.size);
|
m_petinfo.Name, m_petinfo.size);
|
||||||
if (GetPet() && GetPet()->IsNPC()) {
|
if (GetPet() && GetPet()->IsNPC()) {
|
||||||
NPC *pet = GetPet()->CastToNPC();
|
NPC *pet = GetPet()->CastToNPC();
|
||||||
pet->SetPetState(m_petinfo.Buffs, m_petinfo.Items);
|
pet->RestorePetState(m_petinfo.Buffs, m_petinfo.Items);
|
||||||
pet->CalcBonuses();
|
pet->CalcBonuses();
|
||||||
pet->SetHP(m_petinfo.HP);
|
pet->SetHP(m_petinfo.HP);
|
||||||
pet->SetMana(m_petinfo.Mana);
|
pet->SetMana(m_petinfo.Mana);
|
||||||
|
|||||||
@ -241,7 +241,7 @@ struct Buffs_Struct {
|
|||||||
int16 RootBreakChance; //Not saved to dbase
|
int16 RootBreakChance; //Not saved to dbase
|
||||||
uint32 instrument_mod;
|
uint32 instrument_mod;
|
||||||
int32 virus_spread_time; //time till next attempted viral spread
|
int32 virus_spread_time; //time till next attempted viral spread
|
||||||
bool persistant_buff;
|
bool persistent_buff;
|
||||||
bool client; //True if the caster is a client
|
bool client; //True if the caster is a client
|
||||||
bool UpdateClient; // This is for legacy client support only. Newer clients take refresh packets for the entire buff list
|
bool UpdateClient; // This is for legacy client support only. Newer clients take refresh packets for the entire buff list
|
||||||
|
|
||||||
@ -261,6 +261,7 @@ struct Buffs_Struct {
|
|||||||
CEREAL_NVP(casterid),
|
CEREAL_NVP(casterid),
|
||||||
CEREAL_NVP(caster_name_str),
|
CEREAL_NVP(caster_name_str),
|
||||||
CEREAL_NVP(ticsremaining),
|
CEREAL_NVP(ticsremaining),
|
||||||
|
CEREAL_NVP(initialduration),
|
||||||
CEREAL_NVP(counters),
|
CEREAL_NVP(counters),
|
||||||
CEREAL_NVP(hit_number),
|
CEREAL_NVP(hit_number),
|
||||||
CEREAL_NVP(melee_rune),
|
CEREAL_NVP(melee_rune),
|
||||||
@ -273,7 +274,7 @@ struct Buffs_Struct {
|
|||||||
CEREAL_NVP(RootBreakChance),
|
CEREAL_NVP(RootBreakChance),
|
||||||
CEREAL_NVP(instrument_mod),
|
CEREAL_NVP(instrument_mod),
|
||||||
CEREAL_NVP(virus_spread_time),
|
CEREAL_NVP(virus_spread_time),
|
||||||
CEREAL_NVP(persistant_buff),
|
CEREAL_NVP(persistent_buff),
|
||||||
CEREAL_NVP(client),
|
CEREAL_NVP(client),
|
||||||
CEREAL_NVP(UpdateClient)
|
CEREAL_NVP(UpdateClient)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -134,7 +134,7 @@ bool Lua_Buff::IsCasterClient()
|
|||||||
bool Lua_Buff::IsPersistentBuff()
|
bool Lua_Buff::IsPersistentBuff()
|
||||||
{
|
{
|
||||||
Lua_Safe_Call_Bool();
|
Lua_Safe_Call_Bool();
|
||||||
return self->persistant_buff;
|
return self->persistent_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Lua_Buff::SendsClientUpdate()
|
bool Lua_Buff::SendsClientUpdate()
|
||||||
|
|||||||
@ -184,8 +184,8 @@ public:
|
|||||||
void GoToBind(uint8 bind_number = 0) { GMMove(m_SpawnPoint.x, m_SpawnPoint.y, m_SpawnPoint.z, m_SpawnPoint.w); }
|
void GoToBind(uint8 bind_number = 0) { GMMove(m_SpawnPoint.x, m_SpawnPoint.y, m_SpawnPoint.z, m_SpawnPoint.w); }
|
||||||
void Gate(uint8 bind_number = 0);
|
void Gate(uint8 bind_number = 0);
|
||||||
|
|
||||||
void GetPetState(SpellBuff_Struct *buffs, uint32 *items, char *name);
|
void SavePetState(Buffs_Struct* buffs, uint32 *items, char *name) const;
|
||||||
void SetPetState(SpellBuff_Struct *buffs, uint32 *items);
|
void RestorePetState(const Buffs_Struct* pet_buffs, const uint32* items);
|
||||||
virtual void SpellProcess();
|
virtual void SpellProcess();
|
||||||
virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
||||||
|
|
||||||
@ -611,6 +611,7 @@ public:
|
|||||||
buffs[i].casterid = b.casterid;
|
buffs[i].casterid = b.casterid;
|
||||||
strncpy(buffs[i].caster_name, b.caster_name, 64);
|
strncpy(buffs[i].caster_name, b.caster_name, 64);
|
||||||
buffs[i].ticsremaining = b.ticsremaining;
|
buffs[i].ticsremaining = b.ticsremaining;
|
||||||
|
buffs[i].initialduration = b.initialduration;
|
||||||
buffs[i].counters = b.counters;
|
buffs[i].counters = b.counters;
|
||||||
buffs[i].hit_number = b.hit_number;
|
buffs[i].hit_number = b.hit_number;
|
||||||
buffs[i].melee_rune = b.melee_rune;
|
buffs[i].melee_rune = b.melee_rune;
|
||||||
@ -623,7 +624,7 @@ public:
|
|||||||
buffs[i].RootBreakChance = b.RootBreakChance;
|
buffs[i].RootBreakChance = b.RootBreakChance;
|
||||||
buffs[i].instrument_mod = b.instrument_mod;
|
buffs[i].instrument_mod = b.instrument_mod;
|
||||||
buffs[i].virus_spread_time = b.virus_spread_time;
|
buffs[i].virus_spread_time = b.virus_spread_time;
|
||||||
buffs[i].persistant_buff = b.persistant_buff;
|
buffs[i].persistent_buff = b.persistent_buff;
|
||||||
buffs[i].client = b.client;
|
buffs[i].client = b.client;
|
||||||
buffs[i].UpdateClient = b.UpdateClient;
|
buffs[i].UpdateClient = b.UpdateClient;
|
||||||
i++;
|
i++;
|
||||||
|
|||||||
@ -114,7 +114,7 @@ bool Perl_Buff_IsCasterClient(Buffs_Struct* self)
|
|||||||
|
|
||||||
bool Perl_Buff_IsPersistentBuff(Buffs_Struct* self)
|
bool Perl_Buff_IsPersistentBuff(Buffs_Struct* self)
|
||||||
{
|
{
|
||||||
return self->persistant_buff;
|
return self->persistent_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Perl_Buff_SendsClientUpdate(Buffs_Struct* self)
|
bool Perl_Buff_SendsClientUpdate(Buffs_Struct* self)
|
||||||
|
|||||||
138
zone/pets.cpp
138
zone/pets.cpp
@ -471,7 +471,8 @@ void Mob::SetPetID(uint16 NewPetID) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NPC::GetPetState(SpellBuff_Struct *pet_buffs, uint32 *items, char *name) {
|
void NPC::SavePetState(Buffs_Struct* pet_buffs, uint32 *items, char *name) const
|
||||||
|
{
|
||||||
//save the pet name
|
//save the pet name
|
||||||
strn0cpy(name, GetName(), 64);
|
strn0cpy(name, GetName(), 64);
|
||||||
|
|
||||||
@ -479,102 +480,71 @@ void NPC::GetPetState(SpellBuff_Struct *pet_buffs, uint32 *items, char *name) {
|
|||||||
memcpy(items, equipment, sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT);
|
memcpy(items, equipment, sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT);
|
||||||
|
|
||||||
//save their buffs.
|
//save their buffs.
|
||||||
for (int i=EQ::invslot::EQUIPMENT_BEGIN; i < GetPetMaxTotalSlots(); i++) {
|
memcpy(pet_buffs, buffs, sizeof(Buffs_Struct) * GetPetMaxTotalSlots());
|
||||||
if (IsValidSpell(buffs[i].spellid)) {
|
|
||||||
pet_buffs[i].spellid = buffs[i].spellid;
|
|
||||||
pet_buffs[i].effect_type = i+1;
|
|
||||||
pet_buffs[i].duration = buffs[i].ticsremaining;
|
|
||||||
pet_buffs[i].level = buffs[i].casterlevel;
|
|
||||||
pet_buffs[i].bard_modifier = 10;
|
|
||||||
pet_buffs[i].counters = buffs[i].counters;
|
|
||||||
pet_buffs[i].bard_modifier = buffs[i].instrument_mod;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pet_buffs[i].spellid = SPELL_UNKNOWN;
|
|
||||||
pet_buffs[i].duration = 0;
|
|
||||||
pet_buffs[i].level = 0;
|
|
||||||
pet_buffs[i].bard_modifier = 10;
|
|
||||||
pet_buffs[i].counters = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) {
|
void NPC::RestorePetState(const Buffs_Struct* pet_buffs, const uint32* items) {
|
||||||
//restore their buffs...
|
//restore their buffs...
|
||||||
|
memcpy(buffs, pet_buffs, sizeof(Buffs_Struct) * GetPetMaxTotalSlots());
|
||||||
|
|
||||||
int i;
|
for (int slot = 0; slot < GetPetMaxTotalSlots(); ++slot) {
|
||||||
for (i = 0; i < GetPetMaxTotalSlots(); i++) {
|
if (IsValidSpell(buffs[slot].spellid)) {
|
||||||
for(int z = 0; z < GetPetMaxTotalSlots(); z++) {
|
// check for duplicates of valid spells, keep the lowest one
|
||||||
// check for duplicates
|
for (int slot2 = slot + 1; slot2 < GetPetMaxTotalSlots(); ++slot2) {
|
||||||
if(IsValidSpell(buffs[z].spellid) && buffs[z].spellid == pet_buffs[i].spellid) {
|
if (IsValidSpell(buffs[slot2].spellid) && buffs[slot].spellid == buffs[slot2].spellid) {
|
||||||
buffs[z].spellid = SPELL_UNKNOWN;
|
buffs[slot2].spellid = SPELL_UNKNOWN;
|
||||||
pet_buffs[i].spellid = 0xFFFFFFFF;
|
buffs[slot2].ticsremaining = 0;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pet_buffs[i].spellid <= (uint32)SPDAT_RECORDS && pet_buffs[i].spellid != 0 && (pet_buffs[i].duration > 0 || pet_buffs[i].duration == -1)) {
|
|
||||||
if(pet_buffs[i].level == 0 || pet_buffs[i].level > 100)
|
|
||||||
pet_buffs[i].level = 1;
|
|
||||||
buffs[i].spellid = pet_buffs[i].spellid;
|
|
||||||
buffs[i].ticsremaining = pet_buffs[i].duration;
|
|
||||||
buffs[i].casterlevel = pet_buffs[i].level;
|
|
||||||
buffs[i].casterid = 0;
|
|
||||||
buffs[i].counters = pet_buffs[i].counters;
|
|
||||||
buffs[i].hit_number = spells[pet_buffs[i].spellid].hit_number;
|
|
||||||
buffs[i].instrument_mod = pet_buffs[i].bard_modifier;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buffs[i].spellid = SPELL_UNKNOWN;
|
|
||||||
pet_buffs[i].spellid = 0xFFFFFFFF;
|
|
||||||
pet_buffs[i].effect_type = 0;
|
|
||||||
pet_buffs[i].level = 0;
|
|
||||||
pet_buffs[i].duration = 0;
|
|
||||||
pet_buffs[i].bard_modifier = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int j1=0; j1 < GetPetMaxTotalSlots(); j1++) {
|
|
||||||
if (buffs[j1].spellid <= (uint32)SPDAT_RECORDS) {
|
|
||||||
for (int x1=0; x1 < EFFECT_COUNT; x1++) {
|
|
||||||
switch (spells[buffs[j1].spellid].effect_id[x1]) {
|
|
||||||
case SpellEffect::AddMeleeProc:
|
|
||||||
case SpellEffect::WeaponProc:
|
|
||||||
// We need to reapply buff based procs
|
|
||||||
// We need to do this here so suspended pets also regain their procs.
|
|
||||||
AddProcToWeapon(GetProcID(buffs[j1].spellid,x1), false, 100+spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC));
|
|
||||||
break;
|
|
||||||
case SpellEffect::DefensiveProc:
|
|
||||||
AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC));
|
|
||||||
break;
|
|
||||||
case SpellEffect::RangedProc:
|
|
||||||
AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC));
|
|
||||||
break;
|
|
||||||
case SpellEffect::Charm:
|
|
||||||
case SpellEffect::Rune:
|
|
||||||
case SpellEffect::NegateAttacks:
|
|
||||||
case SpellEffect::Illusion:
|
|
||||||
buffs[j1].spellid = SPELL_UNKNOWN;
|
|
||||||
pet_buffs[j1].spellid = SPELL_UNKNOWN;
|
|
||||||
pet_buffs[j1].effect_type = 0;
|
|
||||||
pet_buffs[j1].level = 0;
|
|
||||||
pet_buffs[j1].duration = 0;
|
|
||||||
pet_buffs[j1].bard_modifier = 0;
|
|
||||||
x1 = EFFECT_COUNT;
|
|
||||||
break;
|
|
||||||
// We can't send appearance packets yet, put down at CompleteConnect
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// re-add any specific passive effects that need to be added
|
||||||
|
for (int effect = 0; effect < EFFECT_COUNT; ++effect) {
|
||||||
|
switch (spells[buffs[slot].spellid].effect_id[effect]) {
|
||||||
|
case SpellEffect::AddMeleeProc:
|
||||||
|
case SpellEffect::WeaponProc:
|
||||||
|
// We need to reapply buff based procs
|
||||||
|
// We need to do this here so suspended pets also regain their procs.
|
||||||
|
AddProcToWeapon(GetProcID(buffs[slot].spellid, effect), false,
|
||||||
|
100 + spells[buffs[slot].spellid].limit_value[effect], buffs[slot].spellid,
|
||||||
|
buffs[slot].casterlevel, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::MELEE_PROC));
|
||||||
|
break;
|
||||||
|
case SpellEffect::DefensiveProc:
|
||||||
|
AddDefensiveProc(GetProcID(buffs[slot].spellid, effect),
|
||||||
|
100 + spells[buffs[slot].spellid].limit_value[effect], buffs[slot].spellid,
|
||||||
|
GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::DEFENSIVE_PROC));
|
||||||
|
break;
|
||||||
|
case SpellEffect::RangedProc:
|
||||||
|
AddRangedProc(GetProcID(buffs[slot].spellid, effect),
|
||||||
|
100 + spells[buffs[slot].spellid].limit_value[effect], buffs[slot].spellid,
|
||||||
|
GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::RANGED_PROC));
|
||||||
|
break;
|
||||||
|
case SpellEffect::Charm:
|
||||||
|
case SpellEffect::Rune:
|
||||||
|
case SpellEffect::NegateAttacks:
|
||||||
|
case SpellEffect::Illusion:
|
||||||
|
buffs[slot].spellid = SPELL_UNKNOWN;
|
||||||
|
buffs[slot].ticsremaining = 0;
|
||||||
|
effect = EFFECT_COUNT; // don't process any more effects, this buff is gone
|
||||||
|
break;
|
||||||
|
// We can't send appearance packets yet, put down at CompleteConnect
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// ensure this buff isn't going to stick around
|
||||||
|
buffs[slot].spellid = SPELL_UNKNOWN;
|
||||||
|
buffs[slot].ticsremaining = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//restore their equipment...
|
//restore their equipment...
|
||||||
for (i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) {
|
for (int equip = EQ::invslot::EQUIPMENT_BEGIN; equip <= EQ::invslot::EQUIPMENT_END; equip++) {
|
||||||
if (items[i] == 0) {
|
if (items[equip] == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQ::ItemData *item2 = database.GetItem(items[i]);
|
if (const EQ::ItemData *item2 = database.GetItem(items[equip])) {
|
||||||
|
|
||||||
if (item2) {
|
|
||||||
bool noDrop = (item2->NoDrop == 0); // Field is reverse logic
|
bool noDrop = (item2->NoDrop == 0); // Field is reverse logic
|
||||||
bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(this) && GetPetType() <= PetType::Normal);
|
bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(this) && GetPetType() <= PetType::Normal);
|
||||||
|
|
||||||
|
|||||||
@ -10532,10 +10532,10 @@ void Mob::ApplySpellEffectIllusion(int32 spell_id, Mob *caster, int buffslot, in
|
|||||||
RuleB(Spells, IllusionsAlwaysPersist)
|
RuleB(Spells, IllusionsAlwaysPersist)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
buffs[buffslot].persistant_buff = 1;
|
buffs[buffslot].persistent_buff = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
buffs[buffslot].persistant_buff = 0;
|
buffs[buffslot].persistent_buff = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -10654,6 +10654,7 @@ int Mob::GetBuffStatValueBySlot(uint8 slot, const char* stat_identifier)
|
|||||||
else if (id == "spell_id") { return buffs[slot].spellid; }
|
else if (id == "spell_id") { return buffs[slot].spellid; }
|
||||||
else if (id == "caster_id") { return buffs[slot].spellid; }
|
else if (id == "caster_id") { return buffs[slot].spellid; }
|
||||||
else if (id == "ticsremaining") { return buffs[slot].ticsremaining; }
|
else if (id == "ticsremaining") { return buffs[slot].ticsremaining; }
|
||||||
|
else if (id == "initialduration") { return buffs[slot].initialduration; }
|
||||||
else if (id == "counters") { return buffs[slot].counters; }
|
else if (id == "counters") { return buffs[slot].counters; }
|
||||||
else if (id == "hit_number") { return buffs[slot].hit_number; }
|
else if (id == "hit_number") { return buffs[slot].hit_number; }
|
||||||
else if (id == "melee_rune") { return buffs[slot].melee_rune; }
|
else if (id == "melee_rune") { return buffs[slot].melee_rune; }
|
||||||
@ -10663,7 +10664,7 @@ int Mob::GetBuffStatValueBySlot(uint8 slot, const char* stat_identifier)
|
|||||||
else if (id == "caston_y") { return buffs[slot].caston_y; }
|
else if (id == "caston_y") { return buffs[slot].caston_y; }
|
||||||
else if (id == "caston_z") { return buffs[slot].caston_z; }
|
else if (id == "caston_z") { return buffs[slot].caston_z; }
|
||||||
else if (id == "instrument_mod") { return buffs[slot].instrument_mod; }
|
else if (id == "instrument_mod") { return buffs[slot].instrument_mod; }
|
||||||
else if (id == "persistant_buff") { return buffs[slot].persistant_buff; }
|
else if (id == "persistant_buff") { return buffs[slot].persistent_buff; }
|
||||||
else if (id == "client") { return buffs[slot].client; }
|
else if (id == "client") { return buffs[slot].client; }
|
||||||
else if (id == "extra_di_chance") { return buffs[slot].ExtraDIChance; }
|
else if (id == "extra_di_chance") { return buffs[slot].ExtraDIChance; }
|
||||||
else if (id == "root_break_chance") { return buffs[slot].RootBreakChance; }
|
else if (id == "root_break_chance") { return buffs[slot].RootBreakChance; }
|
||||||
|
|||||||
@ -3724,7 +3724,7 @@ int Mob::AddBuff(Mob *caster, int32 spell_id, int duration, int32 level_override
|
|||||||
buffs[emptyslot].counters = CalculateCounters(spell_id);
|
buffs[emptyslot].counters = CalculateCounters(spell_id);
|
||||||
buffs[emptyslot].hit_number = spells[spell_id].hit_number;
|
buffs[emptyslot].hit_number = spells[spell_id].hit_number;
|
||||||
buffs[emptyslot].client = caster ? caster->IsClient() : 0;
|
buffs[emptyslot].client = caster ? caster->IsClient() : 0;
|
||||||
buffs[emptyslot].persistant_buff = 0;
|
buffs[emptyslot].persistent_buff = 0;
|
||||||
buffs[emptyslot].caston_x = 0;
|
buffs[emptyslot].caston_x = 0;
|
||||||
buffs[emptyslot].caston_y = 0;
|
buffs[emptyslot].caston_y = 0;
|
||||||
buffs[emptyslot].caston_z = 0;
|
buffs[emptyslot].caston_z = 0;
|
||||||
@ -4574,11 +4574,9 @@ bool Mob::SpellOnTarget(
|
|||||||
// if SpellEffect returned false there's a problem applying the
|
// if SpellEffect returned false there's a problem applying the
|
||||||
// spell. It's most likely a buff that can't stack.
|
// spell. It's most likely a buff that can't stack.
|
||||||
LogSpells("Spell [{}] could not apply its effects [{}] -> [{}]\n", spell_id, GetName(), spelltar->GetName());
|
LogSpells("Spell [{}] could not apply its effects [{}] -> [{}]\n", spell_id, GetName(), spelltar->GetName());
|
||||||
if (casting_spell_aa_id) {
|
MessageString(Chat::SpellFailure, SPELL_NO_HOLD);
|
||||||
MessageString(Chat::SpellFailure, SPELL_NO_HOLD);
|
if (casting_spell_aa_id && RuleB(Spells, LegacyManaburn) && IsClient() && casting_spell_aa_id == aaManaBurn) {
|
||||||
if (RuleB(Spells, LegacyManaburn) && IsClient() && casting_spell_aa_id == aaManaBurn) {
|
StopCasting();
|
||||||
StopCasting();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
safe_delete(action_packet);
|
safe_delete(action_packet);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
121
zone/zonedb.cpp
121
zone/zonedb.cpp
@ -2381,6 +2381,7 @@ void ZoneDatabase::SaveMercenaryBuffs(Merc* m)
|
|||||||
e.CasterLevel = buffs[slot_id].casterlevel;
|
e.CasterLevel = buffs[slot_id].casterlevel;
|
||||||
e.DurationFormula = spells[buffs[slot_id].spellid].buff_duration_formula;
|
e.DurationFormula = spells[buffs[slot_id].spellid].buff_duration_formula;
|
||||||
e.TicsRemaining = buffs[slot_id].ticsremaining;
|
e.TicsRemaining = buffs[slot_id].ticsremaining;
|
||||||
|
e.InitialDuration = buffs[slot_id].initialduration;
|
||||||
e.PoisonCounters = CalculatePoisonCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
e.PoisonCounters = CalculatePoisonCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
||||||
e.DiseaseCounters = CalculateDiseaseCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
e.DiseaseCounters = CalculateDiseaseCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
||||||
e.CurseCounters = CalculateCurseCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
e.CurseCounters = CalculateCurseCounters(buffs[slot_id].spellid) > 0 ? buffs[slot_id].counters : 0;
|
||||||
@ -2392,8 +2393,9 @@ void ZoneDatabase::SaveMercenaryBuffs(Merc* m)
|
|||||||
e.caston_x = buffs[slot_id].caston_x;
|
e.caston_x = buffs[slot_id].caston_x;
|
||||||
e.caston_y = buffs[slot_id].caston_y;
|
e.caston_y = buffs[slot_id].caston_y;
|
||||||
e.caston_z = buffs[slot_id].caston_z;
|
e.caston_z = buffs[slot_id].caston_z;
|
||||||
e.Persistent = buffs[slot_id].persistant_buff ? 1 : 0;
|
e.Persistent = buffs[slot_id].persistent_buff ? 1 : 0;
|
||||||
e.ExtraDIChance = buffs[slot_id].ExtraDIChance;
|
e.ExtraDIChance = buffs[slot_id].ExtraDIChance;
|
||||||
|
e.instrument_mod = buffs[slot_id].instrument_mod;
|
||||||
|
|
||||||
v.emplace_back(e);
|
v.emplace_back(e);
|
||||||
}
|
}
|
||||||
@ -2430,6 +2432,7 @@ void ZoneDatabase::LoadMercenaryBuffs(Merc* m)
|
|||||||
buffs[slot_id].spellid = e.SpellId;
|
buffs[slot_id].spellid = e.SpellId;
|
||||||
buffs[slot_id].casterlevel = e.CasterLevel;
|
buffs[slot_id].casterlevel = e.CasterLevel;
|
||||||
buffs[slot_id].ticsremaining = e.TicsRemaining;
|
buffs[slot_id].ticsremaining = e.TicsRemaining;
|
||||||
|
buffs[slot_id].initialduration = e.InitialDuration;
|
||||||
buffs[slot_id].hit_number = e.HitCount;
|
buffs[slot_id].hit_number = e.HitCount;
|
||||||
buffs[slot_id].melee_rune = e.MeleeRune;
|
buffs[slot_id].melee_rune = e.MeleeRune;
|
||||||
buffs[slot_id].magic_rune = e.MagicRune;
|
buffs[slot_id].magic_rune = e.MagicRune;
|
||||||
@ -2439,7 +2442,8 @@ void ZoneDatabase::LoadMercenaryBuffs(Merc* m)
|
|||||||
buffs[slot_id].caston_z = e.caston_z;
|
buffs[slot_id].caston_z = e.caston_z;
|
||||||
buffs[slot_id].casterid = 0;
|
buffs[slot_id].casterid = 0;
|
||||||
buffs[slot_id].ExtraDIChance = e.ExtraDIChance;
|
buffs[slot_id].ExtraDIChance = e.ExtraDIChance;
|
||||||
buffs[slot_id].persistant_buff = e.Persistent;
|
buffs[slot_id].persistent_buff = e.Persistent;
|
||||||
|
buffs[slot_id].instrument_mod = e.instrument_mod;
|
||||||
|
|
||||||
if (CalculatePoisonCounters(buffs[slot_id].spellid) > 0) {
|
if (CalculatePoisonCounters(buffs[slot_id].spellid) > 0) {
|
||||||
buffs[slot_id].counters = e.PoisonCounters;
|
buffs[slot_id].counters = e.PoisonCounters;
|
||||||
@ -2926,23 +2930,24 @@ void ZoneDatabase::SaveBuffs(Client *client)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.character_id = client->CharacterID();
|
e.character_id = client->CharacterID();
|
||||||
e.slot_id = slot_id;
|
e.slot_id = slot_id;
|
||||||
e.spell_id = buffs[slot_id].spellid;
|
e.spell_id = buffs[slot_id].spellid;
|
||||||
e.caster_level = buffs[slot_id].casterlevel;
|
e.caster_level = buffs[slot_id].casterlevel;
|
||||||
e.caster_name = buffs[slot_id].caster_name;
|
e.caster_name = buffs[slot_id].caster_name;
|
||||||
e.ticsremaining = buffs[slot_id].ticsremaining;
|
e.ticsremaining = buffs[slot_id].ticsremaining;
|
||||||
e.counters = buffs[slot_id].counters;
|
e.initialduration = buffs[slot_id].initialduration;
|
||||||
e.numhits = buffs[slot_id].hit_number;
|
e.counters = buffs[slot_id].counters;
|
||||||
e.melee_rune = buffs[slot_id].melee_rune;
|
e.numhits = buffs[slot_id].hit_number;
|
||||||
e.magic_rune = buffs[slot_id].magic_rune;
|
e.melee_rune = buffs[slot_id].melee_rune;
|
||||||
e.persistent = buffs[slot_id].persistant_buff;
|
e.magic_rune = buffs[slot_id].magic_rune;
|
||||||
e.dot_rune = buffs[slot_id].dot_rune;
|
e.persistent = buffs[slot_id].persistent_buff;
|
||||||
e.caston_x = buffs[slot_id].caston_x;
|
e.dot_rune = buffs[slot_id].dot_rune;
|
||||||
e.caston_y = buffs[slot_id].caston_y;
|
e.caston_x = buffs[slot_id].caston_x;
|
||||||
e.caston_z = buffs[slot_id].caston_z;
|
e.caston_y = buffs[slot_id].caston_y;
|
||||||
e.ExtraDIChance = buffs[slot_id].ExtraDIChance;
|
e.caston_z = buffs[slot_id].caston_z;
|
||||||
e.instrument_mod = buffs[slot_id].instrument_mod;
|
e.ExtraDIChance = buffs[slot_id].ExtraDIChance;
|
||||||
|
e.instrument_mod = buffs[slot_id].instrument_mod;
|
||||||
|
|
||||||
v.emplace_back(e);
|
v.emplace_back(e);
|
||||||
}
|
}
|
||||||
@ -3000,11 +3005,12 @@ void ZoneDatabase::LoadBuffs(Client *client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
buffs[e.slot_id].ticsremaining = e.ticsremaining;
|
buffs[e.slot_id].ticsremaining = e.ticsremaining;
|
||||||
|
buffs[e.slot_id].initialduration = e.initialduration;
|
||||||
buffs[e.slot_id].counters = e.counters;
|
buffs[e.slot_id].counters = e.counters;
|
||||||
buffs[e.slot_id].hit_number = e.numhits;
|
buffs[e.slot_id].hit_number = e.numhits;
|
||||||
buffs[e.slot_id].melee_rune = e.melee_rune;
|
buffs[e.slot_id].melee_rune = e.melee_rune;
|
||||||
buffs[e.slot_id].magic_rune = e.magic_rune;
|
buffs[e.slot_id].magic_rune = e.magic_rune;
|
||||||
buffs[e.slot_id].persistant_buff = e.persistent ? true : false;
|
buffs[e.slot_id].persistent_buff = e.persistent ? true : false;
|
||||||
buffs[e.slot_id].dot_rune = e.dot_rune;
|
buffs[e.slot_id].dot_rune = e.dot_rune;
|
||||||
buffs[e.slot_id].caston_x = e.caston_x;
|
buffs[e.slot_id].caston_x = e.caston_x;
|
||||||
buffs[e.slot_id].caston_y = e.caston_y;
|
buffs[e.slot_id].caston_y = e.caston_y;
|
||||||
@ -3030,7 +3036,7 @@ void ZoneDatabase::LoadBuffs(Client *client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IsEffectInSpell(buffs[slot_id].spellid, SpellEffect::Illusion)) {
|
if (IsEffectInSpell(buffs[slot_id].spellid, SpellEffect::Illusion)) {
|
||||||
if (buffs[slot_id].persistant_buff) {
|
if (buffs[slot_id].persistent_buff) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3139,14 +3145,25 @@ void ZoneDatabase::SavePetInfo(Client *client)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pet_buff.char_id = client->CharacterID();
|
pet_buff.character_id = client->CharacterID();
|
||||||
pet_buff.pet = pet_info_type;
|
pet_buff.pet = pet_info_type;
|
||||||
pet_buff.slot = slot_id;
|
pet_buff.slot_id = slot_id;
|
||||||
pet_buff.spell_id = p->Buffs[slot_id].spellid;
|
pet_buff.spell_id = p->Buffs[slot_id].spellid;
|
||||||
pet_buff.caster_level = p->Buffs[slot_id].level;
|
pet_buff.caster_level = p->Buffs[slot_id].casterlevel;
|
||||||
pet_buff.ticsremaining = p->Buffs[slot_id].duration;
|
pet_buff.caster_name = p->Buffs[slot_id].caster_name;
|
||||||
pet_buff.counters = p->Buffs[slot_id].counters;
|
pet_buff.ticsremaining = p->Buffs[slot_id].ticsremaining;
|
||||||
pet_buff.instrument_mod = p->Buffs[slot_id].bard_modifier;
|
pet_buff.initialduration = p->Buffs[slot_id].initialduration;
|
||||||
|
pet_buff.counters = p->Buffs[slot_id].counters;
|
||||||
|
pet_buff.numhits = p->Buffs[slot_id].hit_number;
|
||||||
|
pet_buff.melee_rune = p->Buffs[slot_id].melee_rune;
|
||||||
|
pet_buff.magic_rune = p->Buffs[slot_id].magic_rune;
|
||||||
|
pet_buff.persistent = p->Buffs[slot_id].persistent_buff;
|
||||||
|
pet_buff.dot_rune = p->Buffs[slot_id].dot_rune;
|
||||||
|
pet_buff.caston_x = p->Buffs[slot_id].caston_x;
|
||||||
|
pet_buff.caston_y = p->Buffs[slot_id].caston_y;
|
||||||
|
pet_buff.caston_z = p->Buffs[slot_id].caston_z;
|
||||||
|
pet_buff.ExtraDIChance = p->Buffs[slot_id].ExtraDIChance;
|
||||||
|
pet_buff.instrument_mod = p->Buffs[slot_id].instrument_mod;
|
||||||
|
|
||||||
pet_buffs.push_back(pet_buff);
|
pet_buffs.push_back(pet_buff);
|
||||||
}
|
}
|
||||||
@ -3200,7 +3217,7 @@ void ZoneDatabase::SavePetInfo(Client *client)
|
|||||||
CharacterPetBuffsRepository::DeleteWhere(
|
CharacterPetBuffsRepository::DeleteWhere(
|
||||||
database,
|
database,
|
||||||
fmt::format(
|
fmt::format(
|
||||||
"`char_id` = {}",
|
"`character_id` = {}",
|
||||||
client->CharacterID()
|
client->CharacterID()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -3299,7 +3316,7 @@ void ZoneDatabase::LoadPetInfo(Client *client)
|
|||||||
const auto& buffs = CharacterPetBuffsRepository::GetWhere(
|
const auto& buffs = CharacterPetBuffsRepository::GetWhere(
|
||||||
database,
|
database,
|
||||||
fmt::format(
|
fmt::format(
|
||||||
"`char_id` = {}",
|
"`character_id` = {}",
|
||||||
client->CharacterID()
|
client->CharacterID()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -3314,7 +3331,7 @@ void ZoneDatabase::LoadPetInfo(Client *client)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.slot >= RuleI(Spells, MaxTotalSlotsPET)) {
|
if (e.slot_id >= RuleI(Spells, MaxTotalSlotsPET)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3322,13 +3339,39 @@ void ZoneDatabase::LoadPetInfo(Client *client)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->Buffs[e.slot].spellid = e.spell_id;
|
Client* c = entity_list.GetClientByName(e.caster_name.c_str());
|
||||||
p->Buffs[e.slot].level = e.caster_level;
|
|
||||||
p->Buffs[e.slot].player_id = 0;
|
p->Buffs[e.slot_id].spellid = e.spell_id;
|
||||||
p->Buffs[e.slot].effect_type = BuffEffectType::Buff;
|
p->Buffs[e.slot_id].casterlevel = e.caster_level;
|
||||||
p->Buffs[e.slot].duration = e.ticsremaining;
|
|
||||||
p->Buffs[e.slot].counters = e.counters;
|
if (c) {
|
||||||
p->Buffs[e.slot].bard_modifier = e.instrument_mod;
|
p->Buffs[e.slot_id].casterid = c->GetID();
|
||||||
|
p->Buffs[e.slot_id].client = true;
|
||||||
|
|
||||||
|
strncpy(p->Buffs[e.slot_id].caster_name, c->GetName(), 64);
|
||||||
|
} else {
|
||||||
|
p->Buffs[e.slot_id].casterid = 0;
|
||||||
|
p->Buffs[e.slot_id].client = false;
|
||||||
|
|
||||||
|
strncpy(p->Buffs[e.slot_id].caster_name, "", 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
p->Buffs[e.slot_id].ticsremaining = e.ticsremaining;
|
||||||
|
p->Buffs[e.slot_id].initialduration = e.initialduration;
|
||||||
|
p->Buffs[e.slot_id].counters = e.counters;
|
||||||
|
p->Buffs[e.slot_id].hit_number = e.numhits;
|
||||||
|
p->Buffs[e.slot_id].melee_rune = e.melee_rune;
|
||||||
|
p->Buffs[e.slot_id].magic_rune = e.magic_rune;
|
||||||
|
p->Buffs[e.slot_id].persistent_buff = e.persistent ? true : false;
|
||||||
|
p->Buffs[e.slot_id].dot_rune = e.dot_rune;
|
||||||
|
p->Buffs[e.slot_id].caston_x = e.caston_x;
|
||||||
|
p->Buffs[e.slot_id].caston_y = e.caston_y;
|
||||||
|
p->Buffs[e.slot_id].caston_z = e.caston_z;
|
||||||
|
p->Buffs[e.slot_id].ExtraDIChance = e.ExtraDIChance;
|
||||||
|
p->Buffs[e.slot_id].RootBreakChance = 0;
|
||||||
|
p->Buffs[e.slot_id].virus_spread_time = 0;
|
||||||
|
p->Buffs[e.slot_id].UpdateClient = false;
|
||||||
|
p->Buffs[e.slot_id].instrument_mod = e.instrument_mod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -209,7 +209,7 @@ struct PetInfo {
|
|||||||
uint32 HP;
|
uint32 HP;
|
||||||
uint32 Mana;
|
uint32 Mana;
|
||||||
float size;
|
float size;
|
||||||
SpellBuff_Struct Buffs[PET_BUFF_COUNT];
|
Buffs_Struct Buffs[PET_BUFF_COUNT];
|
||||||
uint32 Items[EQ::invslot::EQUIPMENT_COUNT];
|
uint32 Items[EQ::invslot::EQUIPMENT_COUNT];
|
||||||
char Name[64];
|
char Name[64];
|
||||||
bool taunting;
|
bool taunting;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user