Skip to content

Commit

Permalink
Merge branch 'master' into fix-21661
Browse files Browse the repository at this point in the history
  • Loading branch information
sudlud authored Mar 9, 2025
2 parents 81a7721 + 0b24431 commit 02faa9e
Show file tree
Hide file tree
Showing 17 changed files with 851 additions and 167 deletions.
66 changes: 66 additions & 0 deletions data/sql/updates/db_characters/2025_03_09_00.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
-- DB update 2025_02_16_00 -> 2025_03_09_00
--
DROP TABLE IF EXISTS `mail_server_template_items`;
CREATE TABLE `mail_server_template_items` (
`id` INT UNSIGNED AUTO_INCREMENT,
`templateID` INT UNSIGNED NOT NULL,
`faction` ENUM('Alliance', 'Horde') NOT NULL,
`item` INT UNSIGNED NOT NULL,
`itemCount` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_mail_template`
FOREIGN KEY (`templateID`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE
) ENGINE=InnoDB COLLATE='utf8mb4_unicode_ci';

DELETE FROM `mail_server_template_items` WHERE `faction` = 'Alliance';
INSERT INTO `mail_server_template_items` (`templateID`, `faction`, `item`, `itemCount`)
SELECT `id`, 'Alliance', `itemA`, `itemCountA` FROM `mail_server_template` WHERE `itemA` > 0;

DELETE FROM `mail_server_template_items` WHERE `faction` = 'Horde';
INSERT INTO `mail_server_template_items` (`templateID`, `faction`, `item`, `itemCount`)
SELECT `id`, 'Horde', `itemH`, `itemCountH` FROM `mail_server_template` WHERE `itemH` > 0;

ALTER TABLE `mail_server_template`
DROP COLUMN `itemA`,
DROP COLUMN `itemCountA`,
DROP COLUMN `itemH`,
DROP COLUMN `itemCountH`;

-- mail_server_template_conditions
DROP TABLE IF EXISTS `mail_server_template_conditions`;
CREATE TABLE `mail_server_template_conditions` (
`id` INT UNSIGNED AUTO_INCREMENT,
`templateID` INT UNSIGNED NOT NULL,
`conditionType` ENUM('Level', 'PlayTime', 'Quest', 'Achievement', 'Reputation', 'Faction', 'Race', 'Class') NOT NULL,
`conditionValue` INT UNSIGNED NOT NULL,
`conditionState` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
CONSTRAINT `fk_mail_template_conditions`
FOREIGN KEY (`templateID`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE
) ENGINE=InnoDB COLLATE='utf8mb4_unicode_ci';

DELETE FROM `mail_server_template_conditions` WHERE `conditionType` = 'Level';
INSERT INTO `mail_server_template_conditions` (`templateID`, `conditionType`, `conditionValue`)
SELECT `id`, 'Level', `reqLevel` FROM `mail_server_template` WHERE `reqLevel` > 0;

DELETE FROM `mail_server_template_conditions` WHERE `conditionType` = 'PlayTime';
INSERT INTO `mail_server_template_conditions` (`templateID`, `conditionType`, `conditionValue`)
SELECT `id`, 'PlayTime', `reqPlayTime` FROM `mail_server_template` WHERE `reqPlayTime` > 0;

ALTER TABLE `mail_server_template`
DROP COLUMN `reqLevel`,
DROP COLUMN `reqPlayTime`;

-- mail_server_character
-- Make sure we dont have invalid instances in mail_server_character.mailId before we add the foregin key to avoid SQL errors
DELETE FROM `mail_server_character` WHERE `mailId` NOT IN (SELECT `id` FROM `mail_server_template`);

-- Add foreign key for mail_server_character.mailId
ALTER TABLE `mail_server_character`
DROP PRIMARY KEY,
ADD PRIMARY KEY (`guid`, `mailId`),
ADD CONSTRAINT `fk_mail_server_character`
FOREIGN KEY (`mailId`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE;
4 changes: 4 additions & 0 deletions data/sql/updates/db_world/2025_03_08_01.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- DB update 2025_03_08_00 -> 2025_03_08_01
--
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_sunblade_scout' WHERE (`entry` = 25372);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25372);
70 changes: 70 additions & 0 deletions data/sql/updates/db_world/2025_03_09_00.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
-- DB update 2025_03_08_01 -> 2025_03_09_00
-- add creature
SET @CGUID := 502;
DELETE FROM `creature` WHERE `id1` = 26280 AND `guid` = @CGUID;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(@CGUID, 26280, 0, 0, 571, 65, 4157, 1, 1, 1, 3373.642822265625, 2584.31494140625, 42.15882492065429687, 1.623156189918518066, 120, 0, 0, 9291, 3231, 0, 0, 0, 0, '', 58629, 0, 'has guid specific SAI');

-- This creature is not a fighting stance
DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID));
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(@CGUID, 0, 0, 0, 1, 0, 0, '');

-- Dragonblight Mage Hunter with guid 502 smart ai
SET @ENTRY := -1 * @CGUID;
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 26280;
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 21, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 200124, 26496, 0, 0, 0, 0, 0, 'On home reached - Creature (26496) with guid 200124 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 200124, 26496, 0, 0, 0, 0, 0, 'On respawn - Creature(26496) with guid 200124 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dragonblight Mage Hunter - On Data Set 0 1 - Respawn Self');

DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @ENTRY AND `SourceId` = 0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES
(22, 3, @ENTRY, 0, 0, 36, 1, 0, 0, 0, 1, 'Dragonblight Mage Hunter must be dead to execute SAI (respawn)');

-- 134217728 - CREATURE_FLAG_EXTRA_DONT_OVERRIDE_SAI_ENTRY
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|134217728 WHERE (`entry` = 26280);

-- Wind Trader Mu'fah smart ai
SET @ENTRY := 26496;
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryOrGuid` IN (@ENTRY * 100);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 9, 0, 100, 0, 0, 0, 11000, 15000, 0, 20, 11, 51817, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - Within 0-20 Range - Cast \'Typhoon\''),
(@ENTRY, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On aggro - Self: Talk 1 to Attacked unit'),
(@ENTRY, 0, 2, 3, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'On respawn - Creature (26280) with guid 502 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 12980, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - On Respawn - Cast \'Simple Teleport\''),
(@ENTRY, 0, 4, 0, 1, 0, 100, 0, 1000, 1000, 45000, 60000, 0, 0, 80, @ENTRY * 100, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - Out of Combat - Run Script'),
(@ENTRY * 100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah Talk 0 to invoker'),
(@ENTRY * 100, 9, 1, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'Creature with guid 502 (fetching): Talk 0 to invoker'),
(@ENTRY, 0, 5, 0, 21, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'On home reached - Creature (26280) with guid 502 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 6, 0, 38, 0, 100, 0, 0, 1, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On data[0] set to 1 - Self: Set respawn timer to 0 ms');

DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @ENTRY AND `SourceId` = 0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES
(22, 7, @ENTRY, 0, 0, 36, 1, 0, 0, 0, 1, 'Wind Trader Mu\'fah must be dead to execute SAI (respawn)');

DELETE FROM `creature_text` WHERE `CreatureID` = 26496;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(26496, 0, 0, 'You will tell your commander that I will not wait a moment longer! Does he want this alliance or not?!', 12, 0, 100, 396, 0, 0, 25707, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 1, 'I have been waiting here for an eternity since our last meeting! When will Goramosh be done with his ritual?', 12, 0, 100, 396, 0, 0, 25708, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 2, 'This is insufferable! I represent a nexus-prince, I am not to be made to wait! Goramosh should be waiting on me!', 12, 0, 100, 15, 0, 0, 25710, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 3, 'I was personally assured by Malygos that your commander would make the details of this accord his top priority. Now let me pass!', 12, 0, 100, 15, 0, 0, 25711, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 4, 'If I have to wait much longer, I will be forced to reconsider the proposed accord between the Ethereum and the Blue Dragonflight!', 12, 0, 100, 15, 0, 0, 25712, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 5, 'You are nothing but an underling! I will not wait a moment longer! Escort me to Goramosh immediately!', 12, 0, 100, 396, 0, 0, 25713, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 6, 'Yes, yes, I am given to understand that the ley line has already been diverted. I will wait no longer... summon Goramosh this instant!', 12, 0, 100, 15, 0, 0, 25735, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 7, 'Your surge needle appears to have worked perfectly. Surely Goramosh now has time to speak further of the proposed accord?', 12, 0, 100, 396, 0, 0, 25736, 0, 'Wind Trader Mu\'fah'),
(26496, 1, 0, 'What\'s this, more delays?!', 12, 0, 100, 0, 0, 0, 25715, 0, 'Wind Trader Mu\'fah');

DELETE FROM `creature_text` WHERE `CreatureID` = 26280;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(26280, 0, 0, 'I cannot.', 12, 0, 100, 396, 0, 0, 25912, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 1, 'No.', 12, 0, 100, 396, 0, 0, 25913, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 2, 'You\'ll have to be patient.', 12, 0, 100, 396, 0, 0, 25914, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 3, 'Goramosh is busy with a ritual right now.', 12, 0, 100, 396, 0, 0, 25915, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 4, 'My orders are that you must wait here.', 12, 0, 100, 396, 0, 0, 25916, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 5, 'The master will be with you momentarily.', 12, 0, 100, 396, 0, 0, 25917, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 6, 'It won\'t be long now.', 12, 0, 100, 396, 0, 0, 25918, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 7, 'My apologies, ambassador. My orders were quite clear.', 12, 0, 100, 396, 0, 0, 25919, 0, 'Dragonblight Mage Hunter');
3 changes: 3 additions & 0 deletions data/sql/updates/db_world/2025_03_09_01.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- DB update 2025_03_09_00 -> 2025_03_09_01
-- Increase Fists of fury proc chance to approx. 5%
UPDATE `spell_proc_event` SET `ppmRate` = 1.5 WHERE (`entry` = 41989);
5 changes: 3 additions & 2 deletions deps/zlib/inflate.c
Original file line number Diff line number Diff line change
Expand Up @@ -763,9 +763,10 @@ int flush;
copy = state->length;
if (copy > have) copy = have;
if (copy) {
len = state->head->extra_len - state->length;
if (state->head != Z_NULL &&
state->head->extra != Z_NULL) {
len = state->head->extra_len - state->length;
state->head->extra != Z_NULL &&
len < state->head->extra_max) {
zmemcpy(state->head->extra + len, next,
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
Expand Down
5 changes: 3 additions & 2 deletions src/server/game/Entities/Unit/Unit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3928,7 +3928,7 @@ void Unit::_UpdateAutoRepeatSpell()
static uint32 const HUNTER_AUTOSHOOT = 75;

// Check "realtime" interrupts
if ((IsPlayer() && ToPlayer()->isMoving()) || IsNonMeleeSpellCast(false, false, true, spellProto->Id == HUNTER_AUTOSHOOT))
if ((IsPlayer() && ToPlayer()->isMoving() && spellProto->Id != HUNTER_AUTOSHOOT) || IsNonMeleeSpellCast(false, false, true, spellProto->Id == HUNTER_AUTOSHOOT))
{
// cancel wand shoot
if (spellProto->Id != HUNTER_AUTOSHOOT)
Expand All @@ -3937,7 +3937,8 @@ void Unit::_UpdateAutoRepeatSpell()
return;
}

if (m_AutoRepeatFirstCast && getAttackTimer(RANGED_ATTACK) < 500)
// Apply delay (Hunter's autoshoot not affected)
if (m_AutoRepeatFirstCast && getAttackTimer(RANGED_ATTACK) < 500 && spellProto->Id != HUNTER_AUTOSHOOT)
{
setAttackTimer(RANGED_ATTACK, 500);
}
Expand Down
113 changes: 0 additions & 113 deletions src/server/game/Globals/ObjectMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10297,116 +10297,3 @@ uint32 ObjectMgr::GetQuestMoneyReward(uint8 level, uint32 questMoneyDifficulty)

return 0;
}

void ObjectMgr::SendServerMail(Player* player, uint32 id, uint32 reqLevel, uint32 reqPlayTime, uint32 rewardMoneyA, uint32 rewardMoneyH, uint32 rewardItemA, uint32 rewardItemCountA, uint32 rewardItemH, uint32 rewardItemCountH, std::string subject, std::string body, uint8 active) const
{
if (active)
{
if (player->GetLevel() < reqLevel)
return;

if (player->GetTotalPlayedTime() < reqPlayTime)
return;

CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();

MailSender sender(MAIL_NORMAL, player->GetGUID().GetCounter(), MAIL_STATIONERY_GM);
MailDraft draft(subject, body);

draft.AddMoney(player->GetTeamId() == TEAM_ALLIANCE ? rewardMoneyA : rewardMoneyH);
if (Item* mailItem = Item::CreateItem(player->GetTeamId() == TEAM_ALLIANCE ? rewardItemA : rewardItemH, player->GetTeamId() == TEAM_ALLIANCE ? rewardItemCountA : rewardItemCountH))
{
mailItem->SaveToDB(trans);
draft.AddItem(mailItem);
}

draft.SendMailTo(trans, MailReceiver(player), sender);
CharacterDatabase.CommitTransaction(trans);

CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_MAIL_SERVER_CHARACTER);
stmt->SetData(0, player->GetGUID().GetCounter());
stmt->SetData(1, id);
CharacterDatabase.Execute(stmt);

LOG_DEBUG("entities.player", "ObjectMgr::SendServerMail() Sent mail id {} to {}", id, player->GetGUID().ToString());
}
}

void ObjectMgr::LoadMailServerTemplates()
{
uint32 oldMSTime = getMSTime();

_serverMailStore.clear(); // for reload case

// 0 1 2 3 4 5 6 7 8 9 10 11
QueryResult result = CharacterDatabase.Query("SELECT `id`, `reqLevel`, `reqPlayTime`, `moneyA`, `moneyH`, `itemA`, `itemCountA`, `itemH`,`itemCountH`, `subject`, `body`, `active` FROM `mail_server_template`");
if (!result)
{
LOG_INFO("sql.sql", ">> Loaded 0 server mail rewards. DB table `mail_server_template` is empty.");
LOG_INFO("server.loading", " ");
return;
}

_serverMailStore.rehash(result->GetRowCount());

do
{
Field* fields = result->Fetch();

uint32 id = fields[0].Get<uint32>();

ServerMail& servMail = _serverMailStore[id];

servMail.id = id;
servMail.reqLevel = fields[1].Get<uint8>();
servMail.reqPlayTime = fields[2].Get<uint32>();
servMail.moneyA = fields[3].Get<uint32>();
servMail.moneyH = fields[4].Get<uint32>();
servMail.itemA = fields[5].Get<uint32>();
servMail.itemCountA = fields[6].Get<uint32>();
servMail.itemH = fields[7].Get<uint32>();
servMail.itemCountH = fields[8].Get<uint32>();
servMail.subject = fields[9].Get<std::string>();
servMail.body = fields[10].Get<std::string>();
servMail.active = fields[11].Get<uint8>();

if (servMail.reqLevel > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has reqLevel {} but max level is {} for id {}, skipped.", servMail.reqLevel, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL), servMail.id);
return;
}

if (servMail.moneyA > MAX_MONEY_AMOUNT || servMail.moneyH > MAX_MONEY_AMOUNT)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has moneyA {} or moneyH {} larger than MAX_MONEY_AMOUNT {} for id {}, skipped.", servMail.moneyA, servMail.moneyH, MAX_MONEY_AMOUNT, servMail.id);
return;
}

ItemTemplate const* itemTemplateA = sObjectMgr->GetItemTemplate(servMail.itemA);
if (!itemTemplateA && servMail.itemA)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has invalid item in itemA {} for id {}, skipped.", servMail.itemA, servMail.id);
return;
}
ItemTemplate const* itemTemplateH = sObjectMgr->GetItemTemplate(servMail.itemH);
if (!itemTemplateH && servMail.itemH)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has invalid item in itemH {} for id {}, skipped.", servMail.itemH, servMail.id);
return;
}

if (!servMail.itemA && servMail.itemCountA)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has itemCountA {} with no ItemA, set to 0", servMail.itemCountA);
servMail.itemCountA = 0;
}
if (!servMail.itemH && servMail.itemCountH)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has itemCountH {} with no ItemH, set to 0", servMail.itemCountH);
servMail.itemCountH = 0;
}
} while (result->NextRow());

LOG_INFO("server.loading", ">> Loaded {} Mail Server Template in {} ms", _serverMailStore.size(), GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
Loading

0 comments on commit 02faa9e

Please sign in to comment.