diff options
-rw-r--r-- | sql/base/characters_database.sql | 3 | ||||
-rw-r--r-- | sql/updates/10741_characters_character_aura.sql | 4 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 17 | ||||
-rwxr-xr-x | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 4 |
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; } |