aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql3
-rw-r--r--sql/updates/10741_characters_character_aura.sql4
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp17
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp4
4 files changed, 17 insertions, 11 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 11acfcc0ef7..f401d3a7efa 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -461,6 +461,7 @@ DROP TABLE IF EXISTS `character_aura`;
CREATE TABLE `character_aura` (
`guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier',
`caster_guid` bigint(20) unsigned NOT NULL default '0' COMMENT 'Full Global Unique Identifier',
+ `item_guid` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
`spell` int(11) unsigned NOT NULL default '0',
`effect_mask` tinyint(3) unsigned NOT NULL default '0',
`recalculate_mask` tinyint(3) unsigned NOT NULL default '0',
@@ -474,7 +475,7 @@ CREATE TABLE `character_aura` (
`maxduration` int(11) NOT NULL default '0',
`remaintime` int(11) NOT NULL default '0',
`remaincharges` tinyint(3) unsigned NOT NULL default '0',
- PRIMARY KEY (`guid`,`caster_guid`,`spell`,`effect_mask`)
+ PRIMARY KEY (`guid`,`caster_guid`,`item_guid`,`spell`,`effect_mask`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/sql/updates/10741_characters_character_aura.sql b/sql/updates/10741_characters_character_aura.sql
new file mode 100644
index 00000000000..d9afb213a76
--- /dev/null
+++ b/sql/updates/10741_characters_character_aura.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `character_aura`
+ ADD COLUMN `item_guid` bigint(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `caster_guid`,
+ DROP PRIMARY KEY,
+ ADD PRIMARY KEY (`guid`,`caster_guid`,`item_guid`,`spell`,`effect_mask`);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index d441a73f7fd..25508e747dc 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -18120,18 +18120,18 @@ void Player::_SaveAuras(SQLTransaction& trans)
uint8 recalculateMask = 0;
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
- if (aura->GetEffect(i))
+ if (AuraEffect const* effect = aura->GetEffect(i))
{
- baseDamage[i] = aura->GetEffect(i)->GetBaseAmount();
- damage[i] = aura->GetEffect(i)->GetAmount();
- effMask |= (1<<i);
- if (aura->GetEffect(i)->CanBeRecalculated())
- recalculateMask |= (1<<i);
+ baseDamage[i] = effect->GetBaseAmount();
+ damage[i] = effect->GetAmount();
+ effMask |= 1 << i;
+ if (effect->CanBeRecalculated())
+ recalculateMask |= 1 << i;
}
else
{
- baseDamage[i] = NULL;
- damage[i] = NULL;
+ baseDamage[i] = 0;
+ damage[i] = 0;
}
}
@@ -18139,6 +18139,7 @@ void Player::_SaveAuras(SQLTransaction& trans)
stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_AURA);
stmt->setUInt32(index++, GetGUIDLow());
stmt->setUInt64(index++, itr->second->GetCasterGUID());
+ stmt->setUInt64(index++, itr->second->GetCastItemGUID());
stmt->setUInt32(index++, itr->second->GetId());
stmt->setUInt8(index++, effMask);
stmt->setUInt8(index++, recalculateMask);
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index af7d7201d4f..63cbac6ead0 100755
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -255,8 +255,8 @@ bool CharacterDatabaseConnection::Open()
// Auras
PrepareStatement(CHAR_DEL_AURA, "DELETE FROM character_aura WHERE guid = ?", true);
- PrepareStatement(CHAR_ADD_AURA, "INSERT INTO character_aura (guid,caster_guid,spell,effect_mask,recalculate_mask,stackcount,amount0,amount1,amount2,base_amount0,base_amount1,base_amount2,maxduration,remaintime,remaincharges) "
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", true);
+ PrepareStatement(CHAR_ADD_AURA, "INSERT INTO character_aura (guid,caster_guid,item_guid,spell,effect_mask,recalculate_mask,stackcount,amount0,amount1,amount2,base_amount0,base_amount1,base_amount2,maxduration,remaintime,remaincharges) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", true);
return true;
}