--HG--
branch : trunk
This commit is contained in:
megamage
2009-02-26 20:36:28 -06:00
25 changed files with 3375 additions and 3326 deletions
-2
View File
@@ -1,2 +0,0 @@
-- Script for Yrykul Skeleton - Prince Keleseth Event
update creature_template set scriptname = 'mob_vrykul_skeleton' where entry = 23970;
+2
View File
@@ -0,0 +1,2 @@
-- Script for Yrykul Skeleton - Prince Keleseth Event
UPDATE `creature_template` SET `ScriptName`='mob_vrykul_skeleton' WHERE `entry`=23970;
@@ -1,4 +1,4 @@
ALTER TABLE character_db_version CHANGE COLUMN required_7314_01_characters_guild_rank required_7324_01_characters_character_spell bit; /*ALTER TABLE character_db_version CHANGE COLUMN required_7314_01_characters_guild_rank required_7324_01_characters_character_spell bit;*/
/* remove some deleted spells or ranks from characters */ /* remove some deleted spells or ranks from characters */
/* Mana Tap no longer Blood Elf Racial */ /* Mana Tap no longer Blood Elf Racial */
@@ -1,4 +1,4 @@
ALTER TABLE character_db_version CHANGE COLUMN required_7324_01_characters_character_spell required_7324_02_characters_character_aura bit; /*ALTER TABLE character_db_version CHANGE COLUMN required_7324_01_characters_character_spell required_7324_02_characters_character_aura bit;*/
/* remove some deleted spells or ranks from characters auras */ /* remove some deleted spells or ranks from characters auras */
/* Mana Tap no longer Blood Elf Racial */ /* Mana Tap no longer Blood Elf Racial */
@@ -1,4 +1,4 @@
ALTER TABLE db_version CHANGE COLUMN required_7312_01_mangos_mangos_string required_7331_01_mangos_command bit; /*ALTER TABLE db_version CHANGE COLUMN required_7312_01_mangos_mangos_string required_7331_01_mangos_command bit;*/
DELETE FROM `command` WHERE `name` = 'account set addon'; DELETE FROM `command` WHERE `name` = 'account set addon';
DELETE FROM `command` WHERE `name` = 'ban account'; DELETE FROM `command` WHERE `name` = 'ban account';
+11
View File
@@ -0,0 +1,11 @@
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
(48077, 48075, 0, 'Holy Nova (rank8)'),
(48078, 48076, 0, 'Holy Nova (rank9)'),
(47585, 60069, 0, 'Dispersion (transform/regen)');
DELETE FROM `spell_proc_event` WHERE `entry` IN (47549);
INSERT INTO `spell_proc_event` VALUES (47549, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
DELETE FROM `spell_proc_event` WHERE `entry` IN (47551);
INSERT INTO `spell_proc_event` VALUES (47551, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
DELETE FROM `spell_proc_event` WHERE `entry` IN (47552);
INSERT INTO `spell_proc_event` VALUES (47552, 0x00, 6, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
+3
View File
@@ -0,0 +1,3 @@
-- Bloodsurge
DELETE FROM `spell_proc_event` WHERE `entry` IN (46915);
INSERT INTO `spell_proc_event` VALUES (46915, 0x00, 6, 0x00000040, 0x00000404, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0);
+6
View File
@@ -43,5 +43,11 @@ INSTALL(FILES
1484_mangos_7307_01_characters_arena_team_member.sql 1484_mangos_7307_01_characters_arena_team_member.sql
1495_mangos_7312_01_world_trinity_string.sql 1495_mangos_7312_01_world_trinity_string.sql
1497_mangos_7314_01_characters_guild_rank.sql 1497_mangos_7314_01_characters_guild_rank.sql
1525_world_scripts.sql
1531_mangos_7324_01_characters_character_spell.sql
1531_mangos_7324_02_characters_character_aura.sql
1555_mangos_7331_01_world_command.sql
1558_world_spell_linked_spell.sql 1558_world_spell_linked_spell.sql
1559_world.sql
1570_world.sql
DESTINATION share/trinity/sql/updates) DESTINATION share/trinity/sql/updates)
+4
View File
@@ -313,6 +313,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_saat' WHERE `entry`=20201;
/* THE UNDERBOG */ /* THE UNDERBOG */
UPDATE `creature_template` SET `ScriptName`='mob_underbog_mushroom' WHERE `entry`=17990; UPDATE `creature_template` SET `ScriptName`='mob_underbog_mushroom' WHERE `entry`=17990;
UPDATE `creature_template` SET `ScriptName`='boss_hungarfen' WHERE `entry`=17770; UPDATE `creature_template` SET `ScriptName`='boss_hungarfen' WHERE `entry`=17770;
UPDATE `creature_template` SET `ScriptName`='boss_the_black_stalker' WHERE `entry`='17882';
/* THE STEAMVAULT */ /* THE STEAMVAULT */
UPDATE `instance_template` SET `script`='instance_steam_vault' WHERE `map`=545; UPDATE `instance_template` SET `script`='instance_steam_vault' WHERE `map`=545;
@@ -330,6 +331,7 @@ UPDATE `creature_template` SET `ScriptName`='mob_toxic_sporebat' WHERE `entry`=2
/* Leotheras the Blind event */ /* Leotheras the Blind event */
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind' WHERE `entry`=21215; UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind' WHERE `entry`=21215;
UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind_demonform' WHERE `entry`=21845; UPDATE `creature_template` SET `ScriptName`='boss_leotheras_the_blind_demonform' WHERE `entry`=21845;
UPDATE `creature_template` SET `ScriptName`='mob_greyheart_spellbinder' WHERE `entry` = '21806';
/* Fathom-lord Karathress event */ /* Fathom-lord Karathress event */
UPDATE `creature_template` SET `ScriptName`='boss_fathomlord_karathress' WHERE `entry`=21214; UPDATE `creature_template` SET `ScriptName`='boss_fathomlord_karathress' WHERE `entry`=21214;
UPDATE `creature_template` SET `ScriptName`='boss_fathomguard_sharkkis' WHERE `entry`=21966; UPDATE `creature_template` SET `ScriptName`='boss_fathomguard_sharkkis' WHERE `entry`=21966;
@@ -905,6 +907,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_parqual_fintallas' WHERE `entry
UPDATE `creature_template` SET `scriptname` = 'boss_keleseth' WHERE `entry` = '23953'; UPDATE `creature_template` SET `scriptname` = 'boss_keleseth' WHERE `entry` = '23953';
UPDATE `creature_template` SET `scriptname` = 'mob_frost_tomb' WHERE `entry` = '23965'; UPDATE `creature_template` SET `scriptname` = 'mob_frost_tomb' WHERE `entry` = '23965';
UPDATE `instance_template` SET `script`='instance_utgarde_keep' WHERE `map`= '574'; UPDATE `instance_template` SET `script`='instance_utgarde_keep' WHERE `map`= '574';
UPDATE `creature_template` SET `ScriptName`='mob_vrykul_skeleton' WHERE `entry`=23970;
/* WAILING CAVERNS */ /* WAILING CAVERNS */
@@ -954,6 +957,7 @@ UPDATE `creature_template` SET `ScriptName` = 'boss_koragg' WHERE `entry` =24247
UPDATE `creature_template` SET `ScriptName` = 'boss_zuljin' WHERE `entry` =23863; UPDATE `creature_template` SET `ScriptName` = 'boss_zuljin' WHERE `entry` =23863;
UPDATE `creature_template` SET `ScriptName` = 'do_nothing' WHERE `entry` = '24187'; UPDATE `creature_template` SET `ScriptName` = 'do_nothing' WHERE `entry` = '24187';
UPDATE `creature_template` SET `ScriptName` = 'mob_zuljin_vortex' WHERE `entry` = '24136'; UPDATE `creature_template` SET `ScriptName` = 'mob_zuljin_vortex' WHERE `entry` = '24136';
UPDATE `creature_template` SET `ScriptName` = 'npc_zulaman_hostage' WHERE `entry` IN (23790, 23999, 24024, 24001);
/* ZUL'FARRAK */ /* ZUL'FARRAK */
UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604; UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604;
+6 -1
View File
@@ -756,7 +756,12 @@ bool Item::IsFitToSpellRequirements(SpellEntry const* spellInfo) const
if(spellInfo->EquippedItemInventoryTypeMask != 0) // 0 == any inventory type if(spellInfo->EquippedItemInventoryTypeMask != 0) // 0 == any inventory type
{ {
if((spellInfo->EquippedItemInventoryTypeMask & (1 << proto->InventoryType)) == 0) // Special case - accept weapon type for main and offhand requirements
if(proto->InventoryType == INVTYPE_WEAPON &&
(spellInfo->EquippedItemInventoryTypeMask & (1 << INVTYPE_WEAPONMAINHAND) ||
spellInfo->EquippedItemInventoryTypeMask & (1 << INVTYPE_WEAPONOFFHAND)))
return true;
else if ((spellInfo->EquippedItemInventoryTypeMask & (1 << proto->InventoryType)) == 0)
return false; // inventory type not present in mask return false; // inventory type not present in mask
} }
+14 -8
View File
@@ -1127,7 +1127,20 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
// Apply additional spell effects to target // Apply additional spell effects to target
if (m_preCastSpell) if (m_preCastSpell)
m_caster->CastSpell(unit,m_preCastSpell, true, m_CastItem); {
// Special spell id
// TODO: Handle all of special spells in one place?
if(m_preCastSpell==61988)
{
//Cast forbearance
m_caster->CastSpell(unit,25771, true, m_CastItem);
// Cast Avenging Wrath Marker
m_caster->CastSpell(unit,61987, true, m_CastItem);
}
else
m_caster->CastSpell(unit,m_preCastSpell, true, m_CastItem);
}
for(uint32 effectNumber=0;effectNumber<3;effectNumber++) for(uint32 effectNumber=0;effectNumber<3;effectNumber++)
{ {
@@ -2179,13 +2192,6 @@ void Spell::cast(bool skipCheck)
m_preCastSpell = 23230; // Blood Fury - Healing Reduction m_preCastSpell = 23230; // Blood Fury - Healing Reduction
break; break;
} }
case SPELLFAMILY_PRIEST:
{
if (m_spellInfo->Id == 47585) // Dispersion (transform)
m_preCastSpell = 60069; // Dispersion (mana regen)
break;
}
} }
// traded items have trade slot instead of guid in m_itemTargetGUID // traded items have trade slot instead of guid in m_itemTargetGUID
// set to real guid to be sent later to the client // set to real guid to be sent later to the client
-6
View File
@@ -459,12 +459,6 @@ m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false)
Aura::~Aura() Aura::~Aura()
{ {
//Delete references to aura
if(GetAuraSlot() < MAX_AURAS && m_target && m_target->GetVisibleAura(GetAuraSlot()))
{
AuraSlotEntry * entry = m_target->GetVisibleAura(GetAuraSlot());
entry->m_slotAuras[GetEffIndex()]=NULL;
}
} }
AreaAura::AreaAura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, AreaAura::AreaAura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target,
+5 -5
View File
@@ -620,23 +620,23 @@ void Spell::SpellDamageSchoolDmg(uint32 effect_idx)
} }
case SPELLFAMILY_PALADIN: case SPELLFAMILY_PALADIN:
{ {
// Judgement of Vengeance ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance on the target // Judgement of Vengeance/Corruption ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance/Blood Corruption on the target
if((m_spellInfo->SpellFamilyFlags[1] & 0x8) && m_spellInfo->SpellIconID==2292) if((m_spellInfo->SpellFamilyFlags[1] & 0x800) && m_spellInfo->SpellIconID==2292)
{ {
float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK); float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) + int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) +
m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget); m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget);
damage+=int32(ap * 0.14f) + int32(holy * 22 / 100); damage+=int32(ap * 0.14f) + int32(holy * 22 / 100);
// Get stack of Holy Vengeance on the target added by caster // Get stack of Holy Vengeance/Blood Corruption on the target added by caster
uint32 stacks = 0; uint32 stacks = 0;
Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr)
if((*itr)->GetId() == 31803 && (*itr)->GetCasterGUID()==m_caster->GetGUID()) if(((*itr)->GetId() == 31803 || (*itr)->GetId() == 53742) && (*itr)->GetCasterGUID()==m_caster->GetGUID())
{ {
stacks = (*itr)->GetStackAmount(); stacks = (*itr)->GetStackAmount();
break; break;
} }
// + 10% for each application of Holy Vengeance on the target // + 10% for each application of Holy Vengeance/Blood Corruption on the target
if(stacks) if(stacks)
damage += damage * stacks * 10 /100; damage += damage * stacks * 10 /100;
} }
+5 -4
View File
@@ -1044,8 +1044,9 @@ void SpellMgr::LoadSpellProcEvents()
spe.schoolMask = fields[1].GetUInt32(); spe.schoolMask = fields[1].GetUInt32();
spe.spellFamilyName = fields[2].GetUInt32(); spe.spellFamilyName = fields[2].GetUInt32();
spe.spellFamilyMask = (uint64)fields[3].GetUInt32()|((uint64)fields[4].GetUInt32()<<32); spe.spellFamilyMask[0] = fields[3].GetUInt32();
spe.spellFamilyMask2= fields[5].GetUInt32(); spe.spellFamilyMask[1] = fields[4].GetUInt32();
spe.spellFamilyMask[2] = fields[5].GetUInt32();
spe.procFlags = fields[6].GetUInt32(); spe.procFlags = fields[6].GetUInt32();
spe.procEx = fields[7].GetUInt32(); spe.procEx = fields[7].GetUInt32();
spe.ppmRate = fields[8].GetFloat(); spe.ppmRate = fields[8].GetFloat();
@@ -1155,7 +1156,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP
return false; return false;
// spellFamilyName is Ok need check for spellFamilyMask if present // spellFamilyName is Ok need check for spellFamilyMask if present
if(spellProcEvent->spellFamilyMask || spellProcEvent->spellFamilyMask2) if(spellProcEvent->spellFamilyMask)
{ {
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0) if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0)
return false; return false;
@@ -2883,7 +2884,7 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellEntry const* spellproto
if (mechanic & (1<<MECHANIC_FEAR)) return DIMINISHING_FEAR; if (mechanic & (1<<MECHANIC_FEAR)) return DIMINISHING_FEAR;
if (mechanic & (1<<MECHANIC_CHARM)) return DIMINISHING_CHARM; if (mechanic & (1<<MECHANIC_CHARM)) return DIMINISHING_CHARM;
if (mechanic & (1<<MECHANIC_SILENCE)) return DIMINISHING_SILENCE; if (mechanic & (1<<MECHANIC_SILENCE)) return DIMINISHING_SILENCE;
if (mechanic & (1<<DIMINISHING_DISARM)) return DIMINISHING_DISARM; if (mechanic & (1<<MECHANIC_DISARM)) return DIMINISHING_DISARM;
if (mechanic & (1<<MECHANIC_FREEZE)) return DIMINISHING_FREEZE; if (mechanic & (1<<MECHANIC_FREEZE)) return DIMINISHING_FREEZE;
if (mechanic & ((1<<MECHANIC_KNOCKOUT) | (1<<MECHANIC_SAPPED))) return DIMINISHING_KNOCKOUT; if (mechanic & ((1<<MECHANIC_KNOCKOUT) | (1<<MECHANIC_SAPPED))) return DIMINISHING_KNOCKOUT;
if (mechanic & (1<<MECHANIC_BANISH)) return DIMINISHING_BANISH; if (mechanic & (1<<MECHANIC_BANISH)) return DIMINISHING_BANISH;
-1
View File
@@ -615,7 +615,6 @@ struct SpellProcEventEntry
uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2 uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
flag96 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do) flag96 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
uint32 spellFamilyMask2; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags2 (like auras 107 and 108 do)
uint32 procFlags; // bitmask for matching proc event uint32 procFlags; // bitmask for matching proc event
uint32 procEx; // proc Extend info (see ProcFlagsEx) uint32 procEx; // proc Extend info (see ProcFlagsEx)
float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
+32 -13
View File
@@ -209,18 +209,7 @@ void Unit::Update( uint32 p_time )
_UpdateAura(); _UpdateAura();
}else }else
m_AurasCheck -= p_time;*/ m_AurasCheck -= p_time;*/
const uint64& auramask = GetAuraUpdateMask(); UpdateAuras();
if (auramask)
{
for(uint32 i = 0; i < MAX_AURAS; ++i)
{
if(auramask & (uint64(1) << i))
{
SendAuraUpdate(i);
}
}
ResetAuraUpdateMask();
}
// WARNING! Order of execution here is important, do not change. // WARNING! Order of execution here is important, do not change.
// Spells must be processed with event system BEFORE they go to _UpdateSpells. // Spells must be processed with event system BEFORE they go to _UpdateSpells.
@@ -265,6 +254,22 @@ void Unit::Update( uint32 p_time )
i_motionMaster.UpdateMotion(p_time); i_motionMaster.UpdateMotion(p_time);
} }
void Unit::UpdateAuras()
{
const uint64& auramask = GetAuraUpdateMask();
if (auramask)
{
for(uint32 i = 0; i < MAX_AURAS; ++i)
{
if(auramask & (uint64(1) << i))
{
SendAuraUpdate(i);
}
}
ResetAuraUpdateMask();
}
}
bool Unit::haveOffhandWeapon() const bool Unit::haveOffhandWeapon() const
{ {
if(GetTypeId() == TYPEID_PLAYER) if(GetTypeId() == TYPEID_PLAYER)
@@ -4328,6 +4333,9 @@ Aura* Unit::GetAura(AuraType type, uint32 family, uint32 familyFlag1, uint32 fam
bool Unit::HasAura(uint32 spellId) const bool Unit::HasAura(uint32 spellId) const
{ {
//Special case for non existing spell
if (spellId==61988)
return HasAura(61987) || HasAura(25771);
for (int i = 0; i < 3 ; ++i) for (int i = 0; i < 3 ; ++i)
{ {
AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i)); AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i));
@@ -5783,6 +5791,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
triggered_spell_id = 31803; triggered_spell_id = 31803;
break; break;
} }
// Seal of Corruption
case 53736:
{
if(effIndex != 0) // effect 1,2 used by seal unleashing code
return false;
triggered_spell_id = 53742;
break;
}
// Spiritual Attunement // Spiritual Attunement
case 31785: case 31785:
case 33776: case 33776:
@@ -6930,7 +6947,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
// Bloodthirst (($m/100)% of max health) // Bloodthirst (($m/100)% of max health)
case 23880: case 23880:
{ {
basepoints0 = int32(GetMaxHealth() * triggerAmount / 10000); basepoints0 = int32(GetMaxHealth() * triggerAmount / 100);
break; break;
} }
// Shamanistic Rage triggered spell // Shamanistic Rage triggered spell
@@ -9848,6 +9865,8 @@ void Unit::setDeathState(DeathState s)
{ {
RemoveAllAurasOnDeath(); RemoveAllAurasOnDeath();
UnsummonAllTotems(); UnsummonAllTotems();
//This is needed to clear visible auras after unit dies
UpdateAuras();
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);
+1
View File
@@ -865,6 +865,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
uint32 GetSpellRadiusForTarget(Unit* target,const SpellRadiusEntry * radiusEntry); uint32 GetSpellRadiusForTarget(Unit* target,const SpellRadiusEntry * radiusEntry);
virtual void Update( uint32 time ); virtual void Update( uint32 time );
void UpdateAuras();
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; } void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK); void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);