Core/Spells: Fix display for Shaman totems
This commit is contained in:
@@ -83,13 +83,6 @@ namespace Framework.Constants
|
|||||||
MiniPet = 5,
|
MiniPet = 5,
|
||||||
Quest = 6,
|
Quest = 6,
|
||||||
}
|
}
|
||||||
public enum PlayerTotemType
|
|
||||||
{
|
|
||||||
Fire = 63,
|
|
||||||
Earth = 81,
|
|
||||||
Water = 82,
|
|
||||||
Air = 83
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BaseModType
|
public enum BaseModType
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -68,18 +68,11 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set display id depending on caster's race
|
// set display id depending on caster's race
|
||||||
SpellInfo createdBySpell = Global.SpellMgr.GetSpellInfo(GetUInt32Value(UnitFields.CreatedBySpell));
|
uint totemDisplayId = Global.SpellMgr.GetModelForTotem(GetUInt32Value(UnitFields.CreatedBySpell), owner.GetRace());
|
||||||
if (createdBySpell != null)
|
if (totemDisplayId == 0)
|
||||||
{
|
Log.outError(LogFilter.Spells, $"Spell {GetUInt32Value(UnitFields.CreatedBySpell)} with RaceID ({owner.GetRace()}) have no totem model data defined, set to default model.");
|
||||||
SpellEffectInfo[] effects = createdBySpell.GetEffectsForDifficulty(Difficulty.None);
|
else
|
||||||
var summonEffect = effects.FirstOrDefault(effect =>
|
SetDisplayId(totemDisplayId);
|
||||||
{
|
|
||||||
return effect != null && effect.IsEffect(SpellEffectName.Summon);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (summonEffect != null)
|
|
||||||
SetDisplayId(owner.GetModelForTotem((PlayerTotemType)summonEffect.MiscValueB));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
base.InitStats(duration);
|
base.InitStats(duration);
|
||||||
|
|||||||
@@ -2235,104 +2235,6 @@ namespace Game.Entities
|
|||||||
SetDisplayId(GetNativeDisplayId());
|
SetDisplayId(GetNativeDisplayId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetModelForTotem(PlayerTotemType totemType)
|
|
||||||
{
|
|
||||||
switch (GetRace())
|
|
||||||
{
|
|
||||||
case Race.Orc:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 30758;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 30757;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 30759;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 30756;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Race.Dwarf:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 30754;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 30753;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 30755;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 30736;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Race.Troll:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 30762;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 30761;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 30763;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 30760;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Race.Tauren:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 4589;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 4588;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 4587;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 4590;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Race.Draenei:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 19074;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 19073;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 19075;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 19071;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Race.Goblin:
|
|
||||||
{
|
|
||||||
switch (totemType)
|
|
||||||
{
|
|
||||||
case PlayerTotemType.Fire: // fire
|
|
||||||
return 30783;
|
|
||||||
case PlayerTotemType.Earth: // earth
|
|
||||||
return 30782;
|
|
||||||
case PlayerTotemType.Water: // water
|
|
||||||
return 30784;
|
|
||||||
case PlayerTotemType.Air: // air
|
|
||||||
return 30781;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsStopped() { return !HasUnitState(UnitState.Moving); }
|
public bool IsStopped() { return !HasUnitState(UnitState.Moving); }
|
||||||
|
|
||||||
public bool HasUnitTypeMask(UnitTypeMask mask) { return Convert.ToBoolean(mask & m_unitTypeMask); }
|
public bool HasUnitTypeMask(UnitTypeMask mask) { return Convert.ToBoolean(mask & m_unitTypeMask); }
|
||||||
|
|||||||
@@ -390,6 +390,9 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, "Loading PetFamilySpellsStore Data...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading PetFamilySpellsStore Data...");
|
||||||
Global.SpellMgr.LoadPetFamilySpellsStore();
|
Global.SpellMgr.LoadPetFamilySpellsStore();
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loading Spell Totem models...");
|
||||||
|
Global.SpellMgr.LoadSpellTotemModel();
|
||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loading GameObject models...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading GameObject models...");
|
||||||
GameObjectModel.LoadGameObjectModelList();
|
GameObjectModel.LoadGameObjectModelList();
|
||||||
|
|
||||||
|
|||||||
@@ -2899,6 +2899,52 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadSpellTotemModel()
|
||||||
|
{
|
||||||
|
uint oldMSTime = Time.GetMSTime();
|
||||||
|
|
||||||
|
SQLResult result = DB.World.Query("SELECT SpellID, RaceID, DisplayID from spell_totem_model");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 spell totem model records. DB table `spell_totem_model` is empty.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint count = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint spellId = result.Read<uint>(0);
|
||||||
|
byte race = result.Read<byte>(1);
|
||||||
|
uint displayId = result.Read<uint>(2);
|
||||||
|
|
||||||
|
SpellInfo spellEntry = GetSpellInfo(spellId);
|
||||||
|
if (spellEntry == null)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"SpellID: {spellId} in `spell_totem_model` table could not be found in dbc, skipped.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CliDB.ChrRacesStorage.ContainsKey(race))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Race {race} defined in `spell_totem_model` does not exists, skipped.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CliDB.CreatureDisplayInfoStorage.ContainsKey(displayId))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"SpellID: {spellId} defined in `spell_totem_model` has non-existing model ({displayId}).");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
mSpellTotemModel[Tuple.Create(spellId, race)] = displayId;
|
||||||
|
++count;
|
||||||
|
|
||||||
|
} while (result.NextRow());
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} spell totem model records in {Time.GetMSTimeDiffToNow(oldMSTime)} ms");
|
||||||
|
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
bool isTriggerAura(AuraType type)
|
bool isTriggerAura(AuraType type)
|
||||||
@@ -2981,7 +3027,6 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// SpellInfo object management
|
// SpellInfo object management
|
||||||
public SpellInfo GetSpellInfo(uint spellId)
|
public SpellInfo GetSpellInfo(uint spellId)
|
||||||
{
|
{
|
||||||
@@ -3085,6 +3130,11 @@ namespace Game.Entities
|
|||||||
return SpellSchools.Normal;
|
return SpellSchools.Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public uint GetModelForTotem(uint spellId, Race race)
|
||||||
|
{
|
||||||
|
return mSpellTotemModel.LookupByKey(Tuple.Create(spellId, race));
|
||||||
|
}
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
//private:
|
//private:
|
||||||
Dictionary<uint, SpellChainNode> mSpellChains = new Dictionary<uint, SpellChainNode>();
|
Dictionary<uint, SpellChainNode> mSpellChains = new Dictionary<uint, SpellChainNode>();
|
||||||
@@ -3112,6 +3162,7 @@ namespace Game.Entities
|
|||||||
Dictionary<uint, MultiMap<uint, uint>> mPetLevelupSpellMap = new Dictionary<uint, MultiMap<uint, uint>>();
|
Dictionary<uint, MultiMap<uint, uint>> mPetLevelupSpellMap = new Dictionary<uint, MultiMap<uint, uint>>();
|
||||||
Dictionary<uint, PetDefaultSpellsEntry> mPetDefaultSpellsMap = new Dictionary<uint, PetDefaultSpellsEntry>(); // only spells not listed in related mPetLevelupSpellMap entry
|
Dictionary<uint, PetDefaultSpellsEntry> mPetDefaultSpellsMap = new Dictionary<uint, PetDefaultSpellsEntry>(); // only spells not listed in related mPetLevelupSpellMap entry
|
||||||
Dictionary<uint, SpellInfo> mSpellInfoMap = new Dictionary<uint, SpellInfo>();
|
Dictionary<uint, SpellInfo> mSpellInfoMap = new Dictionary<uint, SpellInfo>();
|
||||||
|
Dictionary<Tuple<uint, byte>, uint> mSpellTotemModel = new Dictionary<Tuple<uint, byte>, uint>();
|
||||||
|
|
||||||
public delegate void AuraEffectHandler(AuraEffect effect, AuraApplication aurApp, AuraEffectHandleModes mode, bool apply);
|
public delegate void AuraEffectHandler(AuraEffect effect, AuraApplication aurApp, AuraEffectHandleModes mode, bool apply);
|
||||||
Dictionary<AuraType, AuraEffectHandler> AuraEffectHandlers = new Dictionary<AuraType, AuraEffectHandler>();
|
Dictionary<AuraType, AuraEffectHandler> AuraEffectHandlers = new Dictionary<AuraType, AuraEffectHandler>();
|
||||||
|
|||||||
@@ -0,0 +1,213 @@
|
|||||||
|
--
|
||||||
|
-- Table structure for table `spell_totem_model`
|
||||||
|
--
|
||||||
|
DROP TABLE IF EXISTS `spell_totem_model`;
|
||||||
|
CREATE TABLE `spell_totem_model` (
|
||||||
|
`SpellID` int(10) unsigned NOT NULL,
|
||||||
|
`RaceID` tinyint(3) unsigned NOT NULL,
|
||||||
|
`DisplayID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`SpellID`,`RaceID`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
DELETE FROM `spell_totem_model` WHERE `SpellID` IN (2484, 5394, 51485, 98008, 108280, 157153, 192058, 192077, 192222, 196932, 198838, 202188, 204330, 204331, 204332, 204336, 207399, 210651, 210657, 210660);
|
||||||
|
INSERT INTO `spell_totem_model` (`SpellID`, `RaceID`, `DisplayID`) VALUES
|
||||||
|
(2484, 2, 30757),
|
||||||
|
(2484, 3, 30753),
|
||||||
|
(2484, 6, 4588),
|
||||||
|
(2484, 8, 30761),
|
||||||
|
(2484, 9, 30782),
|
||||||
|
(2484, 11, 19073),
|
||||||
|
(2484, 24, 41669),
|
||||||
|
(2484, 25, 41669),
|
||||||
|
(2484, 26, 41669),
|
||||||
|
(2484, 28, 81443),
|
||||||
|
(5394, 2, 30759),
|
||||||
|
(5394, 3, 30755),
|
||||||
|
(5394, 6, 4587),
|
||||||
|
(5394, 8, 30763),
|
||||||
|
(5394, 9, 30784),
|
||||||
|
(5394, 11, 19075),
|
||||||
|
(5394, 24, 41671),
|
||||||
|
(5394, 25, 41671),
|
||||||
|
(5394, 26, 41671),
|
||||||
|
(5394, 28, 81442),
|
||||||
|
(51485, 2, 30757),
|
||||||
|
(51485, 3, 30753),
|
||||||
|
(51485, 6, 4588),
|
||||||
|
(51485, 8, 30761),
|
||||||
|
(51485, 9, 30782),
|
||||||
|
(51485, 11, 19073),
|
||||||
|
(51485, 24, 41669),
|
||||||
|
(51485, 25, 41669),
|
||||||
|
(51485, 26, 41669),
|
||||||
|
(51485, 28, 81443),
|
||||||
|
(98008, 2, 30756),
|
||||||
|
(98008, 3, 30736),
|
||||||
|
(98008, 6, 4590),
|
||||||
|
(98008, 8, 30760),
|
||||||
|
(98008, 9, 30781),
|
||||||
|
(98008, 11, 19071),
|
||||||
|
(98008, 24, 41668),
|
||||||
|
(98008, 25, 41668),
|
||||||
|
(98008, 26, 41668),
|
||||||
|
(98008, 28, 81441),
|
||||||
|
(108280, 2, 30759),
|
||||||
|
(108280, 3, 30755),
|
||||||
|
(108280, 6, 4587),
|
||||||
|
(108280, 8, 30763),
|
||||||
|
(108280, 9, 30784),
|
||||||
|
(108280, 11, 19075),
|
||||||
|
(108280, 24, 41671),
|
||||||
|
(108280, 25, 41671),
|
||||||
|
(108280, 26, 41671),
|
||||||
|
(108280, 28, 81442),
|
||||||
|
(157153, 2, 30759),
|
||||||
|
(157153, 3, 30755),
|
||||||
|
(157153, 6, 4587),
|
||||||
|
(157153, 8, 30763),
|
||||||
|
(157153, 9, 30784),
|
||||||
|
(157153, 11, 19075),
|
||||||
|
(157153, 24, 41671),
|
||||||
|
(157153, 25, 41671),
|
||||||
|
(157153, 26, 41671),
|
||||||
|
(157153, 28, 81442),
|
||||||
|
(192058, 2, 30756),
|
||||||
|
(192058, 3, 30736),
|
||||||
|
(192058, 6, 4590),
|
||||||
|
(192058, 8, 30760),
|
||||||
|
(192058, 9, 30781),
|
||||||
|
(192058, 11, 19071),
|
||||||
|
(192058, 24, 41668),
|
||||||
|
(192058, 25, 41668),
|
||||||
|
(192058, 26, 41668),
|
||||||
|
(192058, 28, 81441),
|
||||||
|
(192077, 2, 30756),
|
||||||
|
(192077, 3, 30736),
|
||||||
|
(192077, 6, 4590),
|
||||||
|
(192077, 8, 30760),
|
||||||
|
(192077, 9, 30781),
|
||||||
|
(192077, 11, 19071),
|
||||||
|
(192077, 24, 41668),
|
||||||
|
(192077, 25, 41668),
|
||||||
|
(192077, 26, 41668),
|
||||||
|
(192077, 28, 81441),
|
||||||
|
(192222, 2, 30758),
|
||||||
|
(192222, 3, 30754),
|
||||||
|
(192222, 6, 4589),
|
||||||
|
(192222, 8, 30762),
|
||||||
|
(192222, 9, 30783),
|
||||||
|
(192222, 11, 19074),
|
||||||
|
(192222, 24, 41670),
|
||||||
|
(192222, 25, 41670),
|
||||||
|
(192222, 26, 41670),
|
||||||
|
(192222, 28, 81444),
|
||||||
|
(196932, 2, 30758),
|
||||||
|
(196932, 3, 30754),
|
||||||
|
(196932, 6, 4589),
|
||||||
|
(196932, 8, 30762),
|
||||||
|
(196932, 9, 30783),
|
||||||
|
(196932, 11, 19074),
|
||||||
|
(196932, 24, 41670),
|
||||||
|
(196932, 25, 41670),
|
||||||
|
(196932, 26, 41670),
|
||||||
|
(196932, 28, 81444),
|
||||||
|
(198838, 2, 30757),
|
||||||
|
(198838, 3, 30753),
|
||||||
|
(198838, 6, 4588),
|
||||||
|
(198838, 8, 30761),
|
||||||
|
(198838, 9, 30782),
|
||||||
|
(198838, 11, 19073),
|
||||||
|
(198838, 24, 41669),
|
||||||
|
(198838, 25, 41669),
|
||||||
|
(198838, 26, 41669),
|
||||||
|
(198838, 28, 81443),
|
||||||
|
(202188, 2, 30757),
|
||||||
|
(202188, 3, 30753),
|
||||||
|
(202188, 6, 4588),
|
||||||
|
(202188, 8, 30761),
|
||||||
|
(202188, 9, 30782),
|
||||||
|
(202188, 11, 19073),
|
||||||
|
(202188, 24, 41669),
|
||||||
|
(202188, 25, 41669),
|
||||||
|
(202188, 26, 41669),
|
||||||
|
(202188, 28, 81443),
|
||||||
|
(204330, 2, 30758),
|
||||||
|
(204330, 3, 30754),
|
||||||
|
(204330, 6, 4589),
|
||||||
|
(204330, 8, 30762),
|
||||||
|
(204330, 9, 30783),
|
||||||
|
(204330, 11, 19074),
|
||||||
|
(204330, 24, 41670),
|
||||||
|
(204330, 25, 41670),
|
||||||
|
(204330, 26, 41670),
|
||||||
|
(204330, 28, 81444),
|
||||||
|
(204331, 2, 30756),
|
||||||
|
(204331, 3, 30736),
|
||||||
|
(204331, 6, 4590),
|
||||||
|
(204331, 8, 30760),
|
||||||
|
(204331, 9, 30781),
|
||||||
|
(204331, 11, 19071),
|
||||||
|
(204331, 24, 41668),
|
||||||
|
(204331, 25, 41668),
|
||||||
|
(204331, 26, 41668),
|
||||||
|
(204331, 28, 81441),
|
||||||
|
(204332, 2, 30756),
|
||||||
|
(204332, 3, 30736),
|
||||||
|
(204332, 6, 4590),
|
||||||
|
(204332, 8, 30760),
|
||||||
|
(204332, 9, 30781),
|
||||||
|
(204332, 11, 19071),
|
||||||
|
(204332, 24, 41668),
|
||||||
|
(204332, 25, 41668),
|
||||||
|
(204332, 26, 41668),
|
||||||
|
(204332, 28, 81441),
|
||||||
|
(204336, 2, 30756),
|
||||||
|
(204336, 3, 30736),
|
||||||
|
(204336, 6, 4590),
|
||||||
|
(204336, 8, 30760),
|
||||||
|
(204336, 9, 30781),
|
||||||
|
(204336, 11, 19071),
|
||||||
|
(204336, 24, 41668),
|
||||||
|
(204336, 25, 41668),
|
||||||
|
(204336, 26, 41668),
|
||||||
|
(204336, 28, 81441),
|
||||||
|
(207399, 2, 30757),
|
||||||
|
(207399, 3, 30753),
|
||||||
|
(207399, 6, 4588),
|
||||||
|
(207399, 8, 30761),
|
||||||
|
(207399, 9, 30782),
|
||||||
|
(207399, 11, 19073),
|
||||||
|
(207399, 24, 41669),
|
||||||
|
(207399, 25, 41669),
|
||||||
|
(207399, 26, 41669),
|
||||||
|
(207399, 28, 81443),
|
||||||
|
(210651, 2, 30759),
|
||||||
|
(210651, 3, 30755),
|
||||||
|
(210651, 6, 4587),
|
||||||
|
(210651, 8, 30763),
|
||||||
|
(210651, 9, 30784),
|
||||||
|
(210651, 11, 19075),
|
||||||
|
(210651, 24, 41671),
|
||||||
|
(210651, 25, 41671),
|
||||||
|
(210651, 26, 41671),
|
||||||
|
(210651, 28, 81442),
|
||||||
|
(210657, 2, 30758),
|
||||||
|
(210657, 3, 30754),
|
||||||
|
(210657, 6, 4589),
|
||||||
|
(210657, 8, 30762),
|
||||||
|
(210657, 9, 30783),
|
||||||
|
(210657, 11, 19074),
|
||||||
|
(210657, 24, 41670),
|
||||||
|
(210657, 25, 41670),
|
||||||
|
(210657, 26, 41670),
|
||||||
|
(210657, 28, 81444),
|
||||||
|
(210660, 2, 30756),
|
||||||
|
(210660, 3, 30736),
|
||||||
|
(210660, 6, 4590),
|
||||||
|
(210660, 8, 30760),
|
||||||
|
(210660, 9, 30781),
|
||||||
|
(210660, 11, 19071),
|
||||||
|
(210660, 24, 41668),
|
||||||
|
(210660, 25, 41668),
|
||||||
|
(210660, 26, 41668),
|
||||||
|
(210660, 28, 81441);
|
||||||
Reference in New Issue
Block a user