*Merge with 491
--HG-- branch : trunk
This commit is contained in:
@@ -69,6 +69,7 @@ scripts/npc/npc_innkeeper.cpp \
|
||||
scripts/npc/npc_professions.cpp \
|
||||
scripts/npc/npcs_special.cpp \
|
||||
scripts/zone/alterac_mountains/alterac_mountains.cpp \
|
||||
scripts/zone/ashenvale_forest/ashenvale.cpp\
|
||||
scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp \
|
||||
scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp \
|
||||
scripts/zone/aunchindoun/mana_tombs/boss_pandemonius.cpp \
|
||||
@@ -280,12 +281,11 @@ scripts/zone/scarlet_monastery/boss_azshir_the_sleepless.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_bloodmage_thalnos.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_herod.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_high_inquisitor_whitemane.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_houndmaster_loksey.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_interrogator_vishas.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_scarlet_commander_mograine.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_scorn.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_headless_horseman.cpp \
|
||||
scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp \
|
||||
scripts/zone/scarlet_monastery/instance_scarlet_monastery.cpp \
|
||||
scripts/zone/scarlet_monastery/def_scarlet_monastery.h \
|
||||
scripts/zone/scholomance/boss_darkmaster_gandling.cpp \
|
||||
|
||||
@@ -110,6 +110,8 @@ extern void AddSC_alterac_mountains();
|
||||
|
||||
//Arathi Highlands
|
||||
//Ashenvale Forest
|
||||
extern void AddSC_ashenvale();
|
||||
|
||||
//Aunchindoun
|
||||
//--Auchenai Crypts
|
||||
extern void AddSC_boss_exarch_maladaar();
|
||||
@@ -414,12 +416,11 @@ extern void AddSC_boss_bloodmage_thalnos();
|
||||
extern void AddSC_boss_headless_horseman();
|
||||
extern void AddSC_boss_herod();
|
||||
extern void AddSC_boss_high_inquisitor_fairbanks();
|
||||
extern void AddSC_boss_high_inquisitor_whitemane();
|
||||
extern void AddSC_boss_houndmaster_loksey();
|
||||
extern void AddSC_boss_interrogator_vishas();
|
||||
extern void AddSC_boss_scarlet_commander_mograine();
|
||||
extern void AddSC_boss_scorn();
|
||||
extern void AddSC_instance_scarlet_monastery();
|
||||
extern void AddSC_boss_mograine_and_whitemane();
|
||||
|
||||
//Scholomance
|
||||
extern void AddSC_boss_darkmaster_gandling();
|
||||
@@ -1139,8 +1140,8 @@ void LoadDatabase()
|
||||
break;
|
||||
|
||||
case ACTION_T_SET_INST_DATA:
|
||||
if (temp.action[j].param2 > 3)
|
||||
error_db_log("TSCR: Event %u Action %u attempts to set instance data above encounter state 3. Custom case?", i, j+1);
|
||||
if (temp.action[j].param2 > SPECIAL)
|
||||
error_db_log("TSCR2: Event %u Action %u attempts to set instance data above encounter state 4. Custom case?", i, j+1);
|
||||
break;
|
||||
|
||||
case ACTION_T_YELL:
|
||||
@@ -1304,6 +1305,8 @@ void ScriptsInit()
|
||||
|
||||
//Arathi Highlands
|
||||
//Ashenvale Forest
|
||||
AddSC_ashenvale();
|
||||
|
||||
//Aunchindoun
|
||||
//--Auchenai Crypts
|
||||
AddSC_boss_exarch_maladaar();
|
||||
@@ -1608,12 +1611,11 @@ void ScriptsInit()
|
||||
AddSC_boss_headless_horseman();
|
||||
AddSC_boss_herod();
|
||||
AddSC_boss_high_inquisitor_fairbanks();
|
||||
AddSC_boss_high_inquisitor_whitemane();
|
||||
AddSC_boss_houndmaster_loksey();
|
||||
AddSC_boss_interrogator_vishas();
|
||||
AddSC_boss_scarlet_commander_mograine();
|
||||
AddSC_boss_scorn();
|
||||
AddSC_instance_scarlet_monastery();
|
||||
AddSC_boss_mograine_and_whitemane();
|
||||
|
||||
//Scholomance
|
||||
AddSC_boss_darkmaster_gandling();
|
||||
|
||||
@@ -1,116 +1,183 @@
|
||||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Version="9,00"
|
||||
Name="TrinityScript"
|
||||
ProjectGUID="{4295C8A9-79B7-4354-8064-F05FB9CA0C96}"
|
||||
RootNamespace="ScriptDev2"
|
||||
Keyword="Win32Proj">
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
MinimalRebuild="TRUE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="3"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="trinitycore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC71\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC71\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="TRUE"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="1"/>
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
RuntimeLibrary="2"
|
||||
EnableEnhancedInstructionSet="1"
|
||||
UsePrecompiledHeader="3"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="trinitycore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC71\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC71\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="FALSE"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="1"/>
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
@@ -269,6 +336,10 @@
|
||||
<Filter
|
||||
Name="Ashenvale Forest"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\ashenvale_forest\ashenvale.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Azshara"
|
||||
@@ -312,7 +383,7 @@
|
||||
<File
|
||||
RelativePath="..\scripts\zone\deadmines\def_deadmines.h"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Deadwind Pass"
|
||||
@@ -525,10 +596,6 @@
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_fairbanks.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp"
|
||||
>
|
||||
@@ -538,7 +605,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_scarlet_commander_mograine.cpp"
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_mograine_and_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@@ -1153,18 +1220,18 @@
|
||||
<Filter
|
||||
Name="Uldaman"
|
||||
>
|
||||
<File
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\uldaman.cpp"
|
||||
>
|
||||
@@ -1555,7 +1622,7 @@
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_eye\boss_alar.cpp"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_eye\boss_astromancer.cpp"
|
||||
>
|
||||
@@ -1601,11 +1668,11 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
@@ -1700,10 +1767,6 @@
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_hydross_the_unstable.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lady_vashj.cpp"
|
||||
>
|
||||
@@ -1712,6 +1775,10 @@
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_leotheras_the_blind.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_morogrim_tidewalker.cpp"
|
||||
>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Version="9,00"
|
||||
Name="TrinityScript"
|
||||
ProjectGUID="{4295C8A9-79B7-4354-8064-F05FB9CA0C96}"
|
||||
RootNamespace="ScriptDev2"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
@@ -74,6 +75,8 @@
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
@@ -96,7 +99,88 @@
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
RuntimeLibrary="2"
|
||||
EnableEnhancedInstructionSet="1"
|
||||
FloatingPointModel="2"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="TrinityCore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC80\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC80\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
@@ -187,91 +271,6 @@
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/MP"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
RuntimeLibrary="2"
|
||||
EnableEnhancedInstructionSet="1"
|
||||
FloatingPointModel="2"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="TrinityCore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC80\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC80\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
@@ -514,6 +513,10 @@
|
||||
<Filter
|
||||
Name="Ashenvale Forest"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\ashenvale_forest\ashenvale.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Azshara"
|
||||
@@ -557,7 +560,7 @@
|
||||
<File
|
||||
RelativePath="..\scripts\zone\deadmines\def_deadmines.h"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Deadwind Pass"
|
||||
@@ -770,10 +773,6 @@
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_fairbanks.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp"
|
||||
>
|
||||
@@ -783,7 +782,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_scarlet_commander_mograine.cpp"
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_mograine_and_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@@ -1398,18 +1397,18 @@
|
||||
<Filter
|
||||
Name="Uldaman"
|
||||
>
|
||||
<File
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\uldaman.cpp"
|
||||
>
|
||||
@@ -1846,11 +1845,11 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
@@ -1945,10 +1944,6 @@
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_hydross_the_unstable.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lady_vashj.cpp"
|
||||
>
|
||||
@@ -1957,6 +1952,10 @@
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_leotheras_the_blind.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_morogrim_tidewalker.cpp"
|
||||
>
|
||||
@@ -2340,7 +2339,7 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|x64"
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
@@ -2348,7 +2347,7 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
Name="Debug|x64"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
|
||||
@@ -98,86 +98,8 @@
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="trinitycore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC90\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC90\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
@@ -261,6 +183,90 @@
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)"
|
||||
IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine=""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="precompiled.h"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="trinitycore.lib zthread.lib"
|
||||
OutputFile="$(OutDir)/TrinityScript.dll"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\..\..\win\VC90\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC90\trinitycore__$(PlatformName)_$(ConfigurationName)"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb"
|
||||
SubSystem="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(OutDir)/TrinityScript.lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
@@ -500,6 +506,10 @@
|
||||
<Filter
|
||||
Name="Ashenvale Forest"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\ashenvale_forest\ashenvale.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Azshara"
|
||||
@@ -756,10 +766,6 @@
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_fairbanks.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp"
|
||||
>
|
||||
@@ -769,7 +775,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_scarlet_commander_mograine.cpp"
|
||||
RelativePath="..\scripts\zone\scarlet_monastery\boss_mograine_and_whitemane.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@@ -1384,18 +1390,18 @@
|
||||
<Filter
|
||||
Name="Uldaman"
|
||||
>
|
||||
<File
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\uldaman\uldaman.cpp"
|
||||
>
|
||||
@@ -1786,7 +1792,7 @@
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_eye\boss_alar.cpp"
|
||||
>
|
||||
</File>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_eye\boss_astromancer.cpp"
|
||||
>
|
||||
@@ -1832,11 +1838,11 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h"
|
||||
RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
@@ -1932,10 +1938,6 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lady_vashj.cpp"
|
||||
>
|
||||
</File>
|
||||
@@ -1943,6 +1945,10 @@
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_leotheras_the_blind.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_lurker_below.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\scripts\zone\coilfang_resevoir\serpent_shrine\boss_morogrim_tidewalker.cpp"
|
||||
>
|
||||
@@ -2326,7 +2332,7 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|x64"
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
@@ -2334,7 +2340,7 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
Name="Debug|x64"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
|
||||
@@ -13,7 +13,8 @@ enum EncounterState
|
||||
NOT_STARTED = 0,
|
||||
IN_PROGRESS = 1,
|
||||
FAIL = 2,
|
||||
DONE = 3
|
||||
DONE = 3,
|
||||
SPECIAL = 4
|
||||
};
|
||||
|
||||
#define OUT_SAVE_INST_DATA debug_log("SD2: Saving Instance Data for Instance %s (Map %d, Instance Id %d)", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
|
||||
@@ -30,8 +31,8 @@ class TRINITY_DLL_DECL ScriptedInstance : public InstanceData
|
||||
~ScriptedInstance() {}
|
||||
|
||||
//All-purpose data storage 64 bit
|
||||
virtual uint64 GetData64(uint32) {return 0; }
|
||||
virtual void SetData64(uint32, uint64) { }
|
||||
virtual uint64 GetData64(uint32 Data) { return 0; }
|
||||
virtual void SetData64(uint32 Data, uint64 Value) { }
|
||||
|
||||
// Called every instance update
|
||||
virtual void Update(uint32) {}
|
||||
|
||||
@@ -36,18 +36,31 @@ void guardAI::Reset()
|
||||
|
||||
void guardAI::Aggro(Unit *who)
|
||||
{
|
||||
if (m_creature->GetEntry() == 15184)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoSay("Taste blade, mongrel!", LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoSay("Please tell me that you didn't just do what I think you just did. Please tell me that I'm not going to have to hurt you...", LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 2:
|
||||
DoSay("As if we don't have enough problems, you go and create more!", LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (SpellEntry const *spell = m_creature->reachWithSpellAttack(who))
|
||||
DoCastSpell(who, spell);
|
||||
}
|
||||
|
||||
void guardAI::JustDied(Unit *Killer)
|
||||
{
|
||||
//Send Zone Under Attack message to the LocalDefense and WorldDefense Channels
|
||||
if( Killer->GetTypeId() == TYPEID_PLAYER )
|
||||
m_creature->SendZoneUnderAttackMessage((Player*)Killer);
|
||||
else if( Unit *owner = Killer->GetOwner() )
|
||||
{
|
||||
if( owner->GetTypeId() == TYPEID_PLAYER )
|
||||
m_creature->SendZoneUnderAttackMessage((Player*)owner);
|
||||
}
|
||||
if (Player* pKiller = Killer->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
m_creature->SendZoneUnderAttackMessage(pKiller);
|
||||
}
|
||||
|
||||
void guardAI::UpdateAI(const uint32 diff)
|
||||
|
||||
@@ -491,58 +491,14 @@ CreatureAI* GetAI_guard_bluffwatcher(Creature *_Creature)
|
||||
* guard_contested start
|
||||
*******************************************************/
|
||||
|
||||
struct TRINITY_DLL_DECL guard_contested : public guardAI
|
||||
CreatureAI* GetAI_guard_contested(Creature *_Creature)
|
||||
{
|
||||
guard_contested(Creature *c) : guardAI(c) {}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if ( who->isAttackingPlayer() )
|
||||
{
|
||||
if(who->GetTypeId() == TYPEID_PLAYER || who->GetOwnerGUID() && GUID_HIPART(who->GetOwnerGUID())==HIGHGUID_PLAYER)
|
||||
{
|
||||
m_creature->AddThreat(who, 0.0f);
|
||||
if(Unit* owner = who->GetOwner())
|
||||
m_creature->AddThreat(owner, 0.0f);
|
||||
|
||||
if(!m_creature->isInCombat())
|
||||
{
|
||||
if (m_creature->GetEntry() == 15184) //Cenarion Hold Infantry
|
||||
{
|
||||
srand (time(NULL));
|
||||
if (rand()%100 <= 30)
|
||||
{
|
||||
DoSay("Taste blade, mongrel!", LANG_UNIVERSAL,NULL);
|
||||
}
|
||||
else if (rand()%100 > 30 && rand()%100 < 50)
|
||||
{
|
||||
DoSay("Please tell me that you didn`t just do what I think you just did. Please tell me that I`m not going to have to hurt you...", LANG_UNIVERSAL,NULL);
|
||||
}
|
||||
else if (rand()%100 >= 50)
|
||||
{
|
||||
DoSay("As if we don`t have enough problems, you go and create more!", LANG_UNIVERSAL,NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SpellEntry const *spell = m_creature->reachWithSpellAttack(who);
|
||||
DoCastSpell(who, spell);
|
||||
}
|
||||
}
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return new guardAI (_Creature);
|
||||
}
|
||||
/*******************************************************
|
||||
* guard_contested end
|
||||
*******************************************************/
|
||||
|
||||
CreatureAI* GetAI_guard_contested(Creature *_Creature)
|
||||
{
|
||||
return new guard_contested (_Creature);
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
* guard_darnassus start
|
||||
*******************************************************/
|
||||
|
||||
@@ -31,27 +31,30 @@ void npc_escortAI::AttackStart(Unit *who)
|
||||
if (IsBeingEscorted && !Defend)
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack())
|
||||
{
|
||||
//Begin attack
|
||||
|
||||
if ( m_creature->Attack(who, true) )
|
||||
{
|
||||
m_creature->GetMotionMaster()->MovementExpired();
|
||||
m_creature->GetMotionMaster()->MoveChase(who);
|
||||
m_creature->AddThreat(who, 0.0f);
|
||||
}
|
||||
m_creature->SetInCombatWith(who);
|
||||
who->SetInCombatWith(m_creature);
|
||||
|
||||
if (!InCombat)
|
||||
{
|
||||
InCombat = true;
|
||||
|
||||
if (IsBeingEscorted)
|
||||
{
|
||||
//Store last position
|
||||
m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z);
|
||||
|
||||
debug_log("SD2: EscortAI has entered combat via Attack and stored last location");
|
||||
debug_log("SD2: EscortAI has entered combat and stored last location.");
|
||||
}
|
||||
|
||||
Aggro(who);
|
||||
}
|
||||
|
||||
m_creature->GetMotionMaster()->MovementExpired();
|
||||
m_creature->GetMotionMaster()->MoveChase(who);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,24 +66,7 @@ void npc_escortAI::MoveInLineOfSight(Unit *who)
|
||||
if(m_creature->getVictim() || !m_creature->canStartAttack(who))
|
||||
return;
|
||||
|
||||
//Begin attack
|
||||
if ( m_creature->Attack(who, true) )
|
||||
{
|
||||
m_creature->GetMotionMaster()->MovementExpired();
|
||||
m_creature->GetMotionMaster()->MoveChase(who);
|
||||
m_creature->AddThreat(who, 0.0f);
|
||||
}
|
||||
|
||||
if (!InCombat)
|
||||
{
|
||||
InCombat = true;
|
||||
|
||||
//Store last position
|
||||
m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z);
|
||||
debug_log("SD2: EscortAI has entered combat via LOS and stored last location");
|
||||
|
||||
Aggro(who);
|
||||
}
|
||||
AttackStart(who);
|
||||
}
|
||||
|
||||
void npc_escortAI::JustRespawned()
|
||||
@@ -106,7 +92,7 @@ void npc_escortAI::EnterEvadeMode()
|
||||
|
||||
if (IsBeingEscorted)
|
||||
{
|
||||
debug_log("SD2: EscortAI has left combat and is now returning to last point");
|
||||
debug_log("SD2: EscortAI has left combat and is now returning to last point.");
|
||||
Returning = true;
|
||||
m_creature->GetMotionMaster()->MovementExpired();
|
||||
m_creature->GetMotionMaster()->MovePoint(WP_LAST_POINT, LastPos.x, LastPos.y, LastPos.z);
|
||||
@@ -124,6 +110,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Waypoint Updating
|
||||
if (IsBeingEscorted && !InCombat && WaitTimer && !Returning)
|
||||
{
|
||||
if (WaitTimer <= diff)
|
||||
{
|
||||
if (ReconnectWP)
|
||||
@@ -137,7 +124,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
if( !IsOnHold )
|
||||
{
|
||||
m_creature->GetMotionMaster()->MovePoint(CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z );
|
||||
debug_log("SD2: EscortAI Reconnect WP is: %d, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z);
|
||||
debug_log("SD2: EscortAI Reconnect WP is: %u, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z);
|
||||
WaitTimer = 0;
|
||||
ReconnectWP = false;
|
||||
return;
|
||||
@@ -167,13 +154,15 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
if( !IsOnHold )
|
||||
{
|
||||
m_creature->GetMotionMaster()->MovePoint(CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z );
|
||||
debug_log("SD2: EscortAI Next WP is: %d, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z);
|
||||
debug_log("SD2: EscortAI Next WP is: %u, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z);
|
||||
WaitTimer = 0;
|
||||
}
|
||||
}else WaitTimer -= diff;
|
||||
}
|
||||
|
||||
//Check if player is within range
|
||||
if (IsBeingEscorted && !InCombat && PlayerGUID)
|
||||
{
|
||||
if (PlayerTimer < diff)
|
||||
{
|
||||
Unit* p = Unit::GetUnit(*m_creature, PlayerGUID);
|
||||
@@ -198,6 +187,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
|
||||
PlayerTimer = 1000;
|
||||
}else PlayerTimer -= diff;
|
||||
}
|
||||
|
||||
//Check if we have a current target
|
||||
if( m_creature->isAlive() && m_creature->SelectHostilTarget() && m_creature->getVictim())
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Ashenvale
|
||||
SD%Complete: 70
|
||||
SDComment: Quest support: 6544
|
||||
SDCategory: Ashenvale Forest
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
npc_torek
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
|
||||
/*####
|
||||
# npc_torek
|
||||
####*/
|
||||
|
||||
#define SAY_READY -1000106
|
||||
#define SAY_MOVE -1000107
|
||||
#define SAY_PREPARE -1000108
|
||||
#define SAY_WIN -1000109
|
||||
#define SAY_END -1000110
|
||||
|
||||
#define SPELL_REND 11977
|
||||
#define SPELL_THUNDERCLAP 8078
|
||||
|
||||
#define QUEST_TOREK_ASSULT 6544
|
||||
|
||||
#define ENTRY_SPLINTERTREE_RAIDER 12859
|
||||
#define ENTRY_DURIEL 12860
|
||||
#define ENTRY_SILVERWING_SENTINEL 12896
|
||||
#define ENTRY_SILVERWING_WARRIOR 12897
|
||||
|
||||
struct TRINITY_DLL_DECL npc_torekAI : public npc_escortAI
|
||||
{
|
||||
npc_torekAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
uint32 Rend_Timer;
|
||||
uint32 Thunderclap_Timer;
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
DoScriptText(SAY_MOVE, m_creature, player);
|
||||
break;
|
||||
case 8:
|
||||
DoScriptText(SAY_PREPARE, m_creature, player);
|
||||
break;
|
||||
case 19:
|
||||
//TODO: verify location and creatures amount.
|
||||
m_creature->SummonCreature(ENTRY_DURIEL,1776.73,-2049.06,109.83,1.54,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,25000);
|
||||
m_creature->SummonCreature(ENTRY_SILVERWING_SENTINEL,1774.64,-2049.41,109.83,1.40,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,25000);
|
||||
m_creature->SummonCreature(ENTRY_SILVERWING_WARRIOR,1778.73,-2049.50,109.83,1.67,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,25000);
|
||||
break;
|
||||
case 20:
|
||||
DoScriptText(SAY_WIN, m_creature, player);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_TOREK_ASSULT,m_creature);
|
||||
break;
|
||||
case 21:
|
||||
DoScriptText(SAY_END, m_creature, player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Rend_Timer = 5000;
|
||||
Thunderclap_Timer = 8000;
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
if (Unit* player = Unit::GetUnit((*m_creature), PlayerGUID))
|
||||
((Player*)player)->FailQuest(QUEST_TOREK_ASSULT);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if (Rend_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_REND);
|
||||
Rend_Timer = 20000;
|
||||
}else Rend_Timer -= diff;
|
||||
|
||||
if (Thunderclap_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_THUNDERCLAP);
|
||||
Thunderclap_Timer = 30000;
|
||||
}else Thunderclap_Timer -= diff;
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_torek(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_TOREK_ASSULT)
|
||||
{
|
||||
//TODO: find companions, make them follow Torek, at any time (possibly done by mangos/database in future?)
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, true, player->GetGUID());
|
||||
DoScriptText(SAY_READY, creature, player);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_torek(Creature *_Creature)
|
||||
{
|
||||
npc_torekAI* thisAI = new npc_torekAI(_Creature);
|
||||
|
||||
thisAI->AddWaypoint(0, 1782.63, -2241.11, 109.73, 5000);
|
||||
thisAI->AddWaypoint(1, 1788.88, -2240.17, 111.71);
|
||||
thisAI->AddWaypoint(2, 1797.49, -2238.11, 112.31);
|
||||
thisAI->AddWaypoint(3, 1803.83, -2232.77, 111.22);
|
||||
thisAI->AddWaypoint(4, 1806.65, -2217.83, 107.36);
|
||||
thisAI->AddWaypoint(5, 1811.81, -2208.01, 107.45);
|
||||
thisAI->AddWaypoint(6, 1820.85, -2190.82, 100.49);
|
||||
thisAI->AddWaypoint(7, 1829.60, -2177.49, 96.44);
|
||||
thisAI->AddWaypoint(8, 1837.98, -2164.19, 96.71); //prepare
|
||||
thisAI->AddWaypoint(9, 1839.99, -2149.29, 96.78);
|
||||
thisAI->AddWaypoint(10, 1835.14, -2134.98, 96.80);
|
||||
thisAI->AddWaypoint(11, 1823.57, -2118.27, 97.43);
|
||||
thisAI->AddWaypoint(12, 1814.99, -2110.35, 98.38);
|
||||
thisAI->AddWaypoint(13, 1806.60, -2103.09, 99.19);
|
||||
thisAI->AddWaypoint(14, 1798.27, -2095.77, 100.04);
|
||||
thisAI->AddWaypoint(15, 1783.59, -2079.92, 100.81);
|
||||
thisAI->AddWaypoint(16, 1776.79, -2069.48, 101.77);
|
||||
thisAI->AddWaypoint(17, 1776.82, -2054.59, 109.82);
|
||||
thisAI->AddWaypoint(18, 1776.88, -2047.56, 109.83);
|
||||
thisAI->AddWaypoint(19, 1776.86, -2036.55, 109.83);
|
||||
thisAI->AddWaypoint(20, 1776.90, -2024.56, 109.83); //win
|
||||
thisAI->AddWaypoint(21, 1776.87, -2028.31, 109.83,60000);//stay
|
||||
thisAI->AddWaypoint(22, 1776.90, -2028.30, 109.83);
|
||||
|
||||
return (CreatureAI*)thisAI;
|
||||
}
|
||||
|
||||
void AddSC_ashenvale()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_torek";
|
||||
newscript->GetAI = &GetAI_npc_torek;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_torek;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
+2
-4
@@ -32,10 +32,8 @@ EndScriptData */
|
||||
|
||||
#define SAY_SLAY_1 -1556011
|
||||
#define SAY_SLAY_2 -1556012
|
||||
|
||||
#define SAY_DEATH -15560013
|
||||
|
||||
#define EMOTE_ARCANE_EXP -15560014
|
||||
#define SAY_DEATH -1556013
|
||||
#define EMOTE_ARCANE_EXP -1556015
|
||||
|
||||
#define SPELL_BLINK 38194
|
||||
#define SPELL_BLINK_TELEPORT 38203
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
|
||||
{
|
||||
instance_sethekk_halls(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_sethekk_halls(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
GameObject *IkissDoor;
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
|
||||
{
|
||||
instance_shadow_labyrinth(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_shadow_labyrinth(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
|
||||
@@ -23,11 +23,13 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_TELEPORT -1000100
|
||||
|
||||
#define SPELL_MARKOFFROST 23182
|
||||
#define SPELL_MANASTORM 21097
|
||||
#define SPELL_CHILL 21098
|
||||
#define SPELL_FROSTBREATH 21099
|
||||
#define SPELL_REFLECT 22067 //Old one was 30969
|
||||
#define SPELL_REFLECT 22067
|
||||
#define SPELL_CLEAVE 8255 //Perhaps not right ID
|
||||
#define SPELL_ENRAGE 23537
|
||||
|
||||
@@ -68,6 +70,7 @@ struct TRINITY_DLL_DECL boss_azuregosAI : public ScriptedAI
|
||||
|
||||
if(Teleport_Timer < diff)
|
||||
{
|
||||
DoScriptText(SAY_TELEPORT, m_creature);
|
||||
std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
|
||||
std::list<HostilReference*>::iterator i = m_threatlist.begin();
|
||||
for (i = m_threatlist.begin(); i!= m_threatlist.end();++i)
|
||||
@@ -107,9 +110,7 @@ struct TRINITY_DLL_DECL boss_azuregosAI : public ScriptedAI
|
||||
//ManaStorm_Timer
|
||||
if (ManaStorm_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_MANASTORM);
|
||||
ManaStorm_Timer = 7500 + rand()%5000;
|
||||
}else ManaStorm_Timer -= diff;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Azuremyst_Isle
|
||||
SD%Complete: 75
|
||||
SDComment: Quest support: 9283, 9537, 9554(special flight path, proper model for mount missing). Injured Draenei cosmetic only
|
||||
SDComment: Quest support: 9283, 9537, 9582, 9554(special flight path, proper model for mount missing). Injured Draenei cosmetic only
|
||||
SDCategory: Azuremyst Isle
|
||||
EndScriptData */
|
||||
|
||||
@@ -25,10 +25,12 @@ EndScriptData */
|
||||
npc_draenei_survivor
|
||||
npc_engineer_spark_overgrind
|
||||
npc_injured_draenei
|
||||
npc_magwin
|
||||
npc_susurrus
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
#include <cmath>
|
||||
|
||||
/*######
|
||||
@@ -305,6 +307,127 @@ CreatureAI* GetAI_npc_injured_draenei(Creature *_Creature)
|
||||
return new npc_injured_draeneiAI (_Creature);
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_magwin
|
||||
######*/
|
||||
|
||||
#define SAY_START -1000111
|
||||
#define SAY_AGGRO -1000112
|
||||
#define SAY_PROGRESS -1000113
|
||||
#define SAY_END1 -1000114
|
||||
#define SAY_END2 -1000115
|
||||
#define EMOTE_HUG -1000116
|
||||
|
||||
#define QUEST_A_CRY_FOR_HELP 9528
|
||||
|
||||
struct TRINITY_DLL_DECL npc_magwinAI : public npc_escortAI
|
||||
{
|
||||
npc_magwinAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch(i)
|
||||
{
|
||||
case 0:
|
||||
DoScriptText(SAY_START, m_creature, player);
|
||||
break;
|
||||
case 17:
|
||||
DoScriptText(SAY_PROGRESS, m_creature, player);
|
||||
break;
|
||||
case 28:
|
||||
DoScriptText(SAY_END1, m_creature, player);
|
||||
break;
|
||||
case 29:
|
||||
DoScriptText(EMOTE_HUG, m_creature, player);
|
||||
DoScriptText(SAY_END2, m_creature, player);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_A_CRY_FOR_HELP,m_creature);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature, who);
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (!IsBeingEscorted)
|
||||
m_creature->setFaction(80);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player)
|
||||
((Player*)player)->FailQuest(QUEST_A_CRY_FOR_HELP);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_magwin(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_A_CRY_FOR_HELP)
|
||||
{
|
||||
creature->setFaction(10);
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_magwinAI(Creature *_Creature)
|
||||
{
|
||||
npc_magwinAI* magwinAI = new npc_magwinAI(_Creature);
|
||||
|
||||
magwinAI->AddWaypoint(0, -4784.532227, -11051.060547, 3.484263);
|
||||
magwinAI->AddWaypoint(1, -4805.509277, -11037.293945, 3.043942);
|
||||
magwinAI->AddWaypoint(2, -4827.826172, -11034.398438, 1.741959);
|
||||
magwinAI->AddWaypoint(3, -4852.630859, -11033.695313, 2.208656);
|
||||
magwinAI->AddWaypoint(4, -4876.791992, -11034.517578, 3.175228);
|
||||
magwinAI->AddWaypoint(5, -4895.486816, -11038.306641, 9.390890);
|
||||
magwinAI->AddWaypoint(6, -4915.464844, -11048.402344, 12.369793);
|
||||
magwinAI->AddWaypoint(7, -4937.288086, -11067.041992, 13.857983);
|
||||
magwinAI->AddWaypoint(8, -4966.577637, -11067.507813, 15.754786);
|
||||
magwinAI->AddWaypoint(9, -4993.799805, -11056.544922, 19.175295);
|
||||
magwinAI->AddWaypoint(10, -5017.836426, -11052.569336, 22.476587);
|
||||
magwinAI->AddWaypoint(11, -5039.706543, -11058.459961, 25.831593);
|
||||
magwinAI->AddWaypoint(12, -5057.289063, -11045.474609, 26.972496);
|
||||
magwinAI->AddWaypoint(13, -5078.828125, -11037.601563, 29.053417);
|
||||
magwinAI->AddWaypoint(14, -5104.158691, -11039.195313, 29.440195);
|
||||
magwinAI->AddWaypoint(15, -5120.780273, -11039.518555, 30.142139);
|
||||
magwinAI->AddWaypoint(16, -5140.833008, -11039.810547, 28.788074);
|
||||
magwinAI->AddWaypoint(17, -5161.201660, -11040.050781, 27.879545, 4000);
|
||||
magwinAI->AddWaypoint(18, -5171.842285, -11046.803711, 27.183821);
|
||||
magwinAI->AddWaypoint(19, -5185.995117, -11056.359375, 20.234867);
|
||||
magwinAI->AddWaypoint(20, -5198.485840, -11065.065430, 18.872593);
|
||||
magwinAI->AddWaypoint(21, -5214.062500, -11074.653320, 19.215731);
|
||||
magwinAI->AddWaypoint(22, -5220.157227, -11088.377930, 19.818476);
|
||||
magwinAI->AddWaypoint(23, -5233.652832, -11098.846680, 18.349432);
|
||||
magwinAI->AddWaypoint(24, -5250.163086, -11111.653320, 16.438959);
|
||||
magwinAI->AddWaypoint(25, -5268.194336, -11125.639648, 12.668313);
|
||||
magwinAI->AddWaypoint(26, -5286.270508, -11130.669922, 6.912246);
|
||||
magwinAI->AddWaypoint(27, -5317.449707, -11137.392578, 4.963446);
|
||||
magwinAI->AddWaypoint(28, -5334.854492, -11154.384766, 6.742664);
|
||||
magwinAI->AddWaypoint(29, -5353.874512, -11171.595703, 6.903912, 20000);
|
||||
magwinAI->AddWaypoint(30, -5354.240000, -11171.940000, 6.890000);
|
||||
|
||||
return (CreatureAI*)magwinAI;
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_susurrus
|
||||
######*/
|
||||
@@ -364,6 +487,12 @@ void AddSC_azuremyst_isle()
|
||||
newscript->GetAI = GetAI_npc_injured_draenei;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_magwin";
|
||||
newscript->GetAI = &GetAI_npc_magwinAI;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_magwin;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="npc_susurrus";
|
||||
newscript->pGossipHello = &GossipHello_npc_susurrus;
|
||||
|
||||
@@ -24,6 +24,16 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
//Speech'n'Sound
|
||||
#define SAY_AGGRO -1564029
|
||||
#define SAY_SLAY1 -1564030
|
||||
#define SAY_SLAY2 -1564031
|
||||
#define SAY_SPECIAL1 -1564032
|
||||
#define SAY_SPECIAL2 -1564033
|
||||
#define SAY_ENRAGE1 -1564034
|
||||
#define SAY_ENRAGE2 -1564035
|
||||
#define SAY_DEATH -1564036
|
||||
|
||||
//Spells
|
||||
#define SPELL_ACID_GEYSER 40630
|
||||
#define SPELL_ACIDIC_WOUND 40481
|
||||
@@ -41,27 +51,6 @@ EndScriptData */
|
||||
#define SPELL_INSIGNIFIGANCE 40618
|
||||
#define SPELL_BERSERK 45078
|
||||
|
||||
//Speech'n'Sound
|
||||
#define SAY_AGGRO "Horde will crush you!"
|
||||
#define SOUND_AGGRO 11432
|
||||
|
||||
#define SAY_SLAY1 "Time to feast!"
|
||||
#define SOUND_SLAY1 11433
|
||||
|
||||
#define SAY_SLAY2 "More! I want more!"
|
||||
#define SOUND_SLAY2 11434
|
||||
|
||||
#define SAY_SPECIAL1 "Drink your blood! Eat your flesh!"
|
||||
#define SOUND_SPECIAL1 11435
|
||||
|
||||
#define SAY_SPECIAL2 "I hunger!"
|
||||
#define SOUND_SPECIAL2 11436
|
||||
|
||||
#define SAY_ENRAGE "I'll rip the meat from your bones!"
|
||||
#define SOUND_ENRAGE 11437
|
||||
|
||||
#define SOUND_DEATH 11439
|
||||
|
||||
//This is used to sort the players by distance in preparation for the Bloodboil cast.
|
||||
struct TargetDistanceOrder : public std::binary_function<const Unit, const Unit, bool>
|
||||
{
|
||||
@@ -127,8 +116,7 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoZoneInCombat();
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_GURTOGGBLOODBOILEVENT, IN_PROGRESS);
|
||||
}
|
||||
@@ -137,14 +125,8 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +135,7 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_GURTOGGBLOODBOILEVENT, DONE);
|
||||
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
// Note: This seems like a very complicated fix. The fix needs to be handled by the core, as implementation of limited-target AoE spells are still not limited.
|
||||
@@ -162,7 +144,8 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
// Get the Threat List
|
||||
std::list<HostilReference *> m_threatlist = m_creature->getThreatManager().getThreatList();
|
||||
|
||||
if(!m_threatlist.size()) return; // He doesn't have anyone in his threatlist, useless to continue
|
||||
if(!m_threatlist.size()) // He doesn't have anyone in his threatlist, useless to continue
|
||||
return;
|
||||
|
||||
std::list<Unit *> targets;
|
||||
std::list<HostilReference *>::iterator itr = m_threatlist.begin();
|
||||
@@ -231,12 +214,17 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
}else FelAcidTimer -= diff;
|
||||
|
||||
if(!m_creature->HasAura(SPELL_BERSERK, 0))
|
||||
if(EnrageTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
DoYell(SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
}else EnrageTimer -= diff;
|
||||
{
|
||||
if(EnrageTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0: DoScriptText(SAY_ENRAGE1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_ENRAGE2, m_creature); break;
|
||||
}
|
||||
}else EnrageTimer -= diff;
|
||||
}
|
||||
|
||||
if(Phase1)
|
||||
{
|
||||
@@ -244,8 +232,8 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_BEWILDERING_STRIKE);
|
||||
float mt_threat = m_creature->getThreatManager().getThreat(m_creature->getVictim());
|
||||
Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO, 1);
|
||||
m_creature->AddThreat(target, mt_threat);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO, 1))
|
||||
m_creature->AddThreat(target, mt_threat);
|
||||
BewilderingStrikeTimer = 20000;
|
||||
}else BewilderingStrikeTimer -= diff;
|
||||
|
||||
@@ -317,14 +305,8 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SPECIAL1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPECIAL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPECIAL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPECIAL2, m_creature); break;
|
||||
}
|
||||
|
||||
AcidGeyserTimer = 1000;
|
||||
|
||||
@@ -24,6 +24,19 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
//Speech'n'Sounds
|
||||
#define SAY_TAUNT1 -1564018
|
||||
#define SAY_TAUNT2 -1564019
|
||||
#define SAY_TAUNT3 -1564020
|
||||
#define SAY_AGGRO -1564021
|
||||
#define SAY_SPELL1 -1564022
|
||||
#define SAY_SPELL2 -1564023
|
||||
#define SAY_SPELL3 -1564024
|
||||
#define SAY_SLAY1 -1564025
|
||||
#define SAY_SLAY2 -1564026
|
||||
#define SAY_ENRAGE -1564027
|
||||
#define SAY_DEATH -1564028
|
||||
|
||||
//Spells
|
||||
#define SPELL_BEAM_SINISTER 40859
|
||||
#define SPELL_BEAM_VILE 40860
|
||||
@@ -47,40 +60,6 @@ uint32 PrismaticAuras[]=
|
||||
40897, // Holy
|
||||
};
|
||||
|
||||
//Speech'n'Sounds
|
||||
#define SAY_TAUNT1 "You play, you pay."
|
||||
#define SOUND_TAUNT1 11501
|
||||
|
||||
#define SAY_TAUNT2 "I'm not impressed."
|
||||
#define SOUND_TAUNT2 11502
|
||||
|
||||
#define SAY_TAUNT3 "Enjoying yourselves?"
|
||||
#define SOUND_TAUNT3 11503
|
||||
|
||||
#define SAY_AGGRO "So, business... Or pleasure?"
|
||||
#define SOUND_AGGRO 11504
|
||||
|
||||
#define SAY_SPELL1 "You seem a little tense."
|
||||
#define SOUND_SPELL1 11505
|
||||
|
||||
#define SAY_SPELL2 "Don't be shy."
|
||||
#define SOUND_SPELL2 11506
|
||||
|
||||
#define SAY_SPELL3 "I'm all... yours."
|
||||
#define SOUND_SPELL3 11507
|
||||
|
||||
#define SAY_SLAY1 "Easy come, easy go."
|
||||
#define SOUND_SLAY1 11508
|
||||
|
||||
#define SAY_SLAY2 "So much for a happy ending."
|
||||
#define SOUND_SLAY2 11509
|
||||
|
||||
#define SAY_ENRAGE "Stop toying with my emotions!"
|
||||
#define SOUND_ENRAGE 11510
|
||||
|
||||
#define SAY_DEATH "I wasn't... finished."
|
||||
#define SOUND_DEATH 11511
|
||||
|
||||
struct Locations
|
||||
{
|
||||
float x,y,z;
|
||||
@@ -151,22 +130,15 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
pInstance->SetData(DATA_MOTHERSHAHRAZEVENT, IN_PROGRESS);
|
||||
|
||||
DoZoneInCombat();
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,8 +147,7 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_MOTHERSHAHRAZEVENT, DONE);
|
||||
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void TeleportPlayers()
|
||||
@@ -206,8 +177,7 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
{
|
||||
Enraged = true;
|
||||
DoCast(m_creature, SPELL_ENRAGE, true);
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}
|
||||
|
||||
//Randomly cast one beam.
|
||||
@@ -260,14 +230,8 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SPELL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPELL2);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPELL3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPELL3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPELL2, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPELL3, m_creature); break;
|
||||
}
|
||||
FatalAttractionExplodeTimer = 2000;
|
||||
FatalAttractionTimer = 40000 + rand()%31 * 1000;
|
||||
@@ -317,8 +281,7 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
if(EnrageTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
DoYell(SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}else EnrageTimer -= diff;
|
||||
|
||||
//Random taunts
|
||||
@@ -326,18 +289,9 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_TAUNT1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TAUNT1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_TAUNT2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TAUNT2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_TAUNT3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TAUNT3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TAUNT1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TAUNT2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_TAUNT3, m_creature); break;
|
||||
}
|
||||
RandomYellTimer = 60000 + rand()%91 * 1000;
|
||||
}else RandomYellTimer -= diff;
|
||||
|
||||
@@ -27,51 +27,32 @@ EndScriptData */
|
||||
|
||||
//Sound'n'speech
|
||||
//Suffering
|
||||
#define SUFF_SAY_FREED "Pain and suffering are all that await you!"
|
||||
#define SUFF_SOUND_FREED 11415
|
||||
#define SUFF_SAY_AGGRO "Don't leave me alone!"
|
||||
#define SUFF_SOUND_AGGRO 11416
|
||||
#define SUFF_SAY_SLAY1 "Look at what you make me do!"
|
||||
#define SUFF_SOUND_SLAY1 11417
|
||||
#define SUFF_SAY_SLAY2 "I didn't ask for this!"
|
||||
#define SUFF_SOUND_SLAY2 11418
|
||||
#define SUFF_SAY_ENRAGE "The pain is only beginning!"
|
||||
#define SUFF_SOUND_ENRAGE 11419
|
||||
#define SUFF_SAY_RECAP "I don't want to go back!"
|
||||
#define SUFF_SOUND_RECAP 11420
|
||||
#define SUFF_SAY_AFTER "Now what do I do?"
|
||||
#define SUFF_SOUND_AFTER 11421
|
||||
#define SUFF_SAY_FREED -1564047
|
||||
#define SUFF_SAY_AGGRO -1564048
|
||||
#define SUFF_SAY_SLAY1 -1564049
|
||||
#define SUFF_SAY_SLAY2 -1564050
|
||||
#define SUFF_SAY_SLAY3 -1564051
|
||||
#define SUFF_SAY_RECAP -1564052
|
||||
#define SUFF_SAY_AFTER -1564053
|
||||
#define SUFF_EMOTE_ENRAGE -1564054
|
||||
|
||||
//Desire
|
||||
#define DESI_SAY_FREED "You can have anything you desire... for a price."
|
||||
#define DESI_SOUND_FREED 11408
|
||||
#define DESI_SAY_SLAY1 "Fulfilment is at hand!"
|
||||
#define DESI_SOUND_SLAY1 11409
|
||||
#define DESI_SAY_SLAY2 "Yes... you'll stay with us now..."
|
||||
#define DESI_SOUND_SLAY2 11410
|
||||
#define DESI_SAY_SLAY3 "Your reach exceeds your grasp."
|
||||
#define DESI_SOUND_SLAY3 11412
|
||||
#define DESI_SAY_SPEC "Be careful what you wish for..."
|
||||
#define DESI_SOUND_SPEC 11411
|
||||
#define DESI_SAY_RECAP "I'll be waiting..."
|
||||
#define DESI_SOUND_RECAP 11413
|
||||
#define DESI_SAY_AFTER "I won't be far..."
|
||||
#define DESI_SOUND_AFTER 11414
|
||||
#define DESI_SAY_FREED -1564055
|
||||
#define DESI_SAY_SLAY1 -1564056
|
||||
#define DESI_SAY_SLAY2 -1564057
|
||||
#define DESI_SAY_SLAY3 -1564058
|
||||
#define DESI_SAY_SPEC -1564059
|
||||
#define DESI_SAY_RECAP -1564060
|
||||
#define DESI_SAY_AFTER -1564061
|
||||
|
||||
//Anger
|
||||
#define ANGER_SAY_FREED "Beware... I live."
|
||||
#define ANGER_SOUND_FREED 11399
|
||||
#define ANGER_SAY_SCREAM "So... foolish."
|
||||
#define ANGER_SOUND_SCREAM 11400
|
||||
#define ANGER_SOUND_SLAY1 11401
|
||||
#define ANGER_SAY_SLAY2 "Enough. No more."
|
||||
#define ANGER_SOUND_SLAY2 11402
|
||||
#define ANGER_SAY_SPEC "On your knees!"
|
||||
#define ANGER_SOUND_SPEC 11403
|
||||
#define ANGER_SAY_BEFORE "Beware, coward."
|
||||
#define ANGER_SOUND_BEFORE 11405
|
||||
#define ANGER_SAY_DEATH "I won't... be... ignored."
|
||||
#define ANGER_SOUND_DEATH 11404
|
||||
#define ANGER_SAY_FREED -1564062
|
||||
#define ANGER_SAY_FREED2 -1564063
|
||||
#define ANGER_SAY_SLAY1 -1564064
|
||||
#define ANGER_SAY_SLAY2 -1564065
|
||||
#define ANGER_SAY_SPEC -1564066
|
||||
#define ANGER_SAY_BEFORE -1564067
|
||||
#define ANGER_SAY_DEATH -1564068
|
||||
|
||||
//Spells
|
||||
#define AURA_OF_SUFFERING 41292
|
||||
@@ -289,13 +270,11 @@ struct TRINITY_DLL_DECL boss_reliquary_of_soulsAI : public ScriptedAI
|
||||
case 5:
|
||||
if(Phase == 1)
|
||||
{
|
||||
Essence->Yell(SUFF_SAY_AFTER,LANG_UNIVERSAL,0);
|
||||
DoPlaySoundToSet(Essence, SUFF_SOUND_AFTER);
|
||||
DoScriptText(SUFF_SAY_AFTER, Essence);
|
||||
}
|
||||
else
|
||||
{
|
||||
Essence->Yell(DESI_SAY_AFTER,LANG_UNIVERSAL,0);
|
||||
DoPlaySoundToSet(Essence, DESI_SOUND_AFTER);
|
||||
DoScriptText(DESI_SAY_AFTER, Essence);
|
||||
}
|
||||
Essence->SetVisibility(VISIBILITY_OFF);
|
||||
Essence->setDeathState(DEAD);
|
||||
@@ -370,16 +349,14 @@ struct TRINITY_DLL_DECL boss_essence_of_sufferingAI : public ScriptedAI
|
||||
{
|
||||
damage = 0;
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetReactState(REACT_PASSIVE);
|
||||
m_creature->Yell(SUFF_SAY_RECAP,LANG_UNIVERSAL,0);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_RECAP);
|
||||
DoScriptText(SUFF_SAY_RECAP, m_creature);
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
m_creature->Yell(SUFF_SAY_FREED, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_FREED);
|
||||
DoScriptText(SUFF_SAY_FREED, m_creature);
|
||||
DoZoneInCombat();
|
||||
m_creature->CastSpell(m_creature, AURA_OF_SUFFERING, true); // linked aura need core support
|
||||
m_creature->CastSpell(m_creature, ESSENCE_OF_SUFFERING_PASSIVE, true);
|
||||
@@ -390,14 +367,9 @@ struct TRINITY_DLL_DECL boss_essence_of_sufferingAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SUFF_SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SUFF_SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SUFF_SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SUFF_SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SUFF_SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -435,8 +407,7 @@ struct TRINITY_DLL_DECL boss_essence_of_sufferingAI : public ScriptedAI
|
||||
FixateTimer = 5000;
|
||||
if(!(rand()%16))
|
||||
{
|
||||
DoYell(SUFF_SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_AGGRO);
|
||||
DoScriptText(SUFF_SAY_AGGRO, m_creature);
|
||||
}
|
||||
}else FixateTimer -= diff;
|
||||
|
||||
@@ -444,8 +415,7 @@ struct TRINITY_DLL_DECL boss_essence_of_sufferingAI : public ScriptedAI
|
||||
{
|
||||
DoCast(m_creature, SPELL_ENRAGE);
|
||||
EnrageTimer = 60000;
|
||||
DoYell(SUFF_SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SUFF_SOUND_ENRAGE);
|
||||
DoScriptText(SUFF_EMOTE_ENRAGE, m_creature);
|
||||
}else EnrageTimer -= diff;
|
||||
|
||||
if(SoulDrainTimer < diff)
|
||||
@@ -483,9 +453,7 @@ struct TRINITY_DLL_DECL boss_essence_of_desireAI : public ScriptedAI
|
||||
{
|
||||
damage = 0;
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetReactState(REACT_PASSIVE);
|
||||
m_creature->Yell(DESI_SAY_RECAP,LANG_UNIVERSAL,0);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_RECAP);
|
||||
DoScriptText(SUFF_SAY_RECAP, m_creature);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -506,8 +474,7 @@ struct TRINITY_DLL_DECL boss_essence_of_desireAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
m_creature->Yell(DESI_SAY_FREED, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_FREED);
|
||||
DoScriptText(DESI_SAY_FREED, m_creature);
|
||||
DoZoneInCombat();
|
||||
DoCast(m_creature, AURA_OF_DESIRE, true);
|
||||
}
|
||||
@@ -516,18 +483,9 @@ struct TRINITY_DLL_DECL boss_essence_of_desireAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(DESI_SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(DESI_SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(DESI_SAY_SLAY3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(DESI_SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(DESI_SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(DESI_SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -558,8 +516,7 @@ struct TRINITY_DLL_DECL boss_essence_of_desireAI : public ScriptedAI
|
||||
DeadenTimer = 25000 + rand()%10000;
|
||||
if(!(rand()%2))
|
||||
{
|
||||
DoYell(DESI_SAY_SPEC,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, DESI_SOUND_SPEC);
|
||||
DoScriptText(DESI_SAY_SPEC, m_creature);
|
||||
}
|
||||
}else DeadenTimer -= diff;
|
||||
|
||||
@@ -596,29 +553,27 @@ struct TRINITY_DLL_DECL boss_essence_of_angerAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
m_creature->Yell(ANGER_SAY_FREED, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_FREED);
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0: DoScriptText(ANGER_SAY_FREED, m_creature); break;
|
||||
case 1: DoScriptText(ANGER_SAY_FREED2, m_creature); break;
|
||||
}
|
||||
|
||||
DoZoneInCombat();
|
||||
DoCast(m_creature, AURA_OF_ANGER, true);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(ANGER_SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,ANGER_SOUND_DEATH);
|
||||
DoScriptText(ANGER_SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(ANGER_SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(ANGER_SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(ANGER_SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -638,8 +593,7 @@ struct TRINITY_DLL_DECL boss_essence_of_angerAI : public ScriptedAI
|
||||
{
|
||||
if(m_creature->getVictim()->GetGUID() != AggroTargetGUID)
|
||||
{
|
||||
DoYell(ANGER_SAY_BEFORE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_BEFORE);
|
||||
DoScriptText(ANGER_SAY_BEFORE, m_creature);
|
||||
DoCast(m_creature, SPELL_SELF_SEETHE, true);
|
||||
AggroTargetGUID = m_creature->getVictim()->GetGUID();
|
||||
}
|
||||
@@ -652,8 +606,7 @@ struct TRINITY_DLL_DECL boss_essence_of_angerAI : public ScriptedAI
|
||||
SoulScreamTimer = 9000 + rand()%2000;
|
||||
if(!(rand()%3))
|
||||
{
|
||||
DoYell(ANGER_SAY_SCREAM,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_SCREAM);
|
||||
DoScriptText(ANGER_SAY_SPEC, m_creature);
|
||||
}
|
||||
}else SoulScreamTimer -= diff;
|
||||
|
||||
@@ -661,8 +614,7 @@ struct TRINITY_DLL_DECL boss_essence_of_angerAI : public ScriptedAI
|
||||
{
|
||||
DoCast(m_creature, SPELL_SPITE_TARGET);
|
||||
SpiteTimer = 30000;
|
||||
DoYell(ANGER_SAY_SPEC,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, ANGER_SOUND_SPEC);
|
||||
DoScriptText(ANGER_SAY_SPEC, m_creature);
|
||||
}else SpiteTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Shade_of_Akama
|
||||
SD%Complete: 99
|
||||
SD%Complete: 90
|
||||
SDComment: Seems to be complete.
|
||||
SDCategory: Black Temple
|
||||
EndScriptData */
|
||||
@@ -24,6 +24,15 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
#define SAY_DEATH -1564013
|
||||
#define SAY_LOW_HEALTH -1564014
|
||||
// Ending cinematic text
|
||||
#define SAY_FREE -1564015
|
||||
#define SAY_BROKEN_FREE_01 -1564016
|
||||
#define SAY_BROKEN_FREE_02 -1564017
|
||||
|
||||
#define GOSSIP_ITEM "We are ready to fight alongside you, Akama"
|
||||
|
||||
struct Location
|
||||
{
|
||||
float x, y, o, z;
|
||||
@@ -78,20 +87,6 @@ static Location BrokenWP[]=
|
||||
#define AKAMA_Y 400.601013
|
||||
#define AKAMA_Z 112.783997
|
||||
|
||||
// Texts
|
||||
#define SOUND_DEATH 11386
|
||||
#define SAY_DEATH "No! Not yet..."
|
||||
#define SOUND_LOW_HEALTH 11385
|
||||
#define SAY_LOW_HEALTH "I will not last much longer..."
|
||||
|
||||
// Ending cinematic text
|
||||
#define SAY_FREE "Come out from the shadows! I've returned to lead you against our true enemy! Shed your chains and raise your weapons against your Illidari masters!"
|
||||
#define SAY_BROKEN_FREE_01 "Hail our leader! Hail Akama!"
|
||||
#define SAY_BROKEN_FREE_02 "Hail Akama!"
|
||||
|
||||
// Gossips
|
||||
#define GOSSIP_ITEM "We are ready to fight alongside you, Akama"
|
||||
|
||||
// Spells
|
||||
#define SPELL_VERTEX_SHADE_BLACK 39833
|
||||
#define SPELL_SHADE_SOUL_CHANNEL 40401
|
||||
@@ -200,6 +195,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
|
||||
FindChannelers();
|
||||
|
||||
if(!Channelers.empty())
|
||||
{
|
||||
for(std::list<uint64>::iterator itr = Channelers.begin(); itr != Channelers.end(); ++itr)
|
||||
{
|
||||
Creature* Channeler = NULL;
|
||||
@@ -217,11 +213,13 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
|
||||
Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true);
|
||||
Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly");
|
||||
}else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!Sorcerers.empty())
|
||||
{
|
||||
for(std::list<uint64>::iterator itr = Sorcerers.begin(); itr != Sorcerers.end(); ++itr)
|
||||
if(Creature* Sorcerer = ((Creature*)Unit::GetUnit(*m_creature, *itr)))
|
||||
if(Sorcerer->isAlive())
|
||||
@@ -231,7 +229,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
|
||||
}
|
||||
|
||||
Sorcerers.clear();
|
||||
|
||||
}
|
||||
if(Unit* Akama = Unit::GetUnit(*m_creature, AkamaGUID))
|
||||
Akama->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
|
||||
@@ -590,8 +588,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -601,8 +598,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
|
||||
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 15 && !HasYelledOnce)
|
||||
{
|
||||
DoYell(SAY_LOW_HEALTH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_LOW_HEALTH);
|
||||
DoScriptText(SAY_LOW_HEALTH, m_creature);
|
||||
HasYelledOnce = true;
|
||||
}
|
||||
|
||||
@@ -654,6 +650,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
}
|
||||
|
||||
if(SummonBrokenTimer && BrokenSummonIndex < 4)
|
||||
{
|
||||
if(SummonBrokenTimer <= diff)
|
||||
{
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
@@ -676,6 +673,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
++BrokenSummonIndex;
|
||||
SummonBrokenTimer = 1000;
|
||||
}else SummonBrokenTimer -= diff;
|
||||
}
|
||||
|
||||
if(SoulRetrieveTimer)
|
||||
if(SoulRetrieveTimer <= diff)
|
||||
@@ -687,8 +685,9 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
++EndingTalkCount;
|
||||
SoulRetrieveTimer = 2000;
|
||||
SummonBrokenTimer = 1;
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_FREE, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_FREE, m_creature);
|
||||
++EndingTalkCount;
|
||||
SoulRetrieveTimer = 25000;
|
||||
break;
|
||||
@@ -701,7 +700,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
{
|
||||
if(!Yelled)
|
||||
{
|
||||
pUnit->MonsterYell(SAY_BROKEN_FREE_01, LANG_UNIVERSAL, 0);
|
||||
DoScriptText(SAY_BROKEN_FREE_01, pUnit);
|
||||
Yelled = true;
|
||||
}
|
||||
pUnit->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
|
||||
@@ -712,17 +711,22 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
break;
|
||||
case 3:
|
||||
if(!BrokenList.empty())
|
||||
{
|
||||
for(std::list<uint64>::iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr)
|
||||
if(Unit* pUnit = Unit::GetUnit(*m_creature, *itr))
|
||||
// This is the incorrect spell, but can't seem to find the right one.
|
||||
pUnit->CastSpell(pUnit, 39656, true);
|
||||
}
|
||||
++EndingTalkCount;
|
||||
SoulRetrieveTimer = 5000;
|
||||
break;
|
||||
case 4:
|
||||
if(!BrokenList.empty())
|
||||
{
|
||||
for(std::list<uint64>::iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr)
|
||||
if(Unit* pUnit = Unit::GetUnit((*m_creature), *itr))
|
||||
pUnit->MonsterYell(SAY_BROKEN_FREE_02, LANG_UNIVERSAL, 0);
|
||||
}
|
||||
SoulRetrieveTimer = 0;
|
||||
break;
|
||||
}
|
||||
@@ -733,8 +737,9 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
|
||||
if(DestructivePoisonTimer < diff)
|
||||
{
|
||||
// SPELL_DESTRUCTIVE_POISON is self-cast only for some reason so we make our target cast it on itself
|
||||
m_creature->getVictim()->CastSpell(m_creature->getVictim(), SPELL_DESTRUCTIVE_POISON, true);
|
||||
Unit* Shade = Unit::GetUnit((*m_creature), ShadeGUID);
|
||||
if (Shade && Shade->isAlive())
|
||||
DoCast(Shade, SPELL_DESTRUCTIVE_POISON);
|
||||
DestructivePoisonTimer = 15000;
|
||||
}else DestructivePoisonTimer -= diff;
|
||||
|
||||
|
||||
@@ -17,13 +17,17 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_Supremus
|
||||
SD%Complete: 95
|
||||
SDComment: Need to implement doors.
|
||||
SDComment: Need to implement molten punch
|
||||
SDCategory: Black Temple
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
#define EMOTE_NEW_TARGET -1564010
|
||||
#define EMOTE_PUNCH_GROUND -1564011 //DoScriptText(EMOTE_PUNCH_GROUND, m_creature);
|
||||
#define EMOTE_GROUND_CRACK -1564012
|
||||
|
||||
//Spells
|
||||
#define SPELL_MOLTEN_PUNCH 40126
|
||||
#define SPELL_HURTFUL_STRIKE 41926
|
||||
@@ -148,9 +152,11 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
if(!m_creature->HasAura(SPELL_BERSERK, 0))
|
||||
{
|
||||
if(BerserkTimer < diff)
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
else BerserkTimer -= diff;
|
||||
}
|
||||
|
||||
if(SummonFlameTimer < diff)
|
||||
{
|
||||
@@ -178,7 +184,7 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
|
||||
{
|
||||
DoResetThreat();
|
||||
m_creature->AddThreat(target, 5000000.0f);
|
||||
DoTextEmote("acquires a new target!", NULL);
|
||||
DoScriptText(EMOTE_NEW_TARGET, m_creature);
|
||||
SwitchTargetTimer = 10000;
|
||||
}
|
||||
}else SwitchTargetTimer -= diff;
|
||||
@@ -188,7 +194,7 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
|
||||
if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true))
|
||||
{
|
||||
DoCast(target, SPELL_VOLCANIC_SUMMON);
|
||||
DoTextEmote("roars and the ground begins to crack open!", NULL);
|
||||
DoScriptText(EMOTE_GROUND_CRACK, m_creature);
|
||||
SummonVolcanoTimer = 10000;
|
||||
}
|
||||
}else SummonVolcanoTimer -= diff;
|
||||
|
||||
@@ -24,6 +24,18 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
//Speech'n'sound
|
||||
#define SAY_INTRO -1564037
|
||||
#define SAY_AGGRO -1564038
|
||||
#define SAY_SLAY1 -1564039
|
||||
#define SAY_SLAY2 -1564040
|
||||
#define SAY_SPELL1 -1564041
|
||||
#define SAY_SPELL2 -1564042
|
||||
#define SAY_SPECIAL1 -1564043
|
||||
#define SAY_SPECIAL2 -1564044
|
||||
#define SAY_ENRAGE -1564045
|
||||
#define SAY_DEATH -1564046
|
||||
|
||||
//Spells
|
||||
#define SPELL_INCINERATE 40239
|
||||
#define SPELL_CRUSHING_SHADOWS 40243
|
||||
@@ -34,37 +46,6 @@ EndScriptData */
|
||||
|
||||
#define SPELL_ATROPHY 40327 // Shadowy Constructs use this when they get within melee range of a player
|
||||
|
||||
//Speech'n'sound
|
||||
#define SAY_INTRO "I was the first, you know. For me, the wheel of death has spun many times. So much time has passed. I have a lot of catching up to do..."
|
||||
#define SOUND_INTRO 11512
|
||||
|
||||
#define SAY_AGGRO "Vengeance is mine!"
|
||||
#define SOUND_AGGRO 11513
|
||||
|
||||
#define SAY_SLAY1 "I have use for you!"
|
||||
#define SOUND_SLAY1 11514
|
||||
|
||||
#define SAY_SLAY2 "It gets worse..."
|
||||
#define SOUND_SLAY2 11515
|
||||
|
||||
#define SAY_SPELL1 "What are you afraid of?"
|
||||
#define SOUND_SPELL1 11517
|
||||
|
||||
#define SAY_SPELL2 "Death... really isn't so bad."
|
||||
#define SOUND_SPELL2 11516
|
||||
|
||||
#define SAY_SPECIAL1 "Give in!"
|
||||
#define SOUND_SPECIAL1 11518
|
||||
|
||||
#define SAY_SPECIAL2 "I have something for you..."
|
||||
#define SOUND_SPECIAL2 11519
|
||||
|
||||
#define SAY_ENRAGE "YOU WILL SHOW THE PROPER RESPECT!"
|
||||
#define SOUND_ENRAGE 11520
|
||||
|
||||
#define SAY_DEATH "The wheel...spins...again...."
|
||||
#define SOUND_DEATH 11521
|
||||
|
||||
#define CREATURE_DOOM_BLOSSOM 23123
|
||||
#define CREATURE_SHADOWY_CONSTRUCT 23111
|
||||
|
||||
@@ -161,19 +142,8 @@ struct TRINITY_DLL_DECL mob_shadowy_constructAI : public ScriptedAI
|
||||
{
|
||||
if(!who || (!who->isAlive()) || (who->GetGUID() == GhostGUID))
|
||||
return;
|
||||
|
||||
if(who->isTargetableForAttack() && who->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(who))
|
||||
{
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && m_creature->IsWithinLOSInMap(who))
|
||||
{
|
||||
//if(who->HasStealthAura())
|
||||
// who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||
|
||||
m_creature->AddThreat(who, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
}
|
||||
|
||||
/* Comment it out for now. NOTE TO FUTURE DEV: UNCOMMENT THIS OUT ONLY AFTER MIND CONTROL IS IMPLEMENTED
|
||||
@@ -295,8 +265,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoYell(SAY_INTRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_INTRO);
|
||||
DoScriptText(SAY_INTRO, m_creature);
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
|
||||
AggroTargetGUID = who->GetGUID();
|
||||
Intro = true;
|
||||
@@ -308,14 +277,8 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,8 +287,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_TERONGOREFIENDEVENT, DONE);
|
||||
|
||||
DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
float CalculateRandomLocation(float Loc, uint32 radius)
|
||||
@@ -413,18 +375,15 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
|
||||
Intro = false;
|
||||
if(AggroTargetGUID)
|
||||
{
|
||||
Unit* pUnit = Unit::GetUnit((*m_creature), AggroTargetGUID);
|
||||
if(pUnit)
|
||||
{
|
||||
m_creature->GetMotionMaster()->MoveChase(pUnit);
|
||||
if(pUnit)
|
||||
AttackStart(pUnit);
|
||||
}
|
||||
|
||||
DoZoneInCombat();
|
||||
}else EnterEvadeMode();
|
||||
|
||||
@@ -458,8 +417,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
|
||||
if(SummonDoomBlossomTimer < diff)
|
||||
{
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
{
|
||||
float X = CalculateRandomLocation(target->GetPositionX(), 20);
|
||||
float Y = CalculateRandomLocation(target->GetPositionY(), 20);
|
||||
@@ -487,14 +445,8 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SPECIAL1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPECIAL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPECIAL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPECIAL2, m_creature); break;
|
||||
}
|
||||
DoCast(target, SPELL_INCINERATE);
|
||||
IncinerateTimer = 20000 + rand()%31 * 1000;
|
||||
@@ -530,25 +482,20 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SPELL1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPELL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPELL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPELL2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPELL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPELL2, m_creature); break;
|
||||
}
|
||||
RandomYellTimer = 50000 + rand()%51 * 1000;
|
||||
}else RandomYellTimer -= diff;
|
||||
|
||||
if(!m_creature->HasAura(SPELL_BERSERK, 0))
|
||||
{
|
||||
if(EnrageTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
DoYell(SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}else EnrageTimer -= diff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
@@ -24,38 +24,16 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
//Aggro
|
||||
#define SAY_AGGRO "You will die, in the name of Lady Vashj!"
|
||||
#define SOUND_AGGRO 11450
|
||||
|
||||
//Needle (Random)
|
||||
#define SAY_NEEDLE1 "Stick around!"
|
||||
#define SOUND_NEEDLE1 11451
|
||||
|
||||
#define SAY_NEEDLE2 "I'll deal with you later!"
|
||||
#define SOUND_NEEDLE2 11452
|
||||
|
||||
//Slay
|
||||
#define SAY_SLAY1 "Your success was short lived!"
|
||||
#define SOUND_SLAY1 11455
|
||||
|
||||
#define SAY_SLAY2 "Time for you to go!"
|
||||
#define SOUND_SLAY2 11456
|
||||
|
||||
//Special
|
||||
#define SAY_SPECIAL1 "Bel'anen dal'lorei!"
|
||||
#define SOUND_SPECIAL1 11453
|
||||
|
||||
#define SAY_SPECIAL2 "Blood will flow!"
|
||||
#define SOUND_SPECIAL2 11454
|
||||
|
||||
//Enrage
|
||||
#define SAY_ENRAGE "My patience has ran out! Die, DIE!"
|
||||
#define SOUND_ENRAGE 11458
|
||||
|
||||
//Death
|
||||
#define SAY_DEATH "Lord Illidan will... crush you."
|
||||
#define SOUND_DEATH 11459
|
||||
#define SAY_AGGRO -1564000
|
||||
#define SAY_NEEDLE1 -1564001
|
||||
#define SAY_NEEDLE2 -1564002
|
||||
#define SAY_SLAY1 -1564003
|
||||
#define SAY_SLAY2 -1564004
|
||||
#define SAY_SPECIAL1 -1564005
|
||||
#define SAY_SPECIAL2 -1564006
|
||||
#define SAY_ENRAGE1 -1564007 //is this text actually in use?
|
||||
#define SAY_ENRAGE2 -1564008
|
||||
#define SAY_DEATH -1564009
|
||||
|
||||
//Spells
|
||||
#define SPELL_NEEDLE_SPINE 39992
|
||||
@@ -103,14 +81,8 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,8 +91,7 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, DONE);
|
||||
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||
@@ -138,8 +109,7 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, IN_PROGRESS);
|
||||
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoZoneInCombat();
|
||||
}
|
||||
|
||||
@@ -173,8 +143,7 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
|
||||
if(EnrageTimer < diff)
|
||||
{
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE2, m_creature);
|
||||
m_creature->CastSpell(m_creature, SPELL_BERSERK, true);
|
||||
EnrageTimer = 600000;
|
||||
}else EnrageTimer -= diff;
|
||||
@@ -193,13 +162,8 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPECIAL2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPECIAL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPECIAL2, m_creature); break;
|
||||
}
|
||||
SpecialYellTimer = 25000 + (rand()%76)*1000;
|
||||
}else SpecialYellTimer -= diff;
|
||||
@@ -217,14 +181,8 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_NEEDLE1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_NEEDLE1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_NEEDLE2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_NEEDLE2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_NEEDLE1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_NEEDLE2, m_creature); break;
|
||||
}
|
||||
ImpalingSpineTimer = 21000;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,56 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
//Speech'n'Sounds
|
||||
#define SAY_GATH_SLAY -1564085
|
||||
#define SAY_GATH_SLAY_COMNT -1564089
|
||||
#define SAY_GATH_DEATH -1564093
|
||||
#define SAY_GATH_SPECIAL1 -1564077
|
||||
#define SAY_GATH_SPECIAL2 -1564081
|
||||
|
||||
#define SAY_VERA_SLAY -1564086
|
||||
#define SAY_VERA_COMNT -1564089
|
||||
#define SAY_VERA_DEATH -1564094
|
||||
#define SAY_VERA_SPECIAL1 -1564078
|
||||
#define SAY_VERA_SPECIAL2 -1564082
|
||||
|
||||
#define SAY_MALA_SLAY -1564087
|
||||
#define SAY_MALA_COMNT -1564090
|
||||
#define SAY_MALA_DEATH -1564095
|
||||
#define SAY_MALA_SPECIAL1 -1564079
|
||||
#define SAY_MALA_SPECIAL2 -1564083
|
||||
|
||||
#define SAY_ZERE_SLAY -1564088
|
||||
#define SAY_ZERE_COMNT -1564091
|
||||
#define SAY_ZERE_DEATH -1564096
|
||||
#define SAY_ZERE_SPECIAL1 -1564080
|
||||
#define SAY_ZERE_SPECIAL2 -1564084
|
||||
|
||||
#define ERROR_INST_DATA "SD2 ERROR: Instance Data for Black Temple not set properly; Illidari Council event will not function properly."
|
||||
|
||||
struct CouncilYells
|
||||
{
|
||||
int32 entry;
|
||||
uint32 timer;
|
||||
};
|
||||
|
||||
static CouncilYells CouncilAggro[]=
|
||||
{
|
||||
{-1564069, 5000}, // Gathios
|
||||
{-1564070, 5500}, // Veras
|
||||
{-1564071, 5000}, // Malande
|
||||
{-1564072, 0}, // Zerevor
|
||||
};
|
||||
|
||||
// Need to get proper timers for this later
|
||||
static CouncilYells CouncilEnrage[]=
|
||||
{
|
||||
{-1564073, 2000}, // Gathios
|
||||
{-1564074, 6000}, // Veras
|
||||
{-1564075, 5000}, // Malande
|
||||
{-1564076, 0}, // Zerevor
|
||||
};
|
||||
|
||||
// High Nethermancer Zerevor's spells
|
||||
#define SPELL_FLAMESTRIKE 41481
|
||||
#define SPELL_BLIZZARD 41482
|
||||
@@ -55,84 +105,6 @@ EndScriptData */
|
||||
|
||||
#define SPELL_BERSERK 45078
|
||||
|
||||
//Speech'n'Sounds
|
||||
#define SAY_GATH_AGGRO "I have better things to do!"
|
||||
#define SOUND_GATH_AGGRO 11422
|
||||
#define SAY_GATH_SLAY "Selama am'oronor!"
|
||||
#define SOUND_GATH_SLAY 11423
|
||||
#define SAY_GATH_COMNT "Well done!"
|
||||
#define SOUND_GATH_COMNT 11424
|
||||
#define SAY_GATH_DEATH "Lord Illidan... I..."
|
||||
#define SOUND_GATH_DEATH 11425
|
||||
#define SAY_GATH_SPECIAL1 "Enjoy your final moments!"
|
||||
#define SOUND_GATH_SPECIAL1 11426
|
||||
#define SAY_GATH_SPECIAL2 "You are mine!"
|
||||
#define SOUND_GATH_SPECIAL2 11427
|
||||
|
||||
#define SAY_MALA_AGGRO "Flee, or die!"
|
||||
#define SOUND_MALA_AGGRO 11482
|
||||
#define SAY_MALA_SLAY "My work is done."
|
||||
#define SOUND_MALA_SLAY 11483
|
||||
#define SAY_MALA_COMNT "As it should be!"
|
||||
#define SOUND_MALA_COMNT 11484
|
||||
#define SAY_MALA_DEATH "Destiny... awaits."
|
||||
#define SOUND_MALA_DEATH 11485
|
||||
#define SAY_MALA_SPECIAL1 "No second chances!"
|
||||
#define SOUND_MALA_SPECIAL1 11486
|
||||
#define SAY_MALA_SPECIAL2 "I'm full of surprises!"
|
||||
#define SOUND_MALA_SPECIAL2 11487
|
||||
|
||||
#define SAY_ZERE_AGGRO "Common... such a crude language. Bandal!"
|
||||
#define SOUND_ZERE_AGGRO 11440
|
||||
#define SAY_ZERE_SLAY "Shorel'aran."
|
||||
#define SOUND_ZERE_SLAY 11441
|
||||
#define SAY_ZERE_COMNT "Belesa menoor!"
|
||||
#define SOUND_ZERE_COMNT 11442
|
||||
#define SAY_ZERE_DEATH "Diel ma'ahn... oreindel'o"
|
||||
#define SOUND_ZERE_DEATH 11443
|
||||
#define SAY_ZERE_SPECIAL1 "Diel fin'al"
|
||||
#define SOUND_ZERE_SPECIAL1 11444
|
||||
#define SAY_ZERE_SPECIAL2 "Sha'amoor ara mashal?"
|
||||
#define SOUND_ZERE_SPECIAL2 11445
|
||||
|
||||
#define SAY_VERA_AGGRO "You wish to test me?"
|
||||
#define SOUND_VERA_AGGRO 11524
|
||||
#define SAY_VERA_SLAY "Valiant effort!"
|
||||
#define SOUND_VERA_SLAY 11525
|
||||
#define SAY_VERA_COMNT "A glorious kill!"
|
||||
#define SOUND_VERA_COMNT 11526
|
||||
#define SAY_VERA_DEATH "You got lucky!"
|
||||
#define SOUND_VERA_DEATH 11527
|
||||
#define SAY_VERA_SPECIAL1 "You're not caught up for this!"
|
||||
#define SOUND_VERA_SPECIAL1 11528
|
||||
#define SAY_VERA_SPECIAL2 "Anar'alah belore!"
|
||||
#define SOUND_VERA_SPECIAL2 11529
|
||||
|
||||
#define ERROR_INST_DATA "SD2 ERROR: Instance Data for Black Temple not set properly; Illidari Council event will not function properly."
|
||||
|
||||
struct CouncilYells
|
||||
{
|
||||
char* text;
|
||||
uint32 soundId, timer;
|
||||
};
|
||||
|
||||
static CouncilYells CouncilAggro[]=
|
||||
{
|
||||
{"I have better things to do!", 11422, 5000}, // Gathios
|
||||
{"You wish to test me?", 11524, 5500}, // Veras
|
||||
{"Flee, or die!", 11482, 5000}, // Malande
|
||||
{"Common... such a crude language. Bandal!", 11440, 0}, // Zerevor
|
||||
};
|
||||
|
||||
// Need to get proper timers for this later
|
||||
static CouncilYells CouncilEnrage[]=
|
||||
{
|
||||
{"Enough games!", 11428, 2000}, // Gathios
|
||||
{"You wish to kill me? Hahaha, you first!", 11530, 6000},//Veras
|
||||
{"For Quel'Thalas! For the Sunwell!", 11488, 5000}, // Malande
|
||||
{"Sha'amoor sine menoor!", 11446, 0}, // Zerevor
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL mob_blood_elf_council_voice_triggerAI : public ScriptedAI
|
||||
{
|
||||
mob_blood_elf_council_voice_triggerAI(Creature* c) : ScriptedAI(c)
|
||||
@@ -170,8 +142,7 @@ struct TRINITY_DLL_DECL mob_blood_elf_council_voice_triggerAI : public ScriptedA
|
||||
Council[1] = pInstance->GetData64(DATA_VERASDARKSHADOW);
|
||||
Council[2] = pInstance->GetData64(DATA_LADYMALANDE);
|
||||
Council[3] = pInstance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
|
||||
}
|
||||
else error_log(ERROR_INST_DATA);
|
||||
}else error_log(ERROR_INST_DATA);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) {}
|
||||
@@ -188,31 +159,33 @@ struct TRINITY_DLL_DECL mob_blood_elf_council_voice_triggerAI : public ScriptedA
|
||||
return;
|
||||
|
||||
if(AggroYellTimer)
|
||||
{
|
||||
if(AggroYellTimer <= diff)
|
||||
{
|
||||
if(Unit* pMember = Unit::GetUnit(*m_creature, Council[YellCounter]))
|
||||
{
|
||||
pMember->MonsterYell(CouncilAggro[YellCounter].text, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(pMember, CouncilAggro[YellCounter].soundId);
|
||||
DoScriptText(CouncilAggro[YellCounter].entry, pMember);
|
||||
AggroYellTimer = CouncilAggro[YellCounter].timer;
|
||||
}
|
||||
++YellCounter;
|
||||
if(YellCounter > 3)
|
||||
YellCounter = 0; // Reuse for Enrage Yells
|
||||
}else AggroYellTimer -= diff;
|
||||
}
|
||||
|
||||
if(EnrageTimer)
|
||||
{
|
||||
if(EnrageTimer <= diff)
|
||||
{
|
||||
if(Unit* pMember = Unit::GetUnit(*m_creature, Council[YellCounter]))
|
||||
{
|
||||
pMember->CastSpell(pMember, SPELL_BERSERK, true);
|
||||
pMember->MonsterYell(CouncilEnrage[YellCounter].text, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(pMember, CouncilEnrage[YellCounter].soundId);
|
||||
DoScriptText(CouncilEnrage[YellCounter].entry, pMember);
|
||||
EnrageTimer = CouncilEnrage[YellCounter].timer;
|
||||
}
|
||||
++YellCounter;
|
||||
}else EnrageTimer -= diff;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -302,7 +275,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
|
||||
{
|
||||
Member = Unit::GetUnit((*m_creature), Council[i]);
|
||||
if(Member && Member->isAlive())
|
||||
Member->AddThreat(target, 1.0f);
|
||||
((Creature*)Member)->AI()->AttackStart(target);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -317,6 +290,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
|
||||
if(!EventBegun) return;
|
||||
|
||||
if(EndEventTimer)
|
||||
{
|
||||
if(EndEventTimer <= diff)
|
||||
{
|
||||
if(DeathCount > 3)
|
||||
@@ -337,8 +311,10 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
|
||||
++DeathCount;
|
||||
EndEventTimer = 1500;
|
||||
}else EndEventTimer -= diff;
|
||||
}
|
||||
|
||||
if(CheckTimer)
|
||||
{
|
||||
if(CheckTimer <= diff)
|
||||
{
|
||||
uint8 EvadeCheck = 0;
|
||||
@@ -366,6 +342,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
|
||||
|
||||
CheckTimer = 2000;
|
||||
}else CheckTimer -= diff;
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
@@ -460,14 +437,12 @@ struct TRINITY_DLL_DECL boss_gathios_the_shattererAI : public boss_illidari_coun
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_GATH_SLAY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_GATH_SLAY);
|
||||
DoScriptText(SAY_GATH_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_GATH_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_GATH_DEATH);
|
||||
DoScriptText(SAY_GATH_DEATH, m_creature);
|
||||
}
|
||||
|
||||
Unit* SelectCouncilMember()
|
||||
@@ -579,14 +554,12 @@ struct TRINITY_DLL_DECL boss_high_nethermancer_zerevorAI : public boss_illidari_
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_ZERE_SLAY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ZERE_SLAY);
|
||||
DoScriptText(SAY_ZERE_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_ZERE_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_ZERE_DEATH);
|
||||
DoScriptText(SAY_ZERE_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -669,14 +642,12 @@ struct TRINITY_DLL_DECL boss_lady_malandeAI : public boss_illidari_councilAI
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_MALA_SLAY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_MALA_SLAY);
|
||||
DoScriptText(SAY_MALA_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_MALA_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_MALA_DEATH);
|
||||
DoScriptText(SAY_MALA_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -745,14 +716,12 @@ struct TRINITY_DLL_DECL boss_veras_darkshadowAI : public boss_illidari_councilAI
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_VERA_SLAY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_VERA_SLAY);
|
||||
DoScriptText(SAY_VERA_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_VERA_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_VERA_DEATH);
|
||||
DoScriptText(SAY_VERA_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
|
||||
@@ -40,7 +40,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_black_temple : public ScriptedInstance
|
||||
{
|
||||
instance_black_temple(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_black_temple(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint64 Najentus;
|
||||
uint64 Akama; // This is the Akama that starts the Illidan encounter.
|
||||
|
||||
@@ -23,6 +23,8 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_FRENZY -1469031
|
||||
|
||||
#define SPELL_SHADOWFLAME 22539
|
||||
#define SPELL_WINGBUFFET 23339
|
||||
#define SPELL_FRENZY 23342 //This spell periodically triggers fire nova
|
||||
@@ -72,6 +74,7 @@ struct TRINITY_DLL_DECL boss_flamegorAI : public ScriptedAI
|
||||
//Frenzy_Timer
|
||||
if (Frenzy_Timer < diff)
|
||||
{
|
||||
DoScriptText(EMOTE_FRENZY, m_creature);
|
||||
DoCast(m_creature,SPELL_FRENZY);
|
||||
Frenzy_Timer = 8000 + (rand()%2000);
|
||||
}else Frenzy_Timer -= diff;
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Blackwing_Lair
|
||||
SD%Complete: 0
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Archimonde
|
||||
SD%Complete: 95
|
||||
SDComment: Doomfires not completely offlike due to core limitations for random moving.
|
||||
SD%Complete: 85
|
||||
SDComment: Doomfires not completely offlike due to core limitations for random moving. Tyrande and second phase not fully implemented.
|
||||
SDCategory: Caverns of Time, Mount Hyjal
|
||||
EndScriptData */
|
||||
|
||||
@@ -25,6 +25,20 @@ EndScriptData */
|
||||
#include "def_hyjal.h"
|
||||
#include "SpellAuras.h"
|
||||
|
||||
//text id -1534018 are the text used when previous events complete. Not part of this script.
|
||||
#define SAY_AGGRO -1534019
|
||||
#define SAY_DOOMFIRE1 -1534020
|
||||
#define SAY_DOOMFIRE2 -1534021
|
||||
#define SAY_AIR_BURST1 -1534022
|
||||
#define SAY_AIR_BURST2 -1534023
|
||||
#define SAY_SLAY1 -1534024
|
||||
#define SAY_SLAY2 -1534025
|
||||
#define SAY_SLAY3 -1534026
|
||||
#define SAY_ENRAGE -1534027
|
||||
#define SAY_DEATH -1534028
|
||||
#define SAY_SOUL_CHARGE1 -1534029
|
||||
#define SAY_SOUL_CHARGE2 -1534030
|
||||
|
||||
#define SPELL_DENOUEMENT_WISP 32124
|
||||
#define SPELL_ANCIENT_SPARK 39349
|
||||
#define SPELL_PROTECTION_OF_ELUNE 38528
|
||||
@@ -36,6 +50,7 @@ EndScriptData */
|
||||
#define SPELL_HAND_OF_DEATH 35354
|
||||
#define SPELL_AIR_BURST 32014
|
||||
#define SPELL_GRIP_OF_THE_LEGION 31972
|
||||
#define SPELL_DOOMFIRE_STRIKE 31903 //summons two creatures
|
||||
#define SPELL_DOOMFIRE_SPAWN 32074
|
||||
#define SPELL_DOOMFIRE_VISUAL 42344 // This is actually a Zul'Aman spell, but the proper Doomfire spell sometimes freezes the server if a player stands in it for too long
|
||||
#define SPELL_DOOMFIRE_DAMAGE 31944
|
||||
@@ -47,42 +62,6 @@ EndScriptData */
|
||||
#define SPELL_UNLEASH_SOUL_RED 32053
|
||||
#define SPELL_FEAR 31970
|
||||
|
||||
#define SAY_AGGRO "Your resistance is insignificant!"
|
||||
#define SOUND_AGGRO 10987
|
||||
|
||||
#define SAY_DOOMFIRE1 "This world will burn!"
|
||||
#define SOUND_DOOMFIRE1 10990
|
||||
|
||||
#define SAY_DOOMFIRE2 "Manach sheek-thrish!"
|
||||
#define SOUND_DOOMFIRE2 11041
|
||||
|
||||
#define SAY_AIR_BURST "A-kreesh!"
|
||||
#define SOUND_AIR_BURST 10989
|
||||
|
||||
#define SAY_AIR_BURST2 "Away vermin!"
|
||||
#define SOUND_AIR_BURST2 11043
|
||||
|
||||
#define SAY_SLAY1 "All creation will be devoured!"
|
||||
#define SOUND_SLAY1 11044
|
||||
|
||||
#define SAY_SLAY2 "Your soul will languish for eternity."
|
||||
#define SOUND_SLAY2 10991
|
||||
|
||||
#define SAY_SLAY3 "I am the coming of the end!"
|
||||
#define SOUND_SLAY3 11045
|
||||
|
||||
#define SAY_UNK1 "You are mine now."
|
||||
#define SOUND_UNK1 10988
|
||||
|
||||
#define SAY_UNK2 "Bow to my will."
|
||||
#define SOUND_UNK2 11042
|
||||
|
||||
#define SAY_ENRAGE "At last it is here. Mourn and lament the passing of all you have ever known and all that would have been! Akmin-kurai!"
|
||||
#define SOUND_ENRAGE 10993
|
||||
|
||||
#define SAY_DEATH "No, it cannot be! Nooo!"
|
||||
#define SOUND_DEATH 10992
|
||||
|
||||
#define CREATURE_ARCHIMONDE 17968
|
||||
#define CREATURE_DOOMFIRE 18095
|
||||
#define CREATURE_DOOMFIRE_TARGETING 18104
|
||||
@@ -270,7 +249,7 @@ struct TRINITY_DLL_DECL mob_doomfire_targettingAI : public ScriptedAI
|
||||
|| who->GetEntry() == CREATURE_DOOMFIRE || who->GetEntry() == CREATURE_DOOMFIRE_TARGETING || !who->isTargetableForAttack())
|
||||
return;
|
||||
|
||||
m_creature->AddThreat(who, 1.0f);
|
||||
m_creature->AddThreat(who, 0.0f);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit *done_by, uint32 &damage) { damage = 0; }
|
||||
@@ -386,7 +365,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
pInstance->SetData(DATA_ARCHIMONDEEVENT, NOT_STARTED);
|
||||
|
||||
DrainNordrassilTimer = 0;
|
||||
FearTimer = 40000;
|
||||
FearTimer = 42000;
|
||||
AirBurstTimer = 30000;
|
||||
GripOfTheLegionTimer = 5000 + rand()%20000;
|
||||
DoomfireTimer = 20000;
|
||||
@@ -407,8 +386,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
m_creature->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoZoneInCombat();
|
||||
|
||||
if(pInstance)
|
||||
@@ -419,18 +397,9 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_SLAY3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
|
||||
if(victim && (victim->GetTypeId() == TYPEID_PLAYER))
|
||||
@@ -464,8 +433,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_ARCHIMONDEEVENT, DONE);
|
||||
@@ -524,15 +492,10 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
if(target)
|
||||
Doomfire->AI()->AttackStart(target);
|
||||
|
||||
if(rand()%2 == 0)
|
||||
{
|
||||
DoYell(SAY_DOOMFIRE1, LANG_UNIVERSAL, m_creature);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DOOMFIRE1);
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_DOOMFIRE2, LANG_UNIVERSAL, m_creature);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DOOMFIRE2);
|
||||
}
|
||||
if(rand()%2 == 0)
|
||||
DoScriptText(SAY_DOOMFIRE1, m_creature);
|
||||
else
|
||||
DoScriptText(SAY_DOOMFIRE2, m_creature);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -626,13 +589,13 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
Enraged = true;
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}
|
||||
}else EnrageTimer -= diff;
|
||||
|
||||
if(CheckDistanceTimer < diff)
|
||||
{ // To simplify the check, we simply summon a creature in the location and then check how far we are from the creature
|
||||
{
|
||||
// To simplify the check, we simply summon a creature in the location and then check how far we are from the creature
|
||||
Creature* Check = m_creature->SummonCreature(CREATURE_CHANNEL_TARGET, NORDRASSIL_X, NORDRASSIL_Y, NORDRASSIL_Z, 0, TEMPSUMMON_TIMED_DESPAWN, 2000);
|
||||
if(Check)
|
||||
{
|
||||
@@ -642,8 +605,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
Enraged = true;
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}
|
||||
}
|
||||
CheckDistanceTimer = 5000;
|
||||
@@ -656,6 +618,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
{
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
//all members of raid must get this buff
|
||||
DoCast(m_creature->getVictim(), SPELL_PROTECTION_OF_ELUNE);
|
||||
HasProtected = true;
|
||||
Enraged = true;
|
||||
@@ -703,14 +666,10 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
if(AirBurstTimer < diff)
|
||||
{
|
||||
if(rand()%2 == 0)
|
||||
{
|
||||
DoYell(SAY_AIR_BURST, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AIR_BURST);
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_AIR_BURST2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AIR_BURST2);
|
||||
}
|
||||
DoScriptText(SAY_AIR_BURST1, m_creature);
|
||||
else
|
||||
DoScriptText(SAY_AIR_BURST2, m_creature);
|
||||
|
||||
|
||||
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_AIR_BURST);
|
||||
AirBurstTimer = 25000 + rand()%15000;
|
||||
@@ -719,7 +678,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public ScriptedAI
|
||||
if(FearTimer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_FEAR);
|
||||
FearTimer = 40000;
|
||||
FearTimer = 42000;
|
||||
}else FearTimer -= diff;
|
||||
|
||||
if(DoomfireTimer < diff)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Hyjal
|
||||
SD%Complete: 100
|
||||
SDComment:
|
||||
SD%Complete: 80
|
||||
SDComment: gossip text id's unknown
|
||||
SDCategory: Caverns of Time, Mount Hyjal
|
||||
EndScriptData */
|
||||
|
||||
@@ -30,12 +30,17 @@ EndContentData */
|
||||
#include "precompiled.h"
|
||||
#include "hyjalAI.h"
|
||||
|
||||
#define GOSSIP_ITEM_BEGIN_ALLY "We are ready to defend the Alliance base."
|
||||
#define GOSSIP_ITEM_ANETHERON "The defenses are holding up; we can continue."
|
||||
#define GOSSIP_ITEM_RETREAT "We can't keep this up. Let's retreat!"
|
||||
#define GOSSIP_ITEM_BEGIN_ALLY "My companions and I are with you, Lady Proudmoore."
|
||||
#define GOSSIP_ITEM_ANETHERON "We are ready for whatever Archimonde might send our way, Lady Proudmoore."
|
||||
|
||||
#define GOSSIP_ITEM_BEGIN_HORDE "I am with you, Thrall."
|
||||
#define GOSSIP_ITEM_AZGALOR "We have nothing to fear."
|
||||
|
||||
#define GOSSIP_ITEM_RETREAT "We can't keep this up. Let's retreat!"
|
||||
|
||||
#define GOSSIP_ITEM_TYRANDE "Aid us in defending Nordrassil"
|
||||
#define ITEM_TEAR_OF_GODDESS 24494
|
||||
|
||||
#define GOSSIP_ITEM_BEGIN_HORDE "We're here to help! The Alliance are overrun."
|
||||
#define GOSSIP_ITEM_AZGALOR "We're okay so far. Let's do this!"
|
||||
|
||||
CreatureAI* GetAI_npc_jaina_proudmoore(Creature *_Creature)
|
||||
{
|
||||
@@ -72,10 +77,10 @@ bool GossipHello_npc_jaina_proudmoore(Player *player, Creature *_Creature)
|
||||
else if(RageEncounter == DONE && AnetheronEncounter == NOT_STARTED)
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_ANETHERON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
else if(RageEncounter == DONE && AnetheronEncounter == DONE)
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
|
||||
if(player->isGameMaster())
|
||||
player->ADD_GOSSIP_ITEM(2, "[GM] Toggle Debug Timers", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
player->ADD_GOSSIP_ITEM(2, "[GM] Toggle Debug Timers", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
|
||||
player->SEND_GOSSIP_MENU(907, _Creature->GetGUID());
|
||||
|
||||
@@ -84,7 +89,6 @@ bool GossipHello_npc_jaina_proudmoore(Player *player, Creature *_Creature)
|
||||
|
||||
bool GossipSelect_npc_jaina_proudmoore(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||
{
|
||||
player->PlayerTalkClass->GetGossipMenu();
|
||||
hyjalAI* ai = ((hyjalAI*)_Creature->AI());
|
||||
switch(action)
|
||||
{
|
||||
@@ -99,9 +103,9 @@ bool GossipSelect_npc_jaina_proudmoore(Player *player, Creature *_Creature, uint
|
||||
case GOSSIP_ACTION_INFO_DEF + 3:
|
||||
ai->Retreat();
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 4:
|
||||
case GOSSIP_ACTION_INFO_DEF:
|
||||
ai->Debug = !ai->Debug;
|
||||
outstring_log("SD2 : HyjalAI - Debug mode has been toggled");
|
||||
debug_log("SD2: HyjalAI - Debug mode has been toggled");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -129,8 +133,14 @@ CreatureAI* GetAI_npc_thrall(Creature *_Creature)
|
||||
bool GossipHello_npc_thrall(Player *player, Creature *_Creature)
|
||||
{
|
||||
hyjalAI* ai = ((hyjalAI*)_Creature->AI());
|
||||
|
||||
if (ai->EventBegun)
|
||||
return false;
|
||||
|
||||
uint32 AnetheronEvent = ai->GetInstanceData(DATA_ANETHERONEVENT);
|
||||
if(AnetheronEvent >= DONE && !ai->EventBegun) // Only let them start the Horde phase if Anetheron is dead.
|
||||
|
||||
// Only let them start the Horde phases if Anetheron is dead.
|
||||
if (AnetheronEvent == DONE)
|
||||
{
|
||||
uint32 KazrogalEvent = ai->GetInstanceData(DATA_KAZROGALEVENT);
|
||||
uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT);
|
||||
@@ -143,7 +153,7 @@ bool GossipHello_npc_thrall(Player *player, Creature *_Creature)
|
||||
}
|
||||
|
||||
if(player->isGameMaster())
|
||||
player->ADD_GOSSIP_ITEM(2, "[GM] Toggle Debug Timers", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
player->ADD_GOSSIP_ITEM(2, "[GM] Toggle Debug Timers", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
|
||||
player->SEND_GOSSIP_MENU(907, _Creature->GetGUID());
|
||||
|
||||
@@ -152,7 +162,6 @@ bool GossipHello_npc_thrall(Player *player, Creature *_Creature)
|
||||
|
||||
bool GossipSelect_npc_thrall(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||
{
|
||||
player->PlayerTalkClass->GetGossipMenu();
|
||||
hyjalAI* ai = ((hyjalAI*)_Creature->AI());
|
||||
switch(action)
|
||||
{
|
||||
@@ -167,26 +176,48 @@ bool GossipSelect_npc_thrall(Player *player, Creature *_Creature, uint32 sender,
|
||||
case GOSSIP_ACTION_INFO_DEF + 3:
|
||||
ai->Retreat();
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 4:
|
||||
case GOSSIP_ACTION_INFO_DEF:
|
||||
ai->Debug = !ai->Debug;
|
||||
outstring_log("SD2 : HyjalAI - Debug mode has been toggled");
|
||||
debug_log("SD2: HyjalAI - Debug mode has been toggled");
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_tyrande_whisperwind(Creature *_Creature)
|
||||
{
|
||||
hyjalAI* ai = new hyjalAI(_Creature);
|
||||
ai->Reset();
|
||||
ai->EnterEvadeMode();
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
||||
bool GossipHello_npc_tyrande_whisperwind(Player* player, Creature* _Creature)
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM(1, "Aid us in defending Nordrassil", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
player->SEND_GOSSIP_MENU(907, _Creature->GetGUID());
|
||||
return true;
|
||||
hyjalAI* ai = ((hyjalAI*)_Creature->AI());
|
||||
uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT);
|
||||
|
||||
// Only let them get item if Azgalor is dead.
|
||||
if (AzgalorEvent == DONE && !player->HasItemCount(ITEM_TEAR_OF_GODDESS,1))
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TYRANDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
player->SEND_GOSSIP_MENU(907, _Creature->GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GossipSelect_npc_tyrande_whisperwind(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||
{
|
||||
if(action == GOSSIP_ACTION_TRADE)
|
||||
player->SEND_VENDORLIST( _Creature->GetGUID() );
|
||||
if (action == GOSSIP_ACTION_INFO_DEF)
|
||||
{
|
||||
ItemPosCountVec dest;
|
||||
uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_TEAR_OF_GODDESS, 1);
|
||||
if (msg == EQUIP_ERR_OK)
|
||||
{
|
||||
player->StoreNewItem(dest, ITEM_TEAR_OF_GODDESS, true);
|
||||
}
|
||||
player->SEND_GOSSIP_MENU(907, _Creature->GetGUID());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -213,5 +244,6 @@ void AddSC_hyjal()
|
||||
newscript->Name = "npc_tyrande_whisperwind";
|
||||
newscript->pGossipHello = &GossipHello_npc_tyrande_whisperwind;
|
||||
newscript->pGossipSelect = &GossipSelect_npc_tyrande_whisperwind;
|
||||
newscript->GetAI = &GetAI_npc_tyrande_whisperwind;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: HyjalAI
|
||||
SD%Complete: 99
|
||||
SD%Complete: 90
|
||||
SDComment: World Packet workaround for World States
|
||||
SDCategory: Caverns of Time, Mount Hyjal
|
||||
EndScriptData */
|
||||
@@ -25,7 +25,8 @@ EndScriptData */
|
||||
#include "hyjalAI.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
float AllianceBase[4][3]= // Locations for summoning waves in Alliance base
|
||||
// Locations for summoning waves in Alliance base
|
||||
float AllianceBase[4][3]=
|
||||
{
|
||||
{4979.010, -1709.134, 1339.674},
|
||||
{4969.123, -1705.904, 1341.363},
|
||||
@@ -33,7 +34,8 @@ float AllianceBase[4][3]= // Locations for sum
|
||||
{4975.262, -1698.239, 1341.427}
|
||||
};
|
||||
|
||||
float HordeBase[4][3]= // Locations for summoning waves in Horde base
|
||||
// Locations for summoning waves in Horde base
|
||||
float HordeBase[4][3]=
|
||||
{
|
||||
{5554.399, -2581.419, 1480.820},
|
||||
{5538.996, -2577.742, 1479.790},
|
||||
@@ -41,14 +43,11 @@ float HordeBase[4][3]= // Locations for sum
|
||||
{5547.218, -2574.589, 1479.194}
|
||||
};
|
||||
|
||||
float AttackArea[2][3]= // used to inform the wave where to move and attack to
|
||||
// used to inform the wave where to move and attack to
|
||||
float AttackArea[2][3]=
|
||||
{
|
||||
{ // Alliance
|
||||
5042.9189, -1776.2562, 1323.0621
|
||||
},
|
||||
{ // Horde
|
||||
5510.4815, -2676.7112, 1480.4314
|
||||
}
|
||||
{5042.9189, -1776.2562, 1323.0621}, // Alliance
|
||||
{5510.4815, -2676.7112, 1480.4314} // Horde
|
||||
};
|
||||
|
||||
hyjalAI::hyjalAI(Creature *c) : ScriptedAI(c)
|
||||
@@ -59,20 +58,20 @@ hyjalAI::hyjalAI(Creature *c) : ScriptedAI(c)
|
||||
|
||||
void hyjalAI::Reset()
|
||||
{
|
||||
/** GUIDs **/
|
||||
// GUIDs
|
||||
PlayerGUID = 0;
|
||||
BossGUID[0] = 0;
|
||||
BossGUID[1] = 0;
|
||||
|
||||
/** Timers **/
|
||||
// Timers
|
||||
NextWaveTimer = 10000;
|
||||
CheckTimer = 0;
|
||||
RetreatTimer = 1000;
|
||||
|
||||
/** Misc **/
|
||||
// Misc
|
||||
WaveCount = 0;
|
||||
|
||||
/** Set faction properly based on creature entry**/
|
||||
// Set faction properly based on creature entry
|
||||
switch(m_creature->GetEntry())
|
||||
{
|
||||
case 17772:
|
||||
@@ -80,36 +79,39 @@ void hyjalAI::Reset()
|
||||
DoCast(m_creature, SPELL_BRILLIANCE_AURA, true);
|
||||
break;
|
||||
|
||||
case 17852: Faction = 1; break;
|
||||
case 17852:
|
||||
Faction = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/** Bools **/
|
||||
//Bools
|
||||
EventBegun = false;
|
||||
FirstBossDead = false;
|
||||
SecondBossDead = false;
|
||||
Summon = false;
|
||||
bRetreat = false;
|
||||
Debug = false;
|
||||
|
||||
/** Flags **/
|
||||
//Flags
|
||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
|
||||
/** Initialize spells **/
|
||||
//Initialize spells
|
||||
memset(Spell, 0, sizeof(Spell));
|
||||
|
||||
/** Reset World States **/
|
||||
//Reset World States
|
||||
UpdateWorldState(WORLDSTATE_WAVES, 0);
|
||||
UpdateWorldState(WORLDSTATE_ENEMY, 0);
|
||||
UpdateWorldState(WORLDSTATE_ENEMYCOUNT, 0);
|
||||
|
||||
/** Reset Instance Data for trash count **/
|
||||
//Reset Instance Data for trash count
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_RESET_TRASH_COUNT, 0);
|
||||
else error_log(ERROR_INST_DATA);
|
||||
|
||||
/*** Visibility ***/
|
||||
//Visibility
|
||||
m_creature->SetVisibility(VISIBILITY_ON);
|
||||
|
||||
/** If Jaina evades, reset the visibility of all other creatures in the grid. **/
|
||||
//If Jaina evades, reset the visibility of all other creatures in the grid.
|
||||
if(CreatureList.empty())
|
||||
return;
|
||||
|
||||
@@ -130,6 +132,8 @@ void hyjalAI::EnterEvadeMode()
|
||||
|
||||
if(m_creature->isAlive())
|
||||
m_creature->GetMotionMaster()->MoveTargetedHome();
|
||||
|
||||
m_creature->SetLootRecipient(NULL);
|
||||
|
||||
InCombat = false;
|
||||
}
|
||||
@@ -158,15 +162,16 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
||||
Creature* pCreature = m_creature->SummonCreature(entry, SpawnLoc[0], SpawnLoc[1], SpawnLoc[2], 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
|
||||
if(pCreature)
|
||||
{
|
||||
++EnemyCount; // Increment Enemy Count to be used in World States and instance script
|
||||
// Increment Enemy Count to be used in World States and instance script
|
||||
++EnemyCount;
|
||||
|
||||
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
pCreature->GetMotionMaster()->MovePoint(0, AttackLoc[0],AttackLoc[1],AttackLoc[2]);
|
||||
pCreature->AddThreat(m_creature, 1.0f);
|
||||
pCreature->AddThreat(m_creature, 0.0f);
|
||||
DoZoneInCombat(pCreature);
|
||||
|
||||
// Check if creature is a boss.
|
||||
if(pCreature->GetCreatureInfo()->rank == 3)
|
||||
if (pCreature->isWorldBoss())
|
||||
{
|
||||
if(!FirstBossDead) BossGUID[0] = pCreature->GetGUID();
|
||||
else BossGUID[1] = pCreature->GetGUID();
|
||||
@@ -177,8 +182,9 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
|
||||
|
||||
void hyjalAI::SummonNextWave(Wave wave[18], uint32 Count, float Base[4][3])
|
||||
{
|
||||
if(rand()%4 == 0) // 1 in 4 chance we give a rally yell. Not sure if the chance is Blizzlike.
|
||||
Talk(RALLY);
|
||||
// 1 in 4 chance we give a rally yell. Not sure if the chance is offilike.
|
||||
if (rand()%4 == 0)
|
||||
Talk(RALLY);
|
||||
|
||||
if(!pInstance)
|
||||
{
|
||||
@@ -271,23 +277,18 @@ void hyjalAI::Talk(uint32 id)
|
||||
|
||||
uint8 ind = *(index.begin()) + rand()%index.size();
|
||||
|
||||
char* Yell = NULL;
|
||||
uint32 Sound = 0;
|
||||
int32 YellId = 0;
|
||||
if(Faction == 0) // Alliance
|
||||
{
|
||||
Yell = JainaQuotes[ind].text;
|
||||
Sound = JainaQuotes[ind].sound;
|
||||
YellId = JainaQuotes[ind].textid;
|
||||
}
|
||||
else if(Faction == 1) // Horde
|
||||
{
|
||||
Yell = ThrallQuotes[ind].text;
|
||||
Sound = ThrallQuotes[ind].sound;
|
||||
YellId = ThrallQuotes[ind].textid;
|
||||
}
|
||||
|
||||
if(Yell)
|
||||
DoYell(Yell, LANG_UNIVERSAL, NULL);
|
||||
if(Sound)
|
||||
DoPlaySoundToSet(m_creature, Sound);
|
||||
if (YellId)
|
||||
DoScriptText(YellId, m_creature);
|
||||
}
|
||||
|
||||
// Slight workaround for now
|
||||
@@ -359,18 +360,20 @@ void hyjalAI::Retreat()
|
||||
void hyjalAI::UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(bRetreat)
|
||||
{
|
||||
if(RetreatTimer < diff)
|
||||
{
|
||||
bRetreat = false;
|
||||
if(CreatureList.empty())
|
||||
return;
|
||||
{
|
||||
bRetreat = false;
|
||||
if(CreatureList.empty())
|
||||
return;
|
||||
|
||||
for(std::list<uint64>::iterator itr = CreatureList.begin(); itr != CreatureList.end(); ++itr)
|
||||
if(Unit* pUnit = Unit::GetUnit(*m_creature, *itr))
|
||||
pUnit->SetVisibility(VISIBILITY_OFF);
|
||||
for(std::list<uint64>::iterator itr = CreatureList.begin(); itr != CreatureList.end(); ++itr)
|
||||
if(Unit* pUnit = Unit::GetUnit(*m_creature, *itr))
|
||||
pUnit->SetVisibility(VISIBILITY_OFF);
|
||||
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
}else RetreatTimer -= diff;
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
}else RetreatTimer -= diff;
|
||||
}
|
||||
|
||||
if(!EventBegun)
|
||||
return;
|
||||
|
||||
@@ -31,13 +31,13 @@
|
||||
#define WORLDSTATE_ENEMY 2453
|
||||
#define WORLDSTATE_ENEMYCOUNT 2454
|
||||
|
||||
/*** Spells for Jaina ***/
|
||||
//Spells for Jaina
|
||||
#define SPELL_BRILLIANCE_AURA 31260 // The database must handle this spell via creature_addon
|
||||
#define SPELL_BLIZZARD 31266
|
||||
#define SPELL_PYROBLAST 31263
|
||||
#define SPELL_SUMMON_ELEMENTALS 31264
|
||||
|
||||
/** Thrall spells **/
|
||||
//Thrall spells
|
||||
#define SPELL_CHAIN_LIGHTNING 31330
|
||||
#define SPELL_SUMMON_DIRE_WOLF 31331
|
||||
|
||||
@@ -49,119 +49,53 @@ struct Wave
|
||||
};
|
||||
|
||||
static Wave AllianceWaves[]= // Waves that will be summoned in the Alliance Base
|
||||
{
|
||||
{ // Wave 1
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, 0, 0, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 2
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 3
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 4
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 5
|
||||
GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 6
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 7
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 8
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 180000, false
|
||||
},
|
||||
{ // All 8 Waves are summoned, summon Rage Winterchill, next few waves are for Anetheron
|
||||
RAGE_WINTERCHILL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true
|
||||
},
|
||||
{ // Wave 1
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, 0, 0, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 2
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 3
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 4
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 5
|
||||
CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 6
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 7
|
||||
CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, BANSHEE, BANSHEE, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 8
|
||||
GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 180000, false
|
||||
},
|
||||
{ // All 8 Waves are summoned, summon Anatheron
|
||||
ANETHERON, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true
|
||||
}
|
||||
{ // Rage Winterchill Wave 1-8
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, 0, 0, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 180000, false},
|
||||
// All 8 Waves are summoned, summon Rage Winterchill, next few waves are for Anetheron
|
||||
{RAGE_WINTERCHILL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true},
|
||||
// Anetheron Wave 1-8
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, 0, 0, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, BANSHEE, BANSHEE, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 180000, false},
|
||||
// All 8 Waves are summoned, summon Anatheron
|
||||
{ANETHERON, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true}
|
||||
};
|
||||
|
||||
static Wave HordeWaves[]= // Waves that are summoned in the Horde base
|
||||
{
|
||||
{ // Wave 1
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 2
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 3
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 4
|
||||
CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, NECROMANCER, NECROMANCER , 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 5
|
||||
GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 6
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, FROST_WYRM, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 7
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, FROST_WYRM, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 8
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, 180000, false
|
||||
},
|
||||
{ // All 8 Waves are summoned, summon Kaz'Rogal, next few waves are for Azgalor
|
||||
KAZROGAL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true
|
||||
},
|
||||
{ // Wave 1
|
||||
ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 2
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, FROST_WYRM, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 3
|
||||
GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 4
|
||||
GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 5
|
||||
FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 6
|
||||
NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 7
|
||||
GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, FEL_STALKER, FEL_STALKER, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, 0, 0, 0, 0, 0, 0, 120000, false
|
||||
},
|
||||
{ // Wave 8
|
||||
CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, FEL_STALKER, FEL_STALKER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, BANSHEE, BANSHEE, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 180000, false
|
||||
},
|
||||
{ // All 8 Waves are summoned, summon Azgalor
|
||||
AZGALOR, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true
|
||||
}
|
||||
{ // Kaz'Rogal Wave 1-8
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 120000, false},
|
||||
{CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, FROST_WYRM, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, FROST_WYRM, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, 180000, false},
|
||||
// All 8 Waves are summoned, summon Kaz'Rogal, next few waves are for Azgalor
|
||||
{KAZROGAL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true},
|
||||
// Azgalor Wave 1-8
|
||||
{ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, FROST_WYRM, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, GARGOYLE, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GHOUL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, 0, 0, 0, 0, 120000, false},
|
||||
{GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, 0, 0, 0, 0, 120000, false},
|
||||
{FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, FEL_STALKER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, 0, 0, 0, 0, 120000, false},
|
||||
{NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, NECROMANCER, BANSHEE, BANSHEE, BANSHEE, BANSHEE, BANSHEE, BANSHEE, 0, 0, 0, 0, 120000, false},
|
||||
{GHOUL, GHOUL, CRYPT_FIEND, CRYPT_FIEND, FEL_STALKER, FEL_STALKER, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, GIANT_INFERNAL, 0, 0, 0, 0, 0, 0, 120000, false},
|
||||
{CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, CRYPT_FIEND, FEL_STALKER, FEL_STALKER, ABOMINATION, ABOMINATION, ABOMINATION, ABOMINATION, BANSHEE, BANSHEE, BANSHEE, BANSHEE, NECROMANCER, NECROMANCER, 0, 0, 180000, false},
|
||||
// All 8 Waves are summoned, summon Azgalor
|
||||
{AZGALOR, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, true}
|
||||
};
|
||||
|
||||
enum TargetType // Used in the spell cast system for the AI
|
||||
@@ -174,8 +108,7 @@ enum TargetType // Used in the spell
|
||||
struct Yells
|
||||
{
|
||||
uint32 id; // Used to determine the type of yell (attack, rally, etc)
|
||||
char* text; // The text to be yelled
|
||||
uint32 sound; // Sound that corresponds to the text
|
||||
int32 textid; // The text id to be yelled
|
||||
};
|
||||
|
||||
enum YellId
|
||||
@@ -191,29 +124,28 @@ enum YellId
|
||||
|
||||
static Yells JainaQuotes[]=
|
||||
{
|
||||
{ATTACKED, "I'm in jeopardy, help me if you can!", 11007},
|
||||
{ATTACKED, "They've broken through!", 11049},
|
||||
{INCOMING, "Stay alert! Another wave approaches.", 11008},
|
||||
{BEGIN, "Hold them back as long as possible", 11050},
|
||||
{RALLY, "Don't give up! We must prevail!", 11006},
|
||||
{RALLY, "We must hold strong!", 11051},
|
||||
{FAILURE, "We are lost. Fall back!", 11009},
|
||||
{SUCCESS, "We have won valuable time. Now we must pull back!", 11011},
|
||||
{DEATH, "I did... my best.", 11010},
|
||||
{ATTACKED, -1534000},
|
||||
{ATTACKED, -1534001},
|
||||
{INCOMING, -1534002},
|
||||
{BEGIN, -1534003},
|
||||
{RALLY, -1534004},
|
||||
{RALLY, -1534005},
|
||||
{FAILURE, -1534006},
|
||||
{SUCCESS, -1534007},
|
||||
{DEATH, -1534008},
|
||||
};
|
||||
|
||||
static Yells ThrallQuotes[]=
|
||||
{
|
||||
{ATTACKED, "I will lie down for no one!", 11031},
|
||||
{ATTACKED, "Bring the fight to me and pay with your lives!", 11061},
|
||||
{INCOMING, "Make ready for another wave! LOK-TAR OGAR!", 11032},
|
||||
{BEGIN, "Do not give an inch of ground!", 11060},
|
||||
{RALLY, "Hold them back! Do not falter!", 11030},
|
||||
{RALLY, "Victory or death!", 11059},
|
||||
{RALLY, "Do not give an inch of ground!", 11060},
|
||||
{FAILURE, "It is over. Withdraw! We have failed.", 11033},
|
||||
{SUCCESS, "We have played our part and done well. It is up to the others now.", 11035},
|
||||
{DEATH, "Uraaa...", 11034},
|
||||
{ATTACKED, -1534009},
|
||||
{ATTACKED, -1534010},
|
||||
{INCOMING, -1534011},
|
||||
{BEGIN, -1534012},
|
||||
{RALLY, -1534013},
|
||||
{RALLY, -1534014},
|
||||
{FAILURE, -1534015},
|
||||
{SUCCESS, -1534016},
|
||||
{DEATH, -1534017},
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL hyjalAI : public ScriptedAI
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -37,7 +37,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
|
||||
{
|
||||
instance_mount_hyjal(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_mount_hyjal(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint64 RageWinterchill;
|
||||
uint64 Anetheron;
|
||||
@@ -125,6 +125,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
|
||||
break;
|
||||
}
|
||||
|
||||
debug_log("SD2: Instance Hyjal: Instance data updated for event %u (Data=%u)",type,data);
|
||||
|
||||
if(data == DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
@@ -156,9 +158,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
std::ostringstream stream;
|
||||
stream << Encounters[0] << " " << Encounters[1] << " "
|
||||
<< Encounters[2] << " " << Encounters[3] << " "
|
||||
<< Encounters[4];
|
||||
stream << Encounters[0] << " " << Encounters[1] << " " << Encounters[2] << " "
|
||||
<< Encounters[3] << " " << Encounters[4];
|
||||
char* out = new char[stream.str().length() + 1];
|
||||
strcpy(out, stream.str().c_str());
|
||||
if(out)
|
||||
@@ -170,18 +171,19 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void Load(const char* load)
|
||||
void Load(const char* in)
|
||||
{
|
||||
if(!load)
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(load);
|
||||
std::istringstream stream;
|
||||
stream >> Encounters[1] >> Encounters[2] >> Encounters[3] >> Encounters[4];
|
||||
for(uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
std::istringstream loadStream;
|
||||
loadStream.str(in);
|
||||
loadStream >> Encounters[0] >> Encounters[1] >> Encounters[2] >> Encounters[3] >> Encounters[4];
|
||||
for(uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||
if(Encounters[i] == IN_PROGRESS) // Do not load an encounter as IN_PROGRESS - reset it instead.
|
||||
Encounters[i] = NOT_STARTED;
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
|
||||
+10
-18
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_Luetenant_Drake
|
||||
SD%Complete: 70
|
||||
SDComment: Missing proper code for patrolling area after being spawned. Also script for GO (barrels)(missing Trinity support)
|
||||
SDComment: Missing proper code for patrolling area after being spawned. Script for GO (barrels) quest 10283
|
||||
SDCategory: Caverns of Time, Old Hillsbrad Foothills
|
||||
EndScriptData */
|
||||
|
||||
@@ -29,26 +29,18 @@ EndScriptData */
|
||||
## go_barrel_old_hillsbrad
|
||||
######*/
|
||||
|
||||
#define QUEST_ENTRY_DIVERSION 10283
|
||||
#define LODGE_QUEST_TRIGGER 20155
|
||||
|
||||
bool GOHello_go_barrel_old_hillsbrad(Player *player, GameObject* _GO)
|
||||
{
|
||||
ScriptedInstance* pInstance = ((ScriptedInstance*)_GO->GetInstanceData());
|
||||
ScriptedInstance* pInstance = (ScriptedInstance*)_GO->GetInstanceData();
|
||||
|
||||
if( pInstance )
|
||||
{
|
||||
if( pInstance->GetData(TYPE_BARREL_DIVERSION) != DONE )
|
||||
{
|
||||
pInstance->SetData(TYPE_BARREL_DIVERSION, IN_PROGRESS);
|
||||
}
|
||||
else if( pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE )
|
||||
{
|
||||
player->SummonCreature(17848,2128.43,71.01,64.42,1.74,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,1200000);
|
||||
if( player->GetQuestStatus(QUEST_ENTRY_DIVERSION) == QUEST_STATUS_INCOMPLETE )
|
||||
player->KilledMonster(LODGE_QUEST_TRIGGER,0);
|
||||
}
|
||||
}
|
||||
if (!pInstance)
|
||||
return false;
|
||||
|
||||
if (pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE)
|
||||
return false;
|
||||
|
||||
pInstance->SetData(TYPE_BARREL_DIVERSION, IN_PROGRESS);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,4 +13,5 @@
|
||||
#define TYPE_THRALL_PART4 6
|
||||
#define DATA_THRALL 7
|
||||
#define DATA_TARETHA 8
|
||||
#define WORLD_STATE_OH 2436
|
||||
#endif
|
||||
|
||||
+77
-20
@@ -16,15 +16,11 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Old_Hillsbrad
|
||||
SD%Complete: 60
|
||||
SD%Complete: 75
|
||||
SDComment: If thrall escort fail, all parts will reset. In future, save sub-parts and continue from last known.
|
||||
SDCategory: Caverns of Time, Old Hillsbrad Foothills
|
||||
EndScriptData */
|
||||
|
||||
/*
|
||||
-- UPDATE `gameobject_template` SET `ScriptName`='go_barrel_old_hillsbrad' WHERE `entry`=182589;
|
||||
*/
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_old_hillsbrad.h"
|
||||
|
||||
@@ -33,9 +29,14 @@ EndScriptData */
|
||||
#define THRALL_ENTRY 17876
|
||||
#define TARETHA_ENTRY 18887
|
||||
|
||||
#define DRAKE_ENTRY 17848
|
||||
|
||||
#define QUEST_ENTRY_DIVERSION 10283
|
||||
#define LODGE_QUEST_TRIGGER 20155
|
||||
|
||||
struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
|
||||
{
|
||||
instance_old_hillsbrad(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_old_hillsbrad(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
uint32 mBarrelCount;
|
||||
@@ -55,6 +56,43 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
|
||||
Encounter[i] = NOT_STARTED;
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("SD2: Instance Old Hillsbrad: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void UpdateOHWorldState()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* player = itr->getSource())
|
||||
{
|
||||
player->SendUpdateWorldState(WORLD_STATE_OH,mBarrelCount);
|
||||
|
||||
if (mBarrelCount == 5)
|
||||
player->KilledMonster(LODGE_QUEST_TRIGGER,0);
|
||||
}
|
||||
}
|
||||
}else
|
||||
debug_log("SD2: Instance Old Hillsbrad: UpdateOHWorldState, but PlayerList is empty!");
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 creature_entry)
|
||||
{
|
||||
switch(creature_entry)
|
||||
@@ -70,17 +108,36 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("SD2: Instance Old Hillsbrad: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_BARREL_DIVERSION:
|
||||
{
|
||||
if( mBarrelCount < 5 )
|
||||
{
|
||||
mBarrelCount++;
|
||||
debug_log("SD2: go_barrel_old_hillsbrad count %u",mBarrelCount);
|
||||
}
|
||||
else if( mBarrelCount >= 5 )
|
||||
Encounter[0] = DONE;
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
if (mBarrelCount >= 5)
|
||||
return;
|
||||
|
||||
++mBarrelCount;
|
||||
UpdateOHWorldState();
|
||||
|
||||
debug_log("SD2: Instance Old Hillsbrad: go_barrel_old_hillsbrad count %u",mBarrelCount);
|
||||
|
||||
if (mBarrelCount == 5)
|
||||
SetData(TYPE_BARREL_DIVERSION,DONE);
|
||||
}
|
||||
if (data == DONE)
|
||||
{
|
||||
player->SummonCreature(DRAKE_ENTRY,2128.43,71.01,64.42,1.74,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
|
||||
}
|
||||
Encounter[0] = data;
|
||||
break;
|
||||
}
|
||||
case TYPE_THRALL_EVENT:
|
||||
@@ -91,7 +148,7 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
|
||||
{
|
||||
mThrallEventCount++;
|
||||
Encounter[1] = NOT_STARTED;
|
||||
debug_log("SD2: Thrall event failed %u times. Resetting all sub-events.",mThrallEventCount);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event failed %u times. Resetting all sub-events.",mThrallEventCount);
|
||||
Encounter[2] = NOT_STARTED;
|
||||
Encounter[3] = NOT_STARTED;
|
||||
Encounter[4] = NOT_STARTED;
|
||||
@@ -104,29 +161,29 @@ struct TRINITY_DLL_DECL instance_old_hillsbrad : public ScriptedInstance
|
||||
Encounter[3] = data;
|
||||
Encounter[4] = data;
|
||||
Encounter[5] = data;
|
||||
debug_log("SD2: Thrall event failed %u times. Reset instance required.",mThrallEventCount);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event failed %u times. Resetting all sub-events.",mThrallEventCount);
|
||||
}
|
||||
}
|
||||
else
|
||||
Encounter[1] = data;
|
||||
debug_log("SD2: Thrall escort event adjusted to data %u.",data);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall escort event adjusted to data %u.",data);
|
||||
break;
|
||||
}
|
||||
case TYPE_THRALL_PART1:
|
||||
Encounter[2] = data;
|
||||
debug_log("SD2: Thrall event part I adjusted to data %u.",data);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event part I adjusted to data %u.",data);
|
||||
break;
|
||||
case TYPE_THRALL_PART2:
|
||||
Encounter[3] = data;
|
||||
debug_log("SD2: Thrall event part II adjusted to data %u.",data);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event part II adjusted to data %u.",data);
|
||||
break;
|
||||
case TYPE_THRALL_PART3:
|
||||
Encounter[4] = data;
|
||||
debug_log("SD2: Thrall event part III adjusted to data %u.",data);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event part III adjusted to data %u.",data);
|
||||
break;
|
||||
case TYPE_THRALL_PART4:
|
||||
Encounter[5] = data;
|
||||
debug_log("SD2: Thrall event part IV adjusted to data %u.",data);
|
||||
debug_log("SD2: Instance Old Hillsbrad: Thrall event part IV adjusted to data %u.",data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+187
-240
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Old_Hillsbrad
|
||||
SD%Complete: 40
|
||||
SDComment: All friendly NPC's. Thrall waypoints fairly complete, missing many details, but possible to complete escort.
|
||||
SDComment: Quest support: 10283, 10284. All friendly NPC's. Thrall waypoints fairly complete, missing many details, but possible to complete escort.
|
||||
SDCategory: Caverns of Time, Old Hillsbrad Foothills
|
||||
EndScriptData */
|
||||
|
||||
@@ -96,10 +96,10 @@ bool GossipSelect_npc_erozion(Player *player, Creature *_Creature, uint32 sender
|
||||
if( action == GOSSIP_ACTION_INFO_DEF+1 )
|
||||
{
|
||||
ItemPosCountVec dest;
|
||||
uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, ITEM_ENTRY_BOMBS, 1, false);
|
||||
uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_ENTRY_BOMBS, 1);
|
||||
if( msg == EQUIP_ERR_OK )
|
||||
{
|
||||
player->StoreNewItem( dest, ITEM_ENTRY_BOMBS, 1, true);
|
||||
player->StoreNewItem(dest, ITEM_ENTRY_BOMBS, true);
|
||||
}
|
||||
player->SEND_GOSSIP_MENU(9515, _Creature->GetGUID());
|
||||
}
|
||||
@@ -114,6 +114,47 @@ bool GossipSelect_npc_erozion(Player *player, Creature *_Creature, uint32 sender
|
||||
## npc_thrall_old_hillsbrad
|
||||
######*/
|
||||
|
||||
//Thrall texts
|
||||
#define SAY_TH_START_EVENT_PART1 -1560023
|
||||
#define SAY_TH_ARMORY -1560024
|
||||
#define SAY_TH_SKARLOC_MEET -1560025
|
||||
#define SAY_TH_SKARLOC_TAUNT -1560026
|
||||
#define SAY_TH_START_EVENT_PART2 -1560027
|
||||
#define SAY_TH_MOUNTS_UP -1560028
|
||||
#define SAY_TH_CHURCH_END -1560029
|
||||
#define SAY_TH_MEET_TARETHA -1560030
|
||||
#define SAY_TH_EPOCH_WONDER -1560031
|
||||
#define SAY_TH_EPOCH_KILL_TARETHA -1560032
|
||||
#define SAY_TH_EVENT_COMPLETE -1560033
|
||||
|
||||
#define SAY_TH_RANDOM_LOW_HP1 -1560034
|
||||
#define SAY_TH_RANDOM_LOW_HP2 -1560035
|
||||
|
||||
#define SAY_TH_RANDOM_DIE1 -1560036
|
||||
#define SAY_TH_RANDOM_DIE2 -1560037
|
||||
|
||||
#define SAY_TH_RANDOM_AGGRO1 -1560038
|
||||
#define SAY_TH_RANDOM_AGGRO2 -1560039
|
||||
#define SAY_TH_RANDOM_AGGRO3 -1560040
|
||||
#define SAY_TH_RANDOM_AGGRO4 -1560041
|
||||
|
||||
#define SAY_TH_RANDOM_KILL1 -1560042
|
||||
#define SAY_TH_RANDOM_KILL2 -1560043
|
||||
#define SAY_TH_RANDOM_KILL3 -1560044
|
||||
|
||||
#define SAY_TH_LEAVE_COMBAT1 -1560045
|
||||
#define SAY_TH_LEAVE_COMBAT2 -1560046
|
||||
#define SAY_TH_LEAVE_COMBAT3 -1560047
|
||||
|
||||
//Taretha texts
|
||||
#define SAY_TA_FREE -1560048
|
||||
#define SAY_TA_ESCAPED -1560049
|
||||
|
||||
//Misc for Thrall
|
||||
#define SPELL_STRIKE 14516
|
||||
#define SPELL_SHIELD_BLOCK 12169
|
||||
#define SPELL_SUMMON_EROZION_IMAGE 33954 //if thrall dies during escort?
|
||||
|
||||
#define SPEED_WALK (0.5f)
|
||||
#define SPEED_RUN (1.0f)
|
||||
#define SPEED_MOUNT (1.6f)
|
||||
@@ -125,6 +166,10 @@ bool GossipSelect_npc_erozion(Player *player, Creature *_Creature, uint32 sender
|
||||
#define THRALL_MODEL_UNEQUIPPED 17292
|
||||
#define THRALL_MODEL_EQUIPPED 18165
|
||||
|
||||
//Misc creature entries
|
||||
#define ENTRY_ARMORER 18764
|
||||
#define ENTRY_SCARLOC 17862
|
||||
|
||||
#define MOB_ENTRY_RIFLE 17820
|
||||
#define MOB_ENTRY_WARDEN 17833
|
||||
#define MOB_ENTRY_VETERAN 17860
|
||||
@@ -146,7 +191,9 @@ bool GossipSelect_npc_erozion(Player *player, Creature *_Creature, uint32 sender
|
||||
#define SKARLOC_MOUNT 18798
|
||||
#define SKARLOC_MOUNT_MODEL 18223
|
||||
#define EROZION_ENTRY 18723
|
||||
#define ENTRY_EPOCH 18096
|
||||
|
||||
//gossip items
|
||||
#define GOSSIP_ID_START 9568
|
||||
#define GOSSIP_ID_SKARLOC1 9614 //I'm glad Taretha is alive. We now must find a way to free her...
|
||||
#define GOSSIP_ITEM_SKARLOC1 "Taretha cannot see you, Thrall."
|
||||
@@ -159,65 +206,6 @@ bool GossipSelect_npc_erozion(Player *player, Creature *_Creature, uint32 sender
|
||||
|
||||
#define GOSSIP_ID_COMPLETE 9578 //Thank you friends, I owe my freedom to you. Where is Taretha? I hoped to see her
|
||||
|
||||
#define THRALL_START_EVENT_PART1 "Very well then. Let's go!"
|
||||
#define SOUND_START_EVENT 10465
|
||||
|
||||
#define THRALL_SAY_ARMOR "As long as we're going with a new plan, I may aswell pick up a weapon and some armor."
|
||||
|
||||
#define THRALL_SKARLOC_MEET "A rider approaches!"
|
||||
#define SOUND_SKARLOC_MEET 10466
|
||||
#define THRALL_SKARLOC_TAUNT "I'll never be chained again!"
|
||||
#define SOUND_SKARLOC_TAUNT 10467
|
||||
|
||||
#define THRALL_START_EVENT_PART2 "Very well. Tarren Mill lies just west of here. Since time is of the essence..."
|
||||
#define SOUND_START_EVENT_PART2 10468
|
||||
#define THRALL_MOUNTS_UP "Let's ride!"
|
||||
#define SOUND_MOUNTS_UP 10469
|
||||
|
||||
#define THRALL_CHURCH_END "Taretha must be in the inn. Let's go."
|
||||
#define THRALL_MEET_TARETHA "Taretha! What foul magic is this?"
|
||||
|
||||
#define THRALL_EPOCH_WONDER "Who or what was that?"
|
||||
#define SOUND_EPOCH_WONDER 10470
|
||||
#define THRALL_EPOCH_KILL_TARETHA "No!"
|
||||
#define SOUND_EPOCH_KILL_TARETHA 10471
|
||||
|
||||
#define THRALL_EVENT_COMPLETE "Goodbye, Taretha. I will never forget your kindness."
|
||||
#define SOUND_EVENT_COMPLETE 10472
|
||||
|
||||
#define THRALL_RANDOM_LOW_HP1 "Things are looking grim..."
|
||||
#define SOUND_RANDOM_LOW_HP1 10458
|
||||
#define THRALL_RANDOM_LOW_HP2 "I will fight to the last!"
|
||||
#define SOUND_RANDOM_LOW_HP2 10459
|
||||
|
||||
#define THRALL_RANDOM_DIE1 "Taretha..."
|
||||
#define SOUND_RANDOM_DIE1 10460
|
||||
#define THRALL_RANDOM_DIE2 "A good day...to die..."
|
||||
#define SOUND_RANDOM_DIE2 10461
|
||||
|
||||
#define THRALL_RANDOM_AGGRO1 "I have earned my freedom!"
|
||||
#define SOUND_RANDOM_AGGRO1 10448
|
||||
#define THRALL_RANDOM_AGGRO2 "This day is long overdue. Out of my way!"
|
||||
#define SOUND_RANDOM_AGGRO2 10449
|
||||
#define THRALL_RANDOM_AGGRO3 "I am a slave no longer!"
|
||||
#define SOUND_RANDOM_AGGRO3 10450
|
||||
#define THRALL_RANDOM_AGGRO4 "Blackmoore has much to answer for!"
|
||||
#define SOUND_RANDOM_AGGRO4 10451
|
||||
|
||||
#define THRALL_RANDOM_KILL1 "You have forced my hand!"
|
||||
#define SOUND_RANDOM_KILL1 10452
|
||||
#define THRALL_RANDOM_KILL2 "It should not have come to this!"
|
||||
#define SOUND_RANDOM_KILL2 10453
|
||||
#define THRALL_RANDOM_KILL3 "I did not ask for this!"
|
||||
#define SOUND_RANDOM_KILL3 10454
|
||||
|
||||
#define THRALL_LEAVE_COMBAT1 "I am truly in your debt, strangers."
|
||||
#define SOUND_LEAVE_COMBAT1 10455
|
||||
#define THRALL_LEAVE_COMBAT2 "Thank you, strangers. You have given me hope."
|
||||
#define SOUND_LEAVE_COMBAT2 10456
|
||||
#define THRALL_LEAVE_COMBAT3 "I will not waste this chance. I will seek out my destiny."
|
||||
#define SOUND_LEAVE_COMBAT3 10457
|
||||
|
||||
struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
{
|
||||
npc_thrall_old_hillsbradAI(Creature *c) : npc_escortAI(c)
|
||||
@@ -226,24 +214,27 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
Creature* sum;
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint64 TarethaGUID;
|
||||
|
||||
bool LowHp;
|
||||
bool HadMount;
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
switch( i )
|
||||
if (!pInstance)
|
||||
return;
|
||||
|
||||
switch( i )
|
||||
{
|
||||
case 8:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
sum = m_creature->SummonCreature(18764,2181.87,112.46,89.45,0.26,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(18764,2181.87,112.46,89.45,0.26,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 9:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
DoSay(THRALL_SAY_ARMOR, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_TH_ARMORY, m_creature);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, THRALL_WEAPON_MODEL);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, THRALL_WEAPON_INFO);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+1, 781);
|
||||
@@ -258,41 +249,27 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
break;
|
||||
case 15:
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_RIFLE,2200.28,137.37,87.93,5.07,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_WARDEN,2197.44,131.83,87.93,0.78,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2203.62,135.40,87.93,3.70,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2200.75,130.13,87.93,1.48,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_RIFLE,2200.28,137.37,87.93,5.07,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_WARDEN,2197.44,131.83,87.93,0.78,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2203.62,135.40,87.93,3.70,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2200.75,130.13,87.93,1.48,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 21:
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_RIFLE,2135.80,154.01,67.45,4.98,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_WARDEN,2144.36,151.87,67.74,4.46,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2142.12,154.41,67.12,4.56,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2138.08,155.38,67.24,4.60,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_RIFLE,2135.80,154.01,67.45,4.98,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_WARDEN,2144.36,151.87,67.74,4.46,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2142.12,154.41,67.12,4.56,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2138.08,155.38,67.24,4.60,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 25:
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_RIFLE,2102.98,192.17,65.24,6.02,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_WARDEN,2108.48,198.75,65.18,5.15,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2106.11,197.29,65.18,5.63,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_VETERAN,2104.18,194.82,65.18,5.75,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_RIFLE,2102.98,192.17,65.24,6.02,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_WARDEN,2108.48,198.75,65.18,5.15,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2106.11,197.29,65.18,5.63,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_VETERAN,2104.18,194.82,65.18,5.75,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 29:
|
||||
DoSay(THRALL_SKARLOC_MEET, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_SKARLOC_MEET);
|
||||
sum = m_creature->SummonCreature(17862,2036.48,271.22,63.43,5.27,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
|
||||
//temporary,skarloc should rather be triggered to walk up to thrall
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
DoScriptText(SAY_TH_SKARLOC_MEET, m_creature);
|
||||
m_creature->SummonCreature(17862,2036.48,271.22,63.43,5.27,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000);
|
||||
//temporary,skarloc should rather be triggered to walk up to thrall
|
||||
break;
|
||||
case 30:
|
||||
IsOnHold = true;
|
||||
@@ -300,19 +277,15 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
break;
|
||||
case 31:
|
||||
DoSay(THRALL_MOUNTS_UP, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_MOUNTS_UP);
|
||||
DoScriptText(SAY_TH_MOUNTS_UP, m_creature);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
|
||||
DoMount();
|
||||
break;
|
||||
case 37:
|
||||
//possibly regular patrollers? If so, remove this and let database handle them
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_WATCHMAN,2124.26,522.16,56.87,3.99,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_WATCHMAN,2121.69,525.37,57.11,4.01,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_SENTRY,2124.65,524.55,56.63,3.98,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_WATCHMAN,2124.26,522.16,56.87,3.99,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_WATCHMAN,2121.69,525.37,57.11,4.01,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_SENTRY,2124.65,524.55,56.63,3.98,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 59:
|
||||
m_creature->SummonCreature(SKARLOC_MOUNT,2488.64,625.77,58.26,4.71,TEMPSUMMON_TIMED_DESPAWN,10000);
|
||||
@@ -324,8 +297,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
//make horsie run off
|
||||
IsOnHold = true;
|
||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
if( pInstance )
|
||||
pInstance->SetData(TYPE_THRALL_PART2, DONE);
|
||||
pInstance->SetData(TYPE_THRALL_PART2, DONE);
|
||||
break;
|
||||
case 64:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
@@ -343,83 +315,81 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
break;
|
||||
case 83:
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_CHURCH_PROTECTOR,2627.33,646.82,56.03,4.28,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_CHURCH_LOOKOUT,2624.14,648.03,56.03,4.50,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN,2625.32,649.60,56.03,4.38,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN,2627.22,649.00,56.03,4.34,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_CHURCH_PROTECTOR,2627.33,646.82,56.03,4.28,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_CHURCH_LOOKOUT,2624.14,648.03,56.03,4.50,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN,2625.32,649.60,56.03,4.38,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN,2627.22,649.00,56.03,4.34,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,5000);
|
||||
break;
|
||||
case 84:
|
||||
DoSay(THRALL_CHURCH_END, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_TH_CHURCH_END, m_creature);
|
||||
break;
|
||||
case 91:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
break;
|
||||
case 93:
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_INN_PROTECTOR,2652.71,660.31,61.93,1.67,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_INN_LOOKOUT,2648.96,662.59,61.93,0.79,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_INN_GUARDSMAN,2657.36,662.34,61.93,2.68,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
sum = m_creature->SummonCreature(MOB_ENTRY_INN_GUARDSMAN,2656.39,659.77,61.93,2.61,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
if( sum ) sum->AI()->AttackStart(m_creature);
|
||||
m_creature->SummonCreature(MOB_ENTRY_INN_PROTECTOR,2652.71,660.31,61.93,1.67,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_INN_LOOKOUT,2648.96,662.59,61.93,0.79,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_INN_GUARDSMAN,2657.36,662.34,61.93,2.68,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
m_creature->SummonCreature(MOB_ENTRY_INN_GUARDSMAN,2656.39,659.77,61.93,2.61,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,5000);
|
||||
break;
|
||||
case 94:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
//trigger taretha Say("Thrall, you escaped!")
|
||||
if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA))
|
||||
{
|
||||
if (Unit* Taretha = Unit::GetUnit((*m_creature), TarethaGUID))
|
||||
DoScriptText(SAY_TA_ESCAPED, Taretha, m_creature);
|
||||
}
|
||||
break;
|
||||
case 95:
|
||||
DoSay(THRALL_MEET_TARETHA, LANG_UNIVERSAL, NULL);
|
||||
if( pInstance )
|
||||
pInstance->SetData(TYPE_THRALL_PART3,DONE);
|
||||
DoScriptText(SAY_TH_MEET_TARETHA, m_creature);
|
||||
pInstance->SetData(TYPE_THRALL_PART3,DONE);
|
||||
IsOnHold = true;
|
||||
break;
|
||||
case 96:
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
|
||||
DoYell(THRALL_EPOCH_WONDER, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_EPOCH_WONDER);
|
||||
DoScriptText(SAY_TH_EPOCH_WONDER, m_creature);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
|
||||
break;
|
||||
case 97:
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
|
||||
DoYell(THRALL_EPOCH_KILL_TARETHA, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_EPOCH_KILL_TARETHA);
|
||||
DoScriptText(SAY_TH_EPOCH_KILL_TARETHA, m_creature);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
break;
|
||||
case 98:
|
||||
//trigger epoch Yell("Thrall! Come outside and face your fate! ....")
|
||||
//from here, thrall should not never be allowed to move to point 106 which he currently does.
|
||||
break;
|
||||
case 106:
|
||||
{
|
||||
//trigger taretha to run down outside
|
||||
/*if( pInstance )
|
||||
uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA);
|
||||
if( TarethaGUID )
|
||||
{
|
||||
Creature* Taretha = ((Creature*)Unit::GetUnit((*m_creature), TarethaGUID));
|
||||
if( Taretha )
|
||||
((npc_escortAI*)(Taretha->AI()))->Start(false, false, true, 0);
|
||||
}*/
|
||||
if (!PlayerGUID)
|
||||
break;
|
||||
|
||||
if( PlayerGUID )
|
||||
{
|
||||
Unit* player = ((Creature*)Unit::GetUnit((*m_creature), PlayerGUID));
|
||||
if( player && player->GetTypeId() == TYPEID_PLAYER )
|
||||
((Player*)player)->KilledMonster(20156,m_creature->GetGUID());
|
||||
}
|
||||
//trigger taretha to run down outside
|
||||
if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA))
|
||||
{
|
||||
if (Creature* Taretha = ((Creature*)Unit::GetUnit(*m_creature, TarethaGUID)))
|
||||
((npc_escortAI*)(Taretha->AI()))->Start(false, false, true, PlayerGUID);
|
||||
}
|
||||
|
||||
//alot will happen here, thrall and taretha talk, erozion appear at spot to explain
|
||||
m_creature->SummonCreature(EROZION_ENTRY,2646.47,680.416,55.38,4.16,TEMPSUMMON_TIMED_DESPAWN,120000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//kill credit creature for quest
|
||||
Map *map = m_creature->GetMap();
|
||||
Map::PlayerList const& players = map->GetPlayers();
|
||||
if (!players.isEmpty() && map->IsDungeon())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* pPlayer = itr->getSource())
|
||||
pPlayer->KilledMonster(20156,m_creature->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
//alot will happen here, thrall and taretha talk, erozion appear at spot to explain
|
||||
m_creature->SummonCreature(EROZION_ENTRY,2646.47,680.416,55.38,4.16,TEMPSUMMON_TIMED_DESPAWN,120000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Reset()
|
||||
{
|
||||
sum = NULL;
|
||||
LowHp = false;
|
||||
|
||||
if( HadMount )
|
||||
@@ -441,18 +411,9 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(THRALL_LEAVE_COMBAT1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_LEAVE_COMBAT1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(THRALL_LEAVE_COMBAT2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_LEAVE_COMBAT2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(THRALL_LEAVE_COMBAT3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_LEAVE_COMBAT3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TH_LEAVE_COMBAT1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TH_LEAVE_COMBAT2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_TH_LEAVE_COMBAT3, m_creature); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -476,22 +437,10 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
{
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoYell(THRALL_RANDOM_AGGRO1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_AGGRO1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(THRALL_RANDOM_AGGRO2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_AGGRO2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(THRALL_RANDOM_AGGRO3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_AGGRO3);
|
||||
break;
|
||||
case 3:
|
||||
DoYell(THRALL_RANDOM_AGGRO4,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_AGGRO4);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TH_RANDOM_AGGRO1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TH_RANDOM_AGGRO2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_TH_RANDOM_AGGRO3, m_creature); break;
|
||||
case 3: DoScriptText(SAY_TH_RANDOM_AGGRO4, m_creature); break;
|
||||
}
|
||||
if( m_creature->IsMounted() )
|
||||
{
|
||||
@@ -499,39 +448,43 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
HadMount = true;
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
switch(summoned->GetEntry())
|
||||
{
|
||||
//TODO: make Scarloc start into event instead, and not start attack directly
|
||||
case MOB_ENTRY_BARN_GUARDSMAN:
|
||||
case MOB_ENTRY_BARN_PROTECTOR:
|
||||
case MOB_ENTRY_BARN_LOOKOUT:
|
||||
case SKARLOC_MOUNT:
|
||||
case EROZION_ENTRY:
|
||||
break;
|
||||
default:
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(THRALL_RANDOM_KILL1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_KILL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(THRALL_RANDOM_KILL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_KILL2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(THRALL_RANDOM_KILL3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_KILL3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TH_RANDOM_KILL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TH_RANDOM_KILL2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_TH_RANDOM_KILL3, m_creature); break;
|
||||
}
|
||||
}
|
||||
void JustDied(Unit *slayer)
|
||||
{
|
||||
if(slayer == m_creature) // Don't do a yell if he kills self (if player goes too far or at the end).
|
||||
// Don't do a yell if he kills self (if player goes too far or at the end).
|
||||
if(slayer == m_creature)
|
||||
return;
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(THRALL_RANDOM_DIE1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_DIE1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(THRALL_RANDOM_DIE2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_DIE2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TH_RANDOM_DIE1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TH_RANDOM_DIE2, m_creature); break;
|
||||
}
|
||||
if( pInstance )
|
||||
pInstance->SetData(TYPE_THRALL_EVENT,FAIL);
|
||||
@@ -540,26 +493,19 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
|
||||
if( InCombat && m_creature->getVictim() )
|
||||
{
|
||||
//add his abilities'n-crap here
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//TODO: add his abilities'n-crap here
|
||||
if( !LowHp && ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 20) )
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(THRALL_RANDOM_LOW_HP1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_LOW_HP1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(THRALL_RANDOM_LOW_HP2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RANDOM_LOW_HP2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_TH_RANDOM_LOW_HP1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_TH_RANDOM_LOW_HP2, m_creature); break;
|
||||
}
|
||||
LowHp = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -727,17 +673,18 @@ bool GossipHello_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature)
|
||||
ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData());
|
||||
if( pInstance )
|
||||
{
|
||||
//if( pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE && pInstance->GetData(TYPE_THRALL_EVENT) == NOT_STARTED )
|
||||
if( pInstance->GetData(TYPE_THRALL_EVENT) == NOT_STARTED )
|
||||
if( pInstance->GetData(TYPE_BARREL_DIVERSION) == DONE && pInstance->GetData(TYPE_THRALL_EVENT) == NOT_STARTED )
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM( 0, "[PH] Start walking.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||
player->SEND_GOSSIP_MENU(GOSSIP_ID_START, _Creature->GetGUID());
|
||||
}
|
||||
|
||||
if( pInstance->GetData(TYPE_THRALL_PART1) == DONE && !pInstance->GetData(TYPE_THRALL_PART2) )
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_SKARLOC1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
|
||||
player->SEND_GOSSIP_MENU(GOSSIP_ID_SKARLOC1, _Creature->GetGUID());
|
||||
}
|
||||
|
||||
if( pInstance->GetData(TYPE_THRALL_PART2) == DONE && !pInstance->GetData(TYPE_THRALL_PART3) )
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_TARREN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
|
||||
@@ -757,8 +704,7 @@ bool GossipSelect_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature,
|
||||
pInstance->SetData(TYPE_THRALL_EVENT,IN_PROGRESS);
|
||||
pInstance->SetData(TYPE_THRALL_PART1,IN_PROGRESS);
|
||||
|
||||
_Creature->Say(THRALL_START_EVENT_PART1, LANG_UNIVERSAL, 0);
|
||||
((npc_thrall_old_hillsbradAI*)_Creature->AI())->DoPlaySoundToSet(_Creature,SOUND_START_EVENT);
|
||||
DoScriptText(SAY_TH_START_EVENT_PART1, _Creature);
|
||||
|
||||
((npc_escortAI*)(_Creature->AI()))->Start(true, true, true, player->GetGUID());
|
||||
break;
|
||||
@@ -773,8 +719,7 @@ bool GossipSelect_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature,
|
||||
_Creature->SummonCreature(SKARLOC_MOUNT,2038.81,270.26,63.20,5.41,TEMPSUMMON_TIMED_DESPAWN,12000);
|
||||
pInstance->SetData(TYPE_THRALL_PART2,IN_PROGRESS);
|
||||
|
||||
_Creature->Say(THRALL_START_EVENT_PART2, LANG_UNIVERSAL, 0);
|
||||
((npc_thrall_old_hillsbradAI*)_Creature->AI())->DoPlaySoundToSet(_Creature,SOUND_START_EVENT_PART2);
|
||||
DoScriptText(SAY_TH_START_EVENT_PART2, _Creature);
|
||||
|
||||
((npc_thrall_old_hillsbradAI*)_Creature->AI())->StartWP();
|
||||
break;
|
||||
@@ -797,8 +742,6 @@ bool GossipSelect_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature,
|
||||
#define GOSSIP_ID_EPOCH2 9613 //Yes, friends. This man was no wizard of
|
||||
#define GOSSIP_ITEM_EPOCH2 "We'll get you out. Taretha. Don't worry. I doubt the wizard would wander too far away."
|
||||
|
||||
#define TARETHA_FREE "I'm free! Thank you all!"
|
||||
|
||||
struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI
|
||||
{
|
||||
npc_tarethaAI(Creature *c) : npc_escortAI(c)
|
||||
@@ -814,7 +757,7 @@ struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI
|
||||
switch( i )
|
||||
{
|
||||
case 6:
|
||||
m_creature->Say(TARETHA_FREE, LANG_UNIVERSAL, 0);
|
||||
DoScriptText(SAY_TA_FREE, m_creature);
|
||||
break;
|
||||
case 7:
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
|
||||
@@ -824,6 +767,10 @@ struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI
|
||||
void Reset() {}
|
||||
void Aggro(Unit* who) {}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_npc_taretha(Creature *_Creature)
|
||||
{
|
||||
@@ -867,18 +814,17 @@ bool GossipSelect_npc_taretha(Player *player, Creature *_Creature, uint32 sender
|
||||
if( pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS )
|
||||
{
|
||||
pInstance->SetData(TYPE_THRALL_PART4,IN_PROGRESS);
|
||||
_Creature->SummonCreature(18096,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
|
||||
_Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
|
||||
|
||||
uint64 ThrallGUID = pInstance->GetData64(DATA_THRALL);
|
||||
if(ThrallGUID)
|
||||
{
|
||||
Creature* Thrall = ((Creature*)Unit::GetUnit((*_Creature), ThrallGUID));
|
||||
if(Thrall)
|
||||
((npc_thrall_old_hillsbradAI*)Thrall->AI())->StartWP();
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
if (uint64 ThrallGUID = pInstance->GetData64(DATA_THRALL))
|
||||
{
|
||||
Creature* Thrall = ((Creature*)Unit::GetUnit((*_Creature), ThrallGUID));
|
||||
if(Thrall)
|
||||
((npc_thrall_old_hillsbradAI*)Thrall->AI())->StartWP();
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
@@ -912,5 +858,6 @@ void AddSC_old_hillsbrad()
|
||||
newscript->Name="npc_taretha";
|
||||
newscript->pGossipHello = &GossipHello_npc_taretha;
|
||||
newscript->pGossipSelect = &GossipSelect_npc_taretha;
|
||||
newscript->GetAI = &GetAI_npc_taretha;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
+294
-24
@@ -16,7 +16,7 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_the_lurker_below
|
||||
SD%Complete: 10
|
||||
SD%Complete: 80
|
||||
SDComment:
|
||||
SDCategory: The Lurker Below
|
||||
EndScriptData */
|
||||
@@ -27,7 +27,8 @@ EndScriptData */
|
||||
#include "Spell.h"
|
||||
|
||||
#define SPELL_SPOUT 37433
|
||||
#define SPELL_SPOUT_2 42835
|
||||
#define SPELL_SPOUT_ANIM 42835
|
||||
#define SPELL_SPOUT_BREATH 37431
|
||||
#define SPELL_KNOCKBACK 19813
|
||||
#define SPELL_GEYSER 37478
|
||||
#define SPELL_WHIRL 37660
|
||||
@@ -37,6 +38,8 @@ EndScriptData */
|
||||
|
||||
#define EMOTE_SPOUT "takes a deep breath."
|
||||
|
||||
#define SPOUT_DIST 100
|
||||
|
||||
#define MOB_COILFANG_GUARDIAN 21873
|
||||
#define MOB_COILFANG_AMBUSHER 21865
|
||||
|
||||
@@ -48,30 +51,297 @@ EndScriptData */
|
||||
#define SPELL_ARCINGSMASH 38761 // Wrong SpellId. Can't find the right one.
|
||||
#define SPELL_HAMSTRING 26211
|
||||
|
||||
struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public ScriptedAI
|
||||
float AddPos[9][3] =
|
||||
{
|
||||
boss_the_lurker_belowAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
|
||||
}
|
||||
{2.8553810, -459.823914, -19.182686}, //MOVE_AMBUSHER_1 X, Y, Z
|
||||
{12.400000, -466.042267, -19.182686}, //MOVE_AMBUSHER_2 X, Y, Z
|
||||
{51.366653, -460.836060, -19.182686}, //MOVE_AMBUSHER_3 X, Y, Z
|
||||
{62.597980, -457.433044, -19.182686}, //MOVE_AMBUSHER_4 X, Y, Z
|
||||
{77.607452, -384.302765, -19.182686}, //MOVE_AMBUSHER_5 X, Y, Z
|
||||
{63.897900, -378.984924, -19.182686}, //MOVE_AMBUSHER_6 X, Y, Z
|
||||
{34.447250, -387.333618, -19.182686}, //MOVE_GUARDIAN_1 X, Y, Z
|
||||
{14.388216, -423.468018, -19.625271}, //MOVE_GUARDIAN_2 X, Y, Z
|
||||
{42.471519, -445.115295, -19.769423} //MOVE_GUARDIAN_3 X, Y, Z
|
||||
};
|
||||
|
||||
enum RotationType
|
||||
{
|
||||
NOROTATE = 0,
|
||||
CLOCKWISE = 1,
|
||||
COUNTERCLOCKWISE = 2,
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
|
||||
{
|
||||
boss_the_lurker_belowAI(Creature *c) : Scripted_NoMovementAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_SPOUT_ANIM);
|
||||
if(TempSpell)
|
||||
{
|
||||
TempSpell->Effect[0] = 0;//remove all spell effect, only anim is needed
|
||||
TempSpell->Effect[1] = 0;
|
||||
TempSpell->Effect[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
bool Spawned;
|
||||
uint32 RotTimer;
|
||||
uint8 RotType;
|
||||
double SpoutAngle;
|
||||
uint32 SpoutAnimTimer;
|
||||
bool Submerged;
|
||||
|
||||
uint32 WaterboltTimer;
|
||||
uint32 SpoutTimer;
|
||||
uint32 WhirlTimer;//after avery spout
|
||||
uint32 PhaseTimer;
|
||||
uint32 GeyserTimer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetCorpseDelay(1000*60*60);
|
||||
SpoutAngle = 0;
|
||||
RotType = NOROTATE;
|
||||
SpoutAnimTimer = 1000;
|
||||
RotTimer = 20000;
|
||||
Submerged = false;
|
||||
Spawned = false;
|
||||
|
||||
WaterboltTimer = 3000;
|
||||
SpoutTimer = 15000;
|
||||
WhirlTimer = 18000;//after avery spout
|
||||
PhaseTimer = 120000;
|
||||
GeyserTimer = rand()%5000 + 15000;
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!who || m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(who))
|
||||
{
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, IN_PROGRESS);
|
||||
|
||||
if (!who || m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(who))
|
||||
{
|
||||
float attackRadius = m_creature->GetAttackDistance(who);
|
||||
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who))
|
||||
AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_THELURKERBELOWEVENT, DONE);
|
||||
}
|
||||
|
||||
void Rotate(const uint32 diff)
|
||||
{
|
||||
bool Spout = false;
|
||||
switch (RotType)
|
||||
{
|
||||
case NOROTATE:
|
||||
return;
|
||||
case CLOCKWISE://20secs for 360turn
|
||||
//no target if rotating!
|
||||
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
|
||||
SpoutAngle += (double)diff/20000*(double)M_PI*2;
|
||||
if (SpoutAngle >= M_PI*2)SpoutAngle = 0;
|
||||
m_creature->SetOrientation(SpoutAngle);
|
||||
m_creature->StopMoving();
|
||||
Spout = true;
|
||||
break;
|
||||
case COUNTERCLOCKWISE://20secs for 360turn
|
||||
//no target if rotating!
|
||||
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
|
||||
SpoutAngle -= (double)diff/20000*(double)M_PI*2;
|
||||
if (SpoutAngle <= 0)SpoutAngle = M_PI*2;
|
||||
m_creature->SetOrientation(SpoutAngle);
|
||||
m_creature->StopMoving();
|
||||
Spout = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!Spout)
|
||||
return;
|
||||
|
||||
if(RotTimer<diff)//end rotate
|
||||
{
|
||||
RotType = NOROTATE;//set norotate state
|
||||
RotTimer=20000;
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
WhirlTimer = 4000; //whirl directly after spout ends
|
||||
return;
|
||||
}else RotTimer-=diff;
|
||||
|
||||
if(SpoutAnimTimer<diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_SPOUT_ANIM,true);
|
||||
SpoutAnimTimer = 1000;
|
||||
}else SpoutAnimTimer-=diff;
|
||||
|
||||
std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
|
||||
for(std::list<HostilReference*>::iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
|
||||
{
|
||||
Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
|
||||
if(target && target->GetTypeId() == TYPEID_PLAYER && m_creature->HasInArc((double)diff/20000*(double)M_PI*2,target) && m_creature->GetDistance(target) <= SPOUT_DIST && !target->IsInWater())
|
||||
DoCast(target,SPELL_SPOUT,true);//only knock back palyers in arc, in 100yards, not in water
|
||||
}
|
||||
}
|
||||
|
||||
void StartRotate(Unit* victim)
|
||||
{
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0:
|
||||
RotType = CLOCKWISE;
|
||||
break;
|
||||
case 1:
|
||||
RotType = COUNTERCLOCKWISE;
|
||||
break;
|
||||
}
|
||||
RotTimer=20000;
|
||||
|
||||
if(victim)
|
||||
SpoutAngle = m_creature->GetAngle(victim);
|
||||
m_creature->MonsterTextEmote(EMOTE_SPOUT,0,true);
|
||||
//DoCast(m_creature,SPELL_SPOUT_BREATH);//take breath anim
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() /*|| !m_creature->getVictim()*/ )//rotate resets target
|
||||
return;
|
||||
|
||||
Rotate(diff);//always check rotate things
|
||||
if(!Submerged)
|
||||
{
|
||||
if(PhaseTimer < diff)
|
||||
{
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
DoCast(m_creature,SPELL_SUBMERGE);
|
||||
PhaseTimer = 60000;//60secs submerged
|
||||
Submerged = true;
|
||||
}else PhaseTimer-=diff;
|
||||
}
|
||||
|
||||
if(!Submerged && RotType == NOROTATE)//is not spouting and not submerged
|
||||
{
|
||||
if(SpoutTimer < diff)
|
||||
{
|
||||
if(m_creature->getVictim() && RotType == NOROTATE)
|
||||
StartRotate(m_creature->getVictim());//start spout and random rotate
|
||||
|
||||
SpoutTimer= 35000;
|
||||
return;
|
||||
}else SpoutTimer -= diff;
|
||||
|
||||
//Whirl directly after a Spout and at random times
|
||||
if(WhirlTimer < diff)
|
||||
{
|
||||
WhirlTimer = rand()%5000 + 15000;
|
||||
DoCast(m_creature,SPELL_WHIRL);
|
||||
WaterboltTimer += 5000;//add 5secs to waterbolt timer, to add some time to run back to boss
|
||||
}else WhirlTimer -= diff;
|
||||
|
||||
if(GeyserTimer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,1);
|
||||
|
||||
if(target)
|
||||
DoCast(target,SPELL_GEYSER,true);
|
||||
else
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if(target)
|
||||
DoCast(target,SPELL_GEYSER,true);
|
||||
|
||||
GeyserTimer = rand()%5000 + 15000;
|
||||
}else GeyserTimer -= diff;
|
||||
|
||||
if(WaterboltTimer < diff)
|
||||
{
|
||||
Unit* target = SelectUnit(SELECT_TARGET_NEAREST,0,14,true);
|
||||
if(!target)
|
||||
{
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if(target)
|
||||
DoCast(target,SPELL_WATERBOLT);
|
||||
}
|
||||
WaterboltTimer = 3000;
|
||||
}else WaterboltTimer -= diff;
|
||||
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
}else if(!Submerged)
|
||||
return;
|
||||
else if(Submerged)//phase 2, submerged
|
||||
{
|
||||
if(PhaseTimer < diff)
|
||||
{
|
||||
Submerged = false;
|
||||
m_creature->InterruptNonMeleeSpells(false);//shouldn't be any
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->RemoveFlag(UNIT_NPC_EMOTESTATE,EMOTE_STATE_SUBMERGED);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_BYTES_1,9);
|
||||
DoCast(m_creature,SPELL_EMERGE);
|
||||
Spawned = false;
|
||||
SpoutTimer = 4000; // directly cast Spout after emerging!
|
||||
WhirlTimer = 26000;
|
||||
PhaseTimer = 120000;
|
||||
return;
|
||||
}else PhaseTimer-=diff;
|
||||
|
||||
if(!m_creature->isInCombat())
|
||||
m_creature->SetInCombatState(false);
|
||||
|
||||
if(!Spawned)
|
||||
{
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
//spawn adds
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[0][0],AddPos[0][1],AddPos[0][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[1][0],AddPos[1][1],AddPos[1][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[2][0],AddPos[2][1],AddPos[2][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[3][0],AddPos[3][1],AddPos[3][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[4][0],AddPos[4][1],AddPos[4][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_AMBUSHER,AddPos[5][0],AddPos[5][1],AddPos[5][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_GUARDIAN,AddPos[6][0],AddPos[6][1],AddPos[6][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_GUARDIAN,AddPos[7][0],AddPos[7][1],AddPos[7][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
m_creature->SummonCreature(MOB_COILFANG_GUARDIAN,AddPos[8][0],AddPos[8][1],AddPos[8][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
Spawned = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_coilfang_guardian(Creature *_Creature)
|
||||
{
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
|
||||
LungBurst_Timer = 7000;
|
||||
EnvelopingWinds_Timer = 9000;
|
||||
|
||||
if (pInstance)
|
||||
if (pInstance && m_creature->isAlive())
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
|
||||
Summon50 = false;
|
||||
Summon25 = false;
|
||||
|
||||
if (pInstance)
|
||||
if (pInstance && m_creature->isAlive())
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED);
|
||||
}
|
||||
|
||||
|
||||
+95
-37
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
tet/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Steam_Vault
|
||||
SD%Complete: 60
|
||||
SDComment: Workaround for opening of Main Chamber door. Trinity does not support scripting of Gameobject as this instance require.
|
||||
SD%Complete: 80
|
||||
SDComment: Instance script and access panel GO
|
||||
SDCategory: Coilfang Resevoir, The Steamvault
|
||||
EndScriptData */
|
||||
|
||||
@@ -26,7 +26,7 @@ EndScriptData */
|
||||
|
||||
#define ENCOUNTERS 4
|
||||
|
||||
#define MAIN_CHAMBERS_DOOR 183049 //door opened when hydromancer and mekgineer are died
|
||||
#define MAIN_CHAMBERS_DOOR 183049
|
||||
#define ACCESS_PANEL_HYDRO 184125
|
||||
#define ACCESS_PANEL_MEK 184126
|
||||
|
||||
@@ -36,50 +36,82 @@ EndScriptData */
|
||||
3 - Warlord Kalithresh Event
|
||||
*/
|
||||
|
||||
bool GOHello_go_main_chambers_access_panel(Player *player, GameObject* _GO)
|
||||
{
|
||||
ScriptedInstance* pInstance = (ScriptedInstance*)_GO->GetInstanceData();
|
||||
|
||||
if (!pInstance)
|
||||
return false;
|
||||
|
||||
if (_GO->GetEntry() == ACCESS_PANEL_HYDRO && pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE)
|
||||
pInstance->SetData(TYPE_HYDROMANCER_THESPIA,SPECIAL);
|
||||
|
||||
if (_GO->GetEntry() == ACCESS_PANEL_MEK && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE)
|
||||
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER,SPECIAL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
||||
{
|
||||
instance_steam_vault(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_steam_vault(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
uint64 ThespiaGUID;
|
||||
uint64 MekgineerGUID;
|
||||
uint64 KalithreshGUID;
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
bool IsHydromancerDead, IsMekgineerDead;
|
||||
GameObject *MainChambersDoor;
|
||||
GameObject *AccessPanelHydro;
|
||||
GameObject *AccessPanelMek;
|
||||
uint64 MainChambersDoor;
|
||||
uint64 AccessPanelHydro;
|
||||
uint64 AccessPanelMek;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
ThespiaGUID = 0;
|
||||
MekgineerGUID = 0;
|
||||
KalithreshGUID = 0;
|
||||
IsHydromancerDead = false;
|
||||
IsMekgineerDead = false;
|
||||
MainChambersDoor = NULL;
|
||||
AccessPanelHydro = NULL;
|
||||
AccessPanelMek = NULL;
|
||||
MainChambersDoor = 0;
|
||||
AccessPanelHydro = 0;
|
||||
AccessPanelMek = 0;
|
||||
|
||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||
Encounter[i] = false;
|
||||
Encounter[i] = NOT_STARTED;
|
||||
}
|
||||
|
||||
bool IsEncounterInProgress() const
|
||||
{
|
||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||
if( Encounter[i] ) return true;
|
||||
if (Encounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("SD2: Instance Steamvault: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 creature_entry)
|
||||
{
|
||||
switch(creature_entry)
|
||||
switch(creature->GetEntry())
|
||||
{
|
||||
case 17797: ThespiaGUID = creature->GetGUID(); break;
|
||||
case 17796: MekgineerGUID = creature->GetGUID(); break;
|
||||
case 17798: KalithreshGUID = creature->GetGUID(); break;
|
||||
case 17797: ThespiaGUID = creature->GetGUID(); break;
|
||||
case 17796: MekgineerGUID = creature->GetGUID(); break;
|
||||
case 17798: KalithreshGUID = creature->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,31 +119,51 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case MAIN_CHAMBERS_DOOR: MainChambersDoor = go; break;
|
||||
case ACCESS_PANEL_HYDRO: AccessPanelHydro = go; break;
|
||||
case ACCESS_PANEL_MEK: AccessPanelMek = go; break;
|
||||
case MAIN_CHAMBERS_DOOR: MainChambersDoor = go->GetGUID(); break;
|
||||
case ACCESS_PANEL_HYDRO: AccessPanelHydro = go->GetGUID(); break;
|
||||
case ACCESS_PANEL_MEK: AccessPanelMek = go->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("SD2: Instance Steamvault: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_HYDROMANCER_THESPIA:
|
||||
if(data == DONE)
|
||||
{
|
||||
IsHydromancerDead = true;
|
||||
if( IsMekgineerDead && MainChambersDoor )
|
||||
MainChambersDoor->SetGoState(0);
|
||||
}
|
||||
Encounter[0] = data;
|
||||
break;
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelHydro))
|
||||
_go->SetGoState(0);
|
||||
|
||||
if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor))
|
||||
_go->SetGoState(0);
|
||||
}
|
||||
debug_log("SD2: Instance Steamvault: Access panel used.");
|
||||
}
|
||||
Encounter[0] = data;
|
||||
break;
|
||||
case TYPE_MEKGINEER_STEAMRIGGER:
|
||||
if(data == DONE)
|
||||
{
|
||||
IsMekgineerDead = true;
|
||||
if( IsHydromancerDead && MainChambersDoor )
|
||||
MainChambersDoor->SetGoState(0);
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelMek))
|
||||
_go->SetGoState(0);
|
||||
|
||||
if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor))
|
||||
_go->SetGoState(0);
|
||||
}
|
||||
debug_log("SD2: Instance Steamvault: Access panel used.");
|
||||
}
|
||||
Encounter[1] = data;
|
||||
break;
|
||||
@@ -163,6 +215,12 @@ InstanceData* GetInstanceData_instance_steam_vault(Map* map)
|
||||
void AddSC_instance_steam_vault()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "go_main_chambers_access_panel";
|
||||
newscript->pGOHello = &GOHello_go_main_chambers_access_panel;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "instance_steam_vault";
|
||||
newscript->GetInstanceData = GetInstanceData_instance_steam_vault;
|
||||
|
||||
@@ -24,24 +24,38 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_gruuls_lair.h"
|
||||
|
||||
/* Yells & Quotes */
|
||||
#define SAY_AGGRO -1565010
|
||||
#define SAY_SLAM1 -1565011
|
||||
#define SAY_SLAM2 -1565012
|
||||
#define SAY_SHATTER1 -1565013
|
||||
#define SAY_SHATTER2 -1565014
|
||||
#define SAY_SLAY1 -1565015
|
||||
#define SAY_SLAY2 -1565016
|
||||
#define SAY_SLAY3 -1565017
|
||||
#define SAY_DEATH -1565018
|
||||
#define EMOTE_GROW -1565019
|
||||
|
||||
/* Spells */
|
||||
#define SPELL_GROWTH 36300
|
||||
#define SPELL_CAVE_IN 36240
|
||||
#define SPELL_GROUND_SLAM 33525 // AoE Ground Slam applying Ground Slam to everyone with a script effect (most likely the knock back, we can code it to a set knockback)
|
||||
#define SPELL_SHATTER_EFFECT 33671
|
||||
#define SPELL_HURTFUL_STRIKE 33813
|
||||
#define SPELL_REVERBERATION 36297 //AoE Silence
|
||||
#define SPELL_GRONN_LORDS_GRASP 33572 //Already handled in GroundSlam
|
||||
#define SPELL_STONED 33652 //-- Spell is self cast
|
||||
#define SPELL_SHATTER 33654
|
||||
#define SPELL_MAGNETIC_PULL 28337
|
||||
#define SPELL_KNOCK_BACK 24199 //Knockback spell until correct implementation is made
|
||||
|
||||
#define EMOTE_GROW "grows in size!"
|
||||
#define SAY_AGGRO "Come.... and die."
|
||||
#define SPELL_SHATTER_EFFECT 33671
|
||||
#define SPELL_HURTFUL_STRIKE 33813
|
||||
#define SPELL_STONED 33652 //Spell is self cast
|
||||
#define SPELL_GRONN_LORDS_GRASP 33572 //Triggered by Ground Slam
|
||||
|
||||
struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
{
|
||||
boss_gruulAI(Creature *c) : ScriptedAI(c) { Reset(); }
|
||||
boss_gruulAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
@@ -55,8 +69,6 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
|
||||
Growth_Timer= 30000;
|
||||
CaveIn_Timer= 40000;
|
||||
GroundSlamTimer= 35000;
|
||||
@@ -65,36 +77,36 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
HurtfulStrike_Timer= 8000;
|
||||
Reverberation_Timer= 60000+45000;
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_GRUULEVENT, NOT_STARTED);
|
||||
if(pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_GRUULEVENT, NOT_STARTED);
|
||||
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
}
|
||||
}
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if(pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_GRUULEVENT, DONE);
|
||||
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
}
|
||||
}
|
||||
if(pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_GRUULEVENT, DONE);
|
||||
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoZoneInCombat();
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoZoneInCombat();
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -107,6 +119,16 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit()
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
@@ -118,7 +140,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
if (Growth_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_GROWTH);
|
||||
DoTextEmote(EMOTE_GROW,NULL);
|
||||
DoScriptText(EMOTE_GROW, m_creature);
|
||||
Growth_Timer = 30000;
|
||||
}else Growth_Timer -= diff;
|
||||
|
||||
@@ -161,7 +183,8 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
}
|
||||
|
||||
GroundSlamTimer = 7000;
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
|
||||
case 1:
|
||||
{
|
||||
@@ -181,7 +204,8 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
|
||||
GroundSlamTimer = 5000;
|
||||
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
|
||||
case 2:
|
||||
{
|
||||
@@ -190,7 +214,8 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
|
||||
GroundSlamTimer = 1000;
|
||||
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
|
||||
case 3:
|
||||
{
|
||||
@@ -227,7 +252,8 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
if(Reverberation_Timer < 10000) //Give a little time to the players to undo the damage from shatter
|
||||
Reverberation_Timer += 10000;
|
||||
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GroundSlamStage++;
|
||||
@@ -254,18 +280,14 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
// Reverberation
|
||||
if (Reverberation_Timer < diff)
|
||||
{
|
||||
m_creature->CastSpell(m_creature->getVictim(), SPELL_REVERBERATION, true);
|
||||
|
||||
Reverberation_Timer = 30000;
|
||||
DoCast(m_creature->getVictim(), SPELL_REVERBERATION, true);
|
||||
Reverberation_Timer = 30000;
|
||||
}else Reverberation_Timer -= diff;
|
||||
|
||||
// Cave In
|
||||
if (CaveIn_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
if(target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_CAVE_IN);
|
||||
|
||||
CaveIn_Timer = 20000;
|
||||
|
||||
@@ -24,29 +24,16 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_gruuls_lair.h"
|
||||
|
||||
//Sounds
|
||||
#define SOUND_AGGRO 11367
|
||||
#define SOUND_ENRAGE 11368
|
||||
#define SOUND_OGRE_DEATH1 11369
|
||||
#define SOUND_OGRE_DEATH2 11370
|
||||
#define SOUND_OGRE_DEATH3 11371
|
||||
#define SOUND_OGRE_DEATH4 11372
|
||||
#define SOUND_SLAY1 11373
|
||||
#define SOUND_SLAY2 11374
|
||||
#define SOUND_SLAY3 11375
|
||||
#define SOUND_DEATH 11376
|
||||
|
||||
//Yells
|
||||
#define SAY_AGGRO "Gronn are the real power in Outland!"
|
||||
#define SAY_ENRAGE "You will not defeat the Hand of Gruul!"
|
||||
#define SAY_OGRE_DEATH1 "You not kill next one so easy!"
|
||||
#define SAY_OGRE_DEATH2 "Does not mean anything!"
|
||||
#define SAY_OGRE_DEATH3 "I'm not afraid of you!"
|
||||
#define SAY_OGRE_DEATH4 "Good, now you fight me!"
|
||||
#define SAY_SLAY1 "You not so tough after all!"
|
||||
#define SAY_SLAY2 "Ahahahaha!"
|
||||
#define SAY_SLAY3 "Maulgar is king!"
|
||||
#define SAY_DEATH "Gruul will... crush you!"
|
||||
#define SAY_AGGRO -1565000
|
||||
#define SAY_ENRAGE -1565001
|
||||
#define SAY_OGRE_DEATH1 -1565002
|
||||
#define SAY_OGRE_DEATH2 -1565003
|
||||
#define SAY_OGRE_DEATH3 -1565004
|
||||
#define SAY_OGRE_DEATH4 -1565005
|
||||
#define SAY_SLAY1 -1565006
|
||||
#define SAY_SLAY2 -1565007
|
||||
#define SAY_SLAY3 -1565008
|
||||
#define SAY_DEATH -1565009
|
||||
|
||||
// High King Maulgar
|
||||
#define SPELL_ARCING_SMASH 39144
|
||||
@@ -55,6 +42,7 @@ EndScriptData */
|
||||
#define SPELL_BERSERKER_C 26561
|
||||
#define SPELL_ROAR 16508
|
||||
#define SPELL_FLURRY 33232
|
||||
#define SPELL_DUAL_WIELD 29651 //used in phase
|
||||
|
||||
// Olm the Summoner
|
||||
#define SPELL_DARK_DECAY 33129
|
||||
@@ -106,7 +94,9 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
||||
MightyBlow_Timer = 40000;
|
||||
Whirlwind_Timer = 30000;
|
||||
Charging_Timer = 0;
|
||||
Roar_Timer = 0;
|
||||
Roar_Timer = 0;
|
||||
|
||||
m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, false);
|
||||
|
||||
Phase2 = false;
|
||||
|
||||
@@ -133,57 +123,35 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_SLAY3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_MAULGAREVENT, DONE);
|
||||
{
|
||||
pInstance->SetData(DATA_MAULGAREVENT, DONE);
|
||||
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_MAULGARDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
}
|
||||
}
|
||||
GameObject* Door = NULL;
|
||||
Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_MAULGARDOOR));
|
||||
if(Door)
|
||||
Door->SetGoState(0);
|
||||
}
|
||||
}
|
||||
|
||||
void AddDeath()
|
||||
{
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_OGRE_DEATH1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_OGRE_DEATH2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_OGRE_DEATH3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH3);
|
||||
break;
|
||||
case 3:
|
||||
DoYell(SAY_OGRE_DEATH4, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_OGRE_DEATH4);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_OGRE_DEATH1, m_creature);break;
|
||||
case 1: DoScriptText(SAY_OGRE_DEATH2, m_creature);break;
|
||||
case 2: DoScriptText(SAY_OGRE_DEATH3, m_creature);break;
|
||||
case 3: DoScriptText(SAY_OGRE_DEATH4, m_creature);break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,13 +177,12 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
||||
|
||||
GetCouncil();
|
||||
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
pInstance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID());
|
||||
pInstance->SetData(DATA_MAULGAREVENT, IN_PROGRESS);
|
||||
|
||||
DoZoneInCombat();
|
||||
DoZoneInCombat();
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -267,11 +234,10 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
||||
//Entering Phase 2
|
||||
if(!Phase2 && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50)
|
||||
{
|
||||
Phase2 = true;
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoCast(m_creature, SPELL_FLURRY);
|
||||
|
||||
Phase2 = true;
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
|
||||
m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_gruuls_lair : public ScriptedInstance
|
||||
{
|
||||
instance_gruuls_lair(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_gruuls_lair(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
bool Encounters[ENCOUNTERS];
|
||||
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_shattered_halls : public ScriptedInstance
|
||||
{
|
||||
instance_shattered_halls(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_shattered_halls(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
uint64 nethekurseGUID;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Hellfire_Peninsula
|
||||
SD%Complete: 100
|
||||
SDComment: Quest support: 9375, 10129, 10146, 10162, 10163, 10340, 10346, 10347, 10382 (Special flight paths)
|
||||
SDComment: Quest support: 9375, 10129, 10146, 10162, 10163, 10340, 10346, 10347, 10382 (Special flight paths)
|
||||
SDCategory: Hellfire Peninsula
|
||||
EndScriptData */
|
||||
|
||||
@@ -143,167 +143,163 @@ bool GossipHello_npc_wing_commander_brack(Player *player, Creature *_Creature)
|
||||
|
||||
bool GossipSelect_npc_wing_commander_brack(Player *player, Creature *_Creature, uint32 sender, uint32 action )
|
||||
{
|
||||
if (action == GOSSIP_ACTION_INFO_DEF + 1)
|
||||
{
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,33659,true); //TaxiPath 584 (Gateways Murket and Shaadraz)
|
||||
}
|
||||
if (action == GOSSIP_ACTION_INFO_DEF + 2)
|
||||
{
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,33825,true); //TaxiPath 587 (Aerial Assault Flight (Horde))
|
||||
}
|
||||
if (action == GOSSIP_ACTION_INFO_DEF + 3)
|
||||
{
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,34578,true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge)
|
||||
}
|
||||
return true;
|
||||
switch(action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1:
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,33659,true); //TaxiPath 584 (Gateways Murket and Shaadraz)
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2:
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,33825,true); //TaxiPath 587 (Aerial Assault Flight (Horde))
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 3:
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
player->CastSpell(player,34578,true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge)
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_wounded_blood_elf
|
||||
######*/
|
||||
|
||||
#define SAY_ELF_START -1000117
|
||||
#define SAY_ELF_SUMMON1 -1000118
|
||||
#define SAY_ELF_RESTING -1000119
|
||||
#define SAY_ELF_SUMMON2 -1000120
|
||||
#define SAY_ELF_COMPLETE -1000121
|
||||
#define SAY_ELF_AGGRO -1000122
|
||||
|
||||
#define QUEST_THE_ROAD_TO_FALCON_WATCH 9375
|
||||
#define SAY1 "Thank you for agreeing to help. Now, let's get out of here $N."
|
||||
#define SAY2 "Over there! They're following us!"
|
||||
#define SAY3 "Allow me a moment to rest. The journey taxes what little strength I have."
|
||||
#define SAY4 "Did you hear something?"
|
||||
#define SAY5 "Falcon Watch, at last! Now, where's my... Oh no! My pack, it's missing! Where has -"
|
||||
#define SAYAGGRO "You won't keep me from getting to Falcon Watch!"
|
||||
|
||||
#define QUEST_ROAD_TO_FALCON_WATCH 9375
|
||||
|
||||
struct TRINITY_DLL_DECL npc_wounded_blood_elfAI : public npc_escortAI
|
||||
{
|
||||
npc_wounded_blood_elfAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
npc_wounded_blood_elfAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
DoScriptText(SAY_ELF_START, m_creature, player);
|
||||
break;
|
||||
case 9:
|
||||
DoScriptText(SAY_ELF_SUMMON1, m_creature, player);
|
||||
// Spawn two Haal'eshi Talonguard
|
||||
DoSpawnCreature(16967, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
DoSpawnCreature(16967, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
break;
|
||||
case 13:
|
||||
DoScriptText(SAY_ELF_RESTING, m_creature, player);
|
||||
// make the NPC kneel
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
|
||||
break;
|
||||
case 14:
|
||||
DoScriptText(SAY_ELF_SUMMON2, m_creature, player);
|
||||
// Spawn two Haal'eshi Windwalker
|
||||
DoSpawnCreature(16966, -15, -15, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
DoSpawnCreature(16966, -17, -17, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
break;
|
||||
case 27:
|
||||
DoScriptText(SAY_ELF_COMPLETE, m_creature, player);
|
||||
// Award quest credit
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_ROAD_TO_FALCON_WATCH,m_creature);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (!IsBeingEscorted)
|
||||
m_creature->setFaction(1604);
|
||||
}
|
||||
|
||||
switch (i)
|
||||
{
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
if (IsBeingEscorted)
|
||||
DoScriptText(SAY_ELF_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
case 0:
|
||||
DoSay(SAY1, LANG_UNIVERSAL, player);
|
||||
// Change faction, so mobs can attack
|
||||
m_creature->setFaction(1610);
|
||||
break;
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (!IsBeingEscorted)
|
||||
return;
|
||||
|
||||
case 9:
|
||||
DoSay(SAY2, LANG_UNIVERSAL, player);
|
||||
// Spawn two Haal'eshi Talonguard
|
||||
{
|
||||
Creature* temp1 = m_creature->SummonCreature(16967, m_creature->GetPositionX()-15, m_creature->GetPositionY()-15, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
|
||||
if (temp1) temp1->AI()->AttackStart(m_creature);
|
||||
Creature* temp2 = m_creature->SummonCreature(16967, m_creature->GetPositionX()-17, m_creature->GetPositionY()-17, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
|
||||
if (temp2) temp2->AI()->AttackStart(m_creature);
|
||||
}
|
||||
break;
|
||||
|
||||
case 13:
|
||||
DoSay(SAY3, LANG_UNIVERSAL, player);
|
||||
// NPC "should" kneel
|
||||
m_creature->HandleEmoteCommand(EMOTE_STATE_KNEEL);
|
||||
break;
|
||||
|
||||
case 14:
|
||||
DoSay(SAY4, LANG_UNIVERSAL, player);
|
||||
// Spawn two Haal'eshi Windwalker
|
||||
{
|
||||
Creature* temp3 = m_creature->SummonCreature(16966, m_creature->GetPositionX()-15, m_creature->GetPositionY()-15, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
|
||||
if (temp3) temp3->AI()->AttackStart(m_creature);
|
||||
Creature* temp4 = m_creature->SummonCreature(16966, m_creature->GetPositionX()-17, m_creature->GetPositionY()-17, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
|
||||
if (temp4) temp4->AI()->AttackStart(m_creature);
|
||||
}
|
||||
break;
|
||||
|
||||
case 27:
|
||||
DoSay(SAY5, LANG_UNIVERSAL, player);
|
||||
// Set faction back to normal
|
||||
m_creature->setFaction(1604);
|
||||
// Award quest credit
|
||||
if( PlayerGUID )
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if( player && player->GetTypeId() == TYPEID_PLAYER )
|
||||
((Player*)player)->GroupEventHappens(9375,m_creature);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoSay(SAYAGGRO, LANG_UNIVERSAL, who);
|
||||
}
|
||||
|
||||
void Reset() { }
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
// If NPC dies, Quest fail
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player)
|
||||
((Player*)player)->FailQuest(QUEST_THE_ROAD_TO_FALCON_WATCH);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
if (PlayerGUID)
|
||||
{
|
||||
// If NPC dies, player fails the quest
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->FailQuest(QUEST_ROAD_TO_FALCON_WATCH);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_wounded_blood_elf(Player* player, Creature* creature, Quest const* quest)
|
||||
// Begin the escort quest
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_THE_ROAD_TO_FALCON_WATCH)
|
||||
{
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
CreatureAI* GetAI_npc_wounded_blood_elf(Creature *_Creature)
|
||||
{
|
||||
npc_wounded_blood_elfAI* thisAI = new npc_wounded_blood_elfAI(_Creature);
|
||||
npc_wounded_blood_elfAI* welfAI = new npc_wounded_blood_elfAI(_Creature);
|
||||
|
||||
thisAI->AddWaypoint(0, -1137.72, 4272.10, 14.04, 3000);
|
||||
thisAI->AddWaypoint(1, -1141.34, 4232.42, 14.63);
|
||||
thisAI->AddWaypoint(2, -1133.47, 4220.88, 11.78);
|
||||
thisAI->AddWaypoint(3, -1126.18, 4213.26, 13.51);
|
||||
thisAI->AddWaypoint(4, -1100.12, 4204.32, 16.41);
|
||||
thisAI->AddWaypoint(5, -1063.68, 4197.92, 15.51);
|
||||
thisAI->AddWaypoint(6, -1027.28, 4194.36, 15.52);
|
||||
thisAI->AddWaypoint(7, -995.68, 4189.59, 19.84);
|
||||
thisAI->AddWaypoint(8, -970.90, 4188.60, 24.61);
|
||||
thisAI->AddWaypoint(9, -961.93, 4193.34, 26.11, 80000); // Summon 1
|
||||
thisAI->AddWaypoint(10, -935.52, 4210.99, 31.98);
|
||||
thisAI->AddWaypoint(11, -913.42, 4218.27, 37.29);
|
||||
thisAI->AddWaypoint(12, -896.53, 4207.73, 43.23);
|
||||
thisAI->AddWaypoint(13, -868.49, 4194.77, 46.75, 17000); // Kneel and Rest Here
|
||||
thisAI->AddWaypoint(14, -852.83, 4198.29, 47.28, 80000); // Summon 2
|
||||
thisAI->AddWaypoint(15, -819.85, 4200.50, 46.37);
|
||||
thisAI->AddWaypoint(16, -791.92, 4201.96, 44.19);
|
||||
thisAI->AddWaypoint(17, -774.42, 4202.46, 47.41);
|
||||
thisAI->AddWaypoint(18, -762.90, 4202.17, 48.81);
|
||||
thisAI->AddWaypoint(19, -728.25, 4195.35, 50.68);
|
||||
thisAI->AddWaypoint(20, -713.58, 4192.07, 53.98);
|
||||
thisAI->AddWaypoint(21, -703.09, 4189.74, 56.96);
|
||||
thisAI->AddWaypoint(22, -693.70, 4185.43, 57.06);
|
||||
thisAI->AddWaypoint(23, -686.38, 4159.81, 60.26);
|
||||
thisAI->AddWaypoint(24, -679.88, 4147.04, 64.20);
|
||||
thisAI->AddWaypoint(25, -656.74, 4147.72, 64.11);
|
||||
thisAI->AddWaypoint(26, -652.22, 4137.50, 64.58);
|
||||
thisAI->AddWaypoint(27, -649.99, 4136.38, 64.63, 20000); // Award Quest Credit
|
||||
|
||||
return (CreatureAI*)thisAI;
|
||||
welfAI->AddWaypoint(0, -1137.72, 4272.10, 14.04, 5000);
|
||||
welfAI->AddWaypoint(1, -1141.34, 4232.42, 14.63);
|
||||
welfAI->AddWaypoint(2, -1133.47, 4220.88, 11.78);
|
||||
welfAI->AddWaypoint(3, -1126.18, 4213.26, 13.51);
|
||||
welfAI->AddWaypoint(4, -1100.12, 4204.32, 16.41);
|
||||
welfAI->AddWaypoint(5, -1063.68, 4197.92, 15.51);
|
||||
welfAI->AddWaypoint(6, -1027.28, 4194.36, 15.52);
|
||||
welfAI->AddWaypoint(7, -995.68, 4189.59, 19.84);
|
||||
welfAI->AddWaypoint(8, -970.90, 4188.60, 24.61);
|
||||
welfAI->AddWaypoint(9, -961.93, 4193.34, 26.11, 15000); // Summon 1
|
||||
welfAI->AddWaypoint(10, -935.52, 4210.99, 31.98);
|
||||
welfAI->AddWaypoint(11, -913.42, 4218.27, 37.29);
|
||||
welfAI->AddWaypoint(12, -896.53, 4207.73, 43.23);
|
||||
welfAI->AddWaypoint(13, -868.49, 4194.77, 46.75, 30000);// Kneel and Rest Here
|
||||
welfAI->AddWaypoint(14, -852.83, 4198.29, 47.28, 15000);// Summon 2
|
||||
welfAI->AddWaypoint(15, -819.85, 4200.50, 46.37);
|
||||
welfAI->AddWaypoint(16, -791.92, 4201.96, 44.19);
|
||||
welfAI->AddWaypoint(17, -774.42, 4202.46, 47.41);
|
||||
welfAI->AddWaypoint(18, -762.90, 4202.17, 48.81);
|
||||
welfAI->AddWaypoint(19, -728.25, 4195.35, 50.68);
|
||||
welfAI->AddWaypoint(20, -713.58, 4192.07, 53.98);
|
||||
welfAI->AddWaypoint(21, -703.09, 4189.74, 56.96);
|
||||
welfAI->AddWaypoint(22, -693.70, 4185.43, 57.06);
|
||||
welfAI->AddWaypoint(23, -686.38, 4159.81, 60.26);
|
||||
welfAI->AddWaypoint(24, -679.88, 4147.04, 64.20);
|
||||
welfAI->AddWaypoint(25, -656.74, 4147.72, 64.11);
|
||||
welfAI->AddWaypoint(26, -652.22, 4137.50, 64.58);
|
||||
welfAI->AddWaypoint(27, -649.99, 4136.38, 64.63, 30000);// Award Quest Credit
|
||||
|
||||
return (CreatureAI*)welfAI;
|
||||
}
|
||||
|
||||
bool QuestAccept_npc_wounded_blood_elf(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_ROAD_TO_FALCON_WATCH)
|
||||
{
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
// Change faction so mobs attack
|
||||
creature->setFaction(775);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
@@ -335,6 +331,6 @@ void AddSC_hellfire_peninsula()
|
||||
newscript = new Script;
|
||||
newscript->Name="npc_wounded_blood_elf";
|
||||
newscript->GetAI = &GetAI_npc_wounded_blood_elf;
|
||||
newscript->pQuestAccept = &QuestAccept_wounded_blood_elf;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_wounded_blood_elf;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
@@ -23,29 +23,14 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_AGGRO "The Menagerie is for guests only."
|
||||
#define SOUND_AGGRO 9183
|
||||
|
||||
#define SAY_SUMMON1 "Gallery rules will be strictly enforced."
|
||||
#define SOUND_SUMMON1 9188
|
||||
|
||||
#define SAY_SUMMON2 "This curator is equipped for gallery protection."
|
||||
#define SOUND_SUMMON2 9309
|
||||
|
||||
#define SAY_EVOCATE "Your request cannot be processed."
|
||||
#define SOUND_EVOCATE 9186
|
||||
|
||||
#define SAY_ENRAGE "Failure to comply will result in offensive action."
|
||||
#define SOUND_ENRAGE 9185
|
||||
|
||||
#define SAY_KILL1 "Do not touch the displays."
|
||||
#define SOUND_KILL1 9187
|
||||
|
||||
#define SAY_KILL2 "You are not a guest."
|
||||
#define SOUND_KILL2 9308
|
||||
|
||||
#define SAY_DEATH "This Curator is no longer op... er... ation... al."
|
||||
#define SOUND_DEATH 9184
|
||||
#define SAY_AGGRO -1532057
|
||||
#define SAY_SUMMON1 -1532058
|
||||
#define SAY_SUMMON2 -1532059
|
||||
#define SAY_EVOCATE -1532060
|
||||
#define SAY_ENRAGE -1532061
|
||||
#define SAY_KILL1 -1532062
|
||||
#define SAY_KILL2 -1532063
|
||||
#define SAY_DEATH -1532064
|
||||
|
||||
//Flare spell info
|
||||
#define SPELL_ASTRAL_FLARE_PASSIVE 30234 //Visual effect + Flare damage
|
||||
@@ -84,27 +69,19 @@ struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_KILL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_KILL2);
|
||||
break;
|
||||
}
|
||||
case 0: DoScriptText(SAY_KILL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -117,8 +94,7 @@ struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
||||
|
||||
if (m_creature->GetPower(POWER_MANA) <= 1000 && !Evocating)
|
||||
{
|
||||
DoYell(SAY_EVOCATE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_EVOCATE);
|
||||
DoScriptText(SAY_EVOCATE, m_creature);
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
DoCast(m_creature, SPELL_EVOCATION);
|
||||
Evocating = true;
|
||||
@@ -144,14 +120,8 @@ struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
||||
m_creature->ModifyPower(POWER_MANA, -mana);
|
||||
switch(rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SUMMON1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SUMMON2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SUMMON1, m_creature);break;
|
||||
case 1: DoScriptText(SAY_SUMMON2, m_creature);break;
|
||||
}
|
||||
AddTimer = 10000;
|
||||
}else AddTimer -= diff;
|
||||
@@ -169,16 +139,14 @@ struct TRINITY_DLL_DECL boss_curatorAI : public ScriptedAI
|
||||
{
|
||||
Enraged = true;
|
||||
DoCast(m_creature, SPELL_ENRAGE);
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}
|
||||
}
|
||||
|
||||
if (BerserkTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENRAGE);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
}else BerserkTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
@@ -23,28 +23,20 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_AGGRO -1532018
|
||||
#define SAY_SLAY1 -1532019
|
||||
#define SAY_SLAY2 -1532020
|
||||
#define SAY_SLAY3 -1532021
|
||||
#define SAY_REPENTANCE1 -1532022
|
||||
#define SAY_REPENTANCE2 -1532023
|
||||
#define SAY_DEATH -1532024
|
||||
|
||||
#define SPELL_REPENTANCE 29511
|
||||
#define SPELL_HOLYFIRE 29522
|
||||
#define SPELL_HOLYWRATH 32445
|
||||
#define SPELL_HOLYGROUND 29512
|
||||
#define SPELL_BERSERK 26662
|
||||
|
||||
#define SAY_AGGRO "Your behavior will not be tolerated!"
|
||||
#define SAY_SLAY1 "Ah ah ah..."
|
||||
#define SAY_SLAY2 "This is for the best."
|
||||
#define SAY_SLAY3 "Impure thoughts lead to profane actions."
|
||||
#define SAY_REPENTANCE1 "Cast out your corrupt thoughts."
|
||||
#define SAY_REPENTANCE2 "Your impurity must be cleansed."
|
||||
#define SAY_DEATH "Death comes. Will your conscience be clear?"
|
||||
|
||||
#define SOUND_AGGRO 9204
|
||||
#define SOUND_SLAY1 9207
|
||||
#define SOUND_SLAY2 9312
|
||||
#define SOUND_SLAY3 9311
|
||||
#define SOUND_REPENTANCE1 9313
|
||||
#define SOUND_REPENTANCE2 9208
|
||||
#define SOUND_DEATH 9206
|
||||
|
||||
struct TRINITY_DLL_DECL boss_maiden_of_virtueAI : public ScriptedAI
|
||||
{
|
||||
boss_maiden_of_virtueAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
@@ -73,35 +65,25 @@ struct TRINITY_DLL_DECL boss_maiden_of_virtueAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit* Victim)
|
||||
{
|
||||
if(rand()%2) return;
|
||||
if(rand()%2)
|
||||
return;
|
||||
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1,LANG_UNIVERSAL,Victim);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2,LANG_UNIVERSAL,Victim);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_SLAY3,LANG_UNIVERSAL,Victim);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature);break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature);break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature);break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -127,40 +109,27 @@ struct TRINITY_DLL_DECL boss_maiden_of_virtueAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_REPENTANCE1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_REPENTANCE1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_REPENTANCE2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_REPENTANCE2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_REPENTANCE1, m_creature);break;
|
||||
case 1: DoScriptText(SAY_REPENTANCE2, m_creature);break;
|
||||
}
|
||||
Repentance_Timer = 30000 + rand()%15000; //A little randomness on that spell
|
||||
}else Repentance_Timer -= diff;
|
||||
|
||||
if (Holyfire_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
if(target)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_HOLYFIRE);
|
||||
Holyfire_Timer = 8000 + rand()%17000; //Anywhere from 8 to 25 seconds, good luck having several of those in a row!
|
||||
}
|
||||
|
||||
Holyfire_Timer = 8000 + rand()%17000; //Anywhere from 8 to 25 seconds, good luck having several of those in a row!
|
||||
}else Holyfire_Timer -= diff;
|
||||
|
||||
if (Holywrath_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
if (target)
|
||||
{
|
||||
DoCast(target,SPELL_HOLYWRATH);
|
||||
Holywrath_Timer = 20000+(rand()%10000); //20-30 secs sounds nice
|
||||
}
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_HOLYWRATH);
|
||||
|
||||
Holywrath_Timer = 20000+(rand()%10000); //20-30 secs sounds nice
|
||||
|
||||
}else Holywrath_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
@@ -23,34 +23,17 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_MIDNIGHT_KILL "Well done Midnight!"
|
||||
#define SOUND_MIDNIGHT_KILL 9173
|
||||
|
||||
#define SAY_APPEAR1 "Cowards! Wretches!"
|
||||
#define SOUND_APPEAR1 9167
|
||||
#define SAY_APPEAR2 "Who dares attack the steed of the Huntsman?"
|
||||
#define SOUND_APPEAR2 9298
|
||||
#define SAY_APPEAR3 "Perhaps you would rather test yourselves against a more formidable opponent?! "
|
||||
#define SOUND_APPEAR3 9299
|
||||
|
||||
#define SAY_MOUNT "Come, Midnight, let\'s disperse this petty rabble! "
|
||||
#define SOUND_MOUNT 9168
|
||||
|
||||
#define SAY_KILL1 "It was... inevitable."
|
||||
#define SOUND_KILL1 9169
|
||||
#define SAY_KILL2 "Another trophy to add to my collection!"
|
||||
#define SOUND_KILL2 9300
|
||||
|
||||
#define SAY_DISARMED "Weapons are merely a convenience for a warrior of my skill!"
|
||||
#define SOUND_DISARMED 9166
|
||||
|
||||
#define SAY_DEATH "I always knew... someday I would become... the hunted."
|
||||
#define SOUND_DEATH 9165
|
||||
|
||||
#define SAY_RANDOM1 "Such easy sport."
|
||||
#define SOUND_RANDOM1 9170
|
||||
#define SAY_RANDOM2 "Amateurs! Do not think you can best me! I kill for a living."
|
||||
#define SOUND_RANDOM2 9304
|
||||
#define SAY_MIDNIGHT_KILL -1532000
|
||||
#define SAY_APPEAR1 -1532001
|
||||
#define SAY_APPEAR2 -1532002
|
||||
#define SAY_APPEAR3 -1532003
|
||||
#define SAY_MOUNT -1532004
|
||||
#define SAY_KILL1 -1532005
|
||||
#define SAY_KILL2 -1532006
|
||||
#define SAY_DISARMED -1532007
|
||||
#define SAY_DEATH -1532008
|
||||
#define SAY_RANDOM1 -1532009
|
||||
#define SAY_RANDOM2 -1532010
|
||||
|
||||
#define SPELL_SHADOWCLEAVE 29832
|
||||
#define SPELL_INTANGIBLE_PRESENCE 29833
|
||||
@@ -84,12 +67,8 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
{
|
||||
if(Phase == 2)
|
||||
{
|
||||
Unit *pUnit = Unit::GetUnit(*m_creature, Attumen);
|
||||
if(pUnit)
|
||||
{
|
||||
pUnit->MonsterYell(SAY_MIDNIGHT_KILL, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(pUnit, SOUND_MIDNIGHT_KILL);
|
||||
}
|
||||
if (Unit *pUnit = Unit::GetUnit(*m_creature, Attumen))
|
||||
DoScriptText(SAY_MIDNIGHT_KILL, pUnit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +80,7 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
if(Phase == 1 && (m_creature->GetHealth()*100)/m_creature->GetMaxHealth() < 95)
|
||||
{
|
||||
Phase = 2;
|
||||
Creature *pAttumen = DoSpawnCreature(SUMMON_ATTUMEN, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 45000);
|
||||
Creature *pAttumen = DoSpawnCreature(SUMMON_ATTUMEN, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000);
|
||||
if(pAttumen)
|
||||
{
|
||||
Attumen = pAttumen->GetGUID();
|
||||
@@ -109,25 +88,15 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
SetMidnight(pAttumen, m_creature->GetGUID());
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
pAttumen->Yell(SAY_APPEAR1, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, SOUND_APPEAR1);
|
||||
break;
|
||||
case 1:
|
||||
pAttumen->Yell(SAY_APPEAR2, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, SOUND_APPEAR2);
|
||||
break;
|
||||
case 2:
|
||||
pAttumen->Yell(SAY_APPEAR3, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(m_creature, SOUND_APPEAR3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_APPEAR1, pAttumen); break;
|
||||
case 1: DoScriptText(SAY_APPEAR2, pAttumen); break;
|
||||
case 2: DoScriptText(SAY_APPEAR3, pAttumen); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(Phase == 2 && (m_creature->GetHealth()*100)/m_creature->GetMaxHealth() < 25)
|
||||
{
|
||||
Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen);
|
||||
if(pAttumen)
|
||||
if (Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen))
|
||||
Mount(pAttumen);
|
||||
}
|
||||
else if(Phase ==3)
|
||||
@@ -138,8 +107,7 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
Mount_Timer = 0;
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen);
|
||||
if(pAttumen)
|
||||
if (Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen))
|
||||
{
|
||||
pAttumen->SetUInt32Value(UNIT_FIELD_DISPLAYID, MOUNTED_DISPLAYID);
|
||||
pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
@@ -149,9 +117,10 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
pAttumen->SetUInt64Value(UNIT_FIELD_TARGET, pAttumen->getVictim()->GetGUID());
|
||||
}
|
||||
pAttumen->SetFloatValue(OBJECT_FIELD_SCALE_X,1);
|
||||
}
|
||||
} else Mount_Timer -= diff;
|
||||
}
|
||||
|
||||
} else Mount_Timer -= diff;
|
||||
}
|
||||
}
|
||||
|
||||
if(Phase != 3)
|
||||
DoMeleeAttackIfReady();
|
||||
@@ -159,8 +128,7 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
|
||||
|
||||
void Mount(Unit *pAttumen)
|
||||
{
|
||||
DoPlaySoundToSet(pAttumen, SOUND_MOUNT);
|
||||
pAttumen->MonsterYell(SAY_MOUNT, LANG_UNIVERSAL, 0);
|
||||
DoScriptText(SAY_MOUNT, pAttumen);
|
||||
Phase = 3;
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
pAttumen->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
@@ -224,21 +192,15 @@ struct TRINITY_DLL_DECL boss_attumenAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL1);
|
||||
case 1:
|
||||
DoYell(SAY_KILL2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL2);
|
||||
case 0: DoScriptText(SAY_KILL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
Unit *pMidnight = Unit::GetUnit(*m_creature, Midnight);
|
||||
if(pMidnight)
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
if (Unit *pMidnight = Unit::GetUnit(*m_creature, Midnight))
|
||||
{
|
||||
pMidnight->DealDamage(pMidnight, pMidnight->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}
|
||||
@@ -272,8 +234,7 @@ struct TRINITY_DLL_DECL boss_attumenAI : public ScriptedAI
|
||||
|
||||
if(CleaveTimer < diff)
|
||||
{
|
||||
Unit *target = m_creature->getVictim();
|
||||
DoCast(target, SPELL_SHADOWCLEAVE);
|
||||
DoCast(m_creature->getVictim(), SPELL_SHADOWCLEAVE);
|
||||
CleaveTimer = 10000 + (rand()%6)*1000;
|
||||
} else CleaveTimer -= diff;
|
||||
|
||||
@@ -287,14 +248,8 @@ struct TRINITY_DLL_DECL boss_attumenAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_RANDOM1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_RANDOM1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_RANDOM2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_RANDOM2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_RANDOM1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_RANDOM2, m_creature); break;
|
||||
}
|
||||
RandomYellTimer = 30000 + (rand()%31)*1000;
|
||||
} else RandomYellTimer -= diff;
|
||||
@@ -340,8 +295,7 @@ struct TRINITY_DLL_DECL boss_attumenAI : public ScriptedAI
|
||||
{
|
||||
if(spell->Mechanic == MECHANIC_DISARM)
|
||||
{
|
||||
DoYell(SAY_DISARMED, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DISARMED);
|
||||
DoScriptText(SAY_DISARMED, m_creature);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -24,26 +24,13 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_karazhan.h"
|
||||
|
||||
#define SAY_AGGRO "Hmm, unannounced visitors? Preparations must be made."
|
||||
#define SOUND_AGGRO 9211
|
||||
|
||||
#define SAY_SPECIAL_1 "Now, where was I? Oh yes..."
|
||||
#define SOUND_SPECIAL_1 9215
|
||||
|
||||
#define SAY_SPECIAL_2 "You rang?"
|
||||
#define SOUND_SPECIAL_2 9316
|
||||
|
||||
#define SAY_KILL_1 "One more for dinner this evening"
|
||||
#define SOUND_KILL_1 9214
|
||||
|
||||
#define SAY_KILL_2 "Time... Never enough time."
|
||||
#define SOUND_KILL_2 9314
|
||||
|
||||
#define SAY_KILL_3 "I've gone and made a mess."
|
||||
#define SOUND_KILL_3 9315
|
||||
|
||||
#define SAY_DEATH "How terribly clumsy of me..."
|
||||
#define SOUND_DEATH 9213
|
||||
#define SAY_AGGRO -1532011
|
||||
#define SAY_SPECIAL_1 -1532012
|
||||
#define SAY_SPECIAL_2 -1532013
|
||||
#define SAY_KILL_1 -1532014
|
||||
#define SAY_KILL_2 -1532015
|
||||
#define SAY_KILL_3 -1532016
|
||||
#define SAY_DEATH -1532017
|
||||
|
||||
#define SPELL_VANISH 29448
|
||||
#define SPELL_GARROTE 37066
|
||||
@@ -129,8 +116,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
||||
{
|
||||
StartEvent();
|
||||
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
AddsAttack();
|
||||
}
|
||||
|
||||
@@ -138,31 +124,37 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
||||
{
|
||||
switch (rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL_2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_KILL_3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL_3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_KILL_3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOROES_EVENT, DONE);
|
||||
|
||||
DeSpawnAdds();
|
||||
}
|
||||
|
||||
//remove aura from spell Garrote when Moroes dies
|
||||
Map *map = m_creature->GetMap();
|
||||
if (map->IsDungeon())
|
||||
{
|
||||
Map::PlayerList const &PlayerList = map->GetPlayers();
|
||||
|
||||
if (PlayerList.isEmpty())
|
||||
return;
|
||||
|
||||
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||
{
|
||||
if (i->getSource()->isAlive() && i->getSource()->HasAura(SPELL_GARROTE,0))
|
||||
i->getSource()->RemoveAurasDueToSpell(SPELL_GARROTE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8 CheckAdd(uint64 guid)
|
||||
{
|
||||
@@ -209,7 +201,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
||||
}
|
||||
else
|
||||
{
|
||||
for(uint8 i = 0; i < 5; ++i)
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
{
|
||||
switch(CheckAdd(AddGUID[i]))
|
||||
{
|
||||
@@ -316,18 +308,11 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SPECIAL_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SPECIAL_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SPECIAL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SPECIAL_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SPECIAL_2, m_creature); break;
|
||||
}
|
||||
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
target->CastSpell(target, SPELL_GARROTE,true);
|
||||
|
||||
m_creature->setFaction(16);
|
||||
|
||||
@@ -23,6 +23,9 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_PHASE_PORTAL -1532089
|
||||
#define EMOTE_PHASE_BANISH -1532090
|
||||
|
||||
#define SPELL_NETHERBURN_AURA 30522
|
||||
#define SPELL_VOIDZONE 37014 //Probably won't work
|
||||
#define SPELL_BERSERK 26662
|
||||
|
||||
@@ -24,24 +24,18 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_karazhan.h"
|
||||
|
||||
#define SAY_AGGRO "Madness has brought you here to me. I shall be your undoing!"
|
||||
#define SOUND_AGGRO 9218
|
||||
#define SAY_SUMMON1 "You face not Malchezaar alone, but the legions I command!"
|
||||
#define SOUND_SUMMON1 9322
|
||||
#define SAY_SUMMON2 "All realities, all dimensions are open to me!"
|
||||
#define SOUND_SUMMON2 9224
|
||||
#define SAY_PHASE2 "Simple fools! Time is the fire in which you'll burn!"
|
||||
#define SOUND_PHASE2 9220
|
||||
#define SAY_PHASE3 "How can you hope to withstand against such overwhelming power?"
|
||||
#define SOUND_PHASE3 9321
|
||||
#define SAY_PDEATH1 "You are, but a plaything, unfit even to amuse."
|
||||
#define SOUND_PDEATH1 9319
|
||||
#define SAY_PDEATH2 "Your greed, your foolishness has brought you to this end."
|
||||
#define SOUND_PDEATH2 9318
|
||||
#define SAY_PDEATH3 "Surely you did not think you could win."
|
||||
#define SOUND_PDEATH3 9222
|
||||
#define SAY_DEATH "I refuse to concede defeat. I am a prince of the Eredar! I am..."
|
||||
#define SOUND_DEATH 9221
|
||||
#define SAY_AGGRO -1532091
|
||||
#define SAY_AXE_TOSS1 -1532092
|
||||
#define SAY_AXE_TOSS2 -1532093
|
||||
#define SAY_SPECIAL1 -1532094
|
||||
#define SAY_SPECIAL2 -1532095
|
||||
#define SAY_SPECIAL3 -1532096
|
||||
#define SAY_SLAY1 -1532097
|
||||
#define SAY_SLAY2 -1532098
|
||||
#define SAY_SLAY3 -1532099
|
||||
#define SAY_SUMMON1 -1532100
|
||||
#define SAY_SUMMON2 -1532101
|
||||
#define SAY_DEATH -1532102
|
||||
|
||||
// 19 Coordinates for Infernal spawns
|
||||
struct InfernalPoint
|
||||
@@ -225,25 +219,15 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_PDEATH1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_PDEATH1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_PDEATH2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_PDEATH2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_PDEATH3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_PDEATH3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
AxesCleanup();
|
||||
ClearWeapons();
|
||||
@@ -265,8 +249,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -409,14 +392,8 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SUMMON1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SUMMON2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,8 +427,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
DoCast(m_creature, SPELL_EQUIP_AXES);
|
||||
|
||||
//text
|
||||
DoYell(SAY_PHASE2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_PHASE2);
|
||||
DoScriptText(SAY_AXE_TOSS1, m_creature);
|
||||
|
||||
//passive thrash aura
|
||||
m_creature->CastSpell(m_creature, SPELL_THRASH_AURA, true);
|
||||
@@ -491,8 +467,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
//remove thrash
|
||||
m_creature->RemoveAurasDueToSpell(SPELL_THRASH_AURA);
|
||||
|
||||
DoYell(SAY_PHASE3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_PHASE3);
|
||||
DoScriptText(SAY_AXE_TOSS2, m_creature);
|
||||
|
||||
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
for(uint32 i=0; i<2; ++i)
|
||||
@@ -582,14 +557,16 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
{
|
||||
if(SWPainTimer < diff)
|
||||
{
|
||||
Unit *target;
|
||||
Unit* target = NULL;
|
||||
if(phase == 1)
|
||||
target = m_creature->getVictim(); // the tank
|
||||
else //anyone but the tank
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 1);
|
||||
|
||||
DoCast(target, SPELL_SW_PAIN);
|
||||
SWPainTimer = 20000;
|
||||
if (target)
|
||||
DoCast(target, SPELL_SW_PAIN);
|
||||
|
||||
SWPainTimer = 20000;
|
||||
}else SWPainTimer -= diff;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_Shade_of_Aran
|
||||
SD%Complete: 95
|
||||
SDComment: Flame wreath missing cast animation, mods won't triggere. Drinking may cause client crash (core related)
|
||||
SDComment: Flame wreath missing cast animation, mods won't triggere.
|
||||
SDCategory: Karazhan
|
||||
EndScriptData */
|
||||
|
||||
@@ -26,60 +26,22 @@ EndScriptData */
|
||||
#include "def_karazhan.h"
|
||||
#include "GameObject.h"
|
||||
|
||||
//Aggro
|
||||
#define SAY_AGGRO1 "Please, no more. My son... he's gone mad!"
|
||||
#define SOUND_AGGRO1 9241
|
||||
|
||||
#define SAY_AGGRO2 "I'll not be tortured again!"
|
||||
#define SOUND_AGGRO2 9323
|
||||
|
||||
#define SAY_AGGRO3 "Who are you? What do you want? Stay away from me!"
|
||||
#define SOUND_AGGRO3 9324
|
||||
|
||||
//Flame Wreath
|
||||
#define SAY_FLAMEWREATH1 "I'll show you this beaten dog still has some teeth!"
|
||||
#define SOUND_FLAMEWREATH1 9245
|
||||
#define SAY_FLAMEWREATH2 "Burn you hellish fiends!"
|
||||
#define SOUND_FLAMEWREATH2 9326
|
||||
|
||||
//Blizzard
|
||||
#define SAY_BLIZZARD1 "I'll freeze you all!"
|
||||
#define SOUND_BLIZZARD1 9246
|
||||
#define SAY_BLIZZARD2 "Back to the cold dark with you!"
|
||||
#define SOUND_BLIZZARD2 9327
|
||||
|
||||
//Arcane Explosion
|
||||
#define SAY_EXPLOSION1 "Yes, yes, my son is quite powerful... but I have powers of my own!"
|
||||
#define SOUND_EXPLOSION1 9242
|
||||
#define SAY_EXPLOSION2 "I am not some simple jester! I am Nielas Aran!"
|
||||
#define SOUND_EXPLOSION2 9325
|
||||
|
||||
//Low Mana / AoE Pyroblast
|
||||
#define SAY_DRINK "Surely you would not deny an old man a replenishing drink? No, no I thought not."
|
||||
#define SOUND_DRINK 9248
|
||||
|
||||
//Summon Water Elementals
|
||||
#define SAY_ELEMENTALS "I'm not finished yet! No, I have a few more tricks up me sleeve."
|
||||
#define SOUND_ELEMENTALS 9251
|
||||
|
||||
//Player Death
|
||||
#define SAY_KILL1 "I want this nightmare to be over!"
|
||||
#define SOUND_KILL1 9250
|
||||
|
||||
#define SAY_KILL2 "Torment me no more!"
|
||||
#define SOUND_KILL2 9328
|
||||
|
||||
//Time over
|
||||
#define SAY_TIMEOVER "You've wasted enough of my time. Let these games be finished!"
|
||||
#define SOUND_TIMEOVER 9247
|
||||
|
||||
//Aran's death
|
||||
#define SAY_DEATH "At last... The nightmare is.. over..."
|
||||
#define SOUND_DEATH 9244
|
||||
|
||||
//Atiesh is equipped by a raid member
|
||||
#define SAY_ATIESH "Where did you get that?! Did HE send you?!"
|
||||
#define SOUND_ATIESH 9249
|
||||
#define SAY_AGGRO1 -1532073
|
||||
#define SAY_AGGRO2 -1532074
|
||||
#define SAY_AGGRO3 -1532075
|
||||
#define SAY_FLAMEWREATH1 -1532076
|
||||
#define SAY_FLAMEWREATH2 -1532077
|
||||
#define SAY_BLIZZARD1 -1532078
|
||||
#define SAY_BLIZZARD2 -1532079
|
||||
#define SAY_EXPLOSION1 -1532080
|
||||
#define SAY_EXPLOSION2 -1532081
|
||||
#define SAY_DRINK -1532082 //Low Mana / AoE Pyroblast
|
||||
#define SAY_ELEMENTALS -1532083
|
||||
#define SAY_KILL1 -1532084
|
||||
#define SAY_KILL2 -1532085
|
||||
#define SAY_TIMEOVER -1532086
|
||||
#define SAY_DEATH -1532087
|
||||
#define SAY_ATIESH -1532088 //Atiesh is equipped by a raid member
|
||||
|
||||
//Spells
|
||||
#define SPELL_FROSTBOLT 29954
|
||||
@@ -190,21 +152,14 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_KILL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_KILL2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_KILL1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(NULL, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -218,18 +173,9 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_AGGRO1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_AGGRO2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_AGGRO3, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO3);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_AGGRO1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_AGGRO2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_AGGRO3, m_creature); break;
|
||||
}
|
||||
|
||||
if(pInstance)
|
||||
@@ -277,38 +223,46 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
if(CloseDoorTimer)
|
||||
if(CloseDoorTimer <= diff)
|
||||
{
|
||||
if(pInstance)
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(1);
|
||||
CloseDoorTimer = 0;
|
||||
}
|
||||
else CloseDoorTimer -= diff;
|
||||
{
|
||||
if(CloseDoorTimer <= diff)
|
||||
{
|
||||
if(pInstance)
|
||||
{
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(1);
|
||||
CloseDoorTimer = 0;
|
||||
}
|
||||
}else CloseDoorTimer -= diff;
|
||||
}
|
||||
|
||||
//Cooldowns for casts
|
||||
if (ArcaneCooldown)
|
||||
{
|
||||
if (ArcaneCooldown >= diff)
|
||||
ArcaneCooldown -= diff;
|
||||
else ArcaneCooldown = 0;
|
||||
}
|
||||
|
||||
if (FireCooldown)
|
||||
{
|
||||
if (FireCooldown >= diff)
|
||||
FireCooldown -= diff;
|
||||
else FireCooldown = 0;
|
||||
}
|
||||
|
||||
if (FrostCooldown)
|
||||
if (FrostCooldown >= diff)
|
||||
{
|
||||
if (FrostCooldown >= diff)
|
||||
FrostCooldown -= diff;
|
||||
else FrostCooldown = 0;
|
||||
}
|
||||
|
||||
if(!Drinking && m_creature->GetMaxPower(POWER_MANA) && (m_creature->GetPower(POWER_MANA)*100 / m_creature->GetMaxPower(POWER_MANA)) < 20)
|
||||
{
|
||||
Drinking = true;
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
|
||||
DoYell(SAY_DRINK, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DRINK);
|
||||
DoScriptText(SAY_DRINK, m_creature);
|
||||
|
||||
if (!DrinkInturrupted)
|
||||
{
|
||||
@@ -397,10 +351,8 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
DoCast(m_creature, SPELL_AOE_CS);
|
||||
break;
|
||||
case 1:
|
||||
Unit* pUnit;
|
||||
pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (pUnit)
|
||||
DoCast(pUnit, SPELL_CHAINSOFICE);
|
||||
if (Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(pUnit, SPELL_CHAINSOFICE);
|
||||
break;
|
||||
}
|
||||
SecondarySpellTimer = 5000 + (rand()%15000);
|
||||
@@ -433,14 +385,9 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
case SUPER_AE:
|
||||
|
||||
if (rand()%2)
|
||||
{
|
||||
DoYell(SAY_EXPLOSION1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_EXPLOSION1);
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_EXPLOSION2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_EXPLOSION2);
|
||||
}
|
||||
DoScriptText(SAY_EXPLOSION1, m_creature);
|
||||
else
|
||||
DoScriptText(SAY_EXPLOSION2, m_creature);
|
||||
|
||||
m_creature->CastSpell(m_creature, SPELL_BLINK_CENTER, true);
|
||||
m_creature->CastSpell(m_creature, SPELL_PLAYERPULL, true);
|
||||
@@ -450,14 +397,9 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
|
||||
case SUPER_FLAME:
|
||||
if (rand()%2)
|
||||
{
|
||||
DoYell(SAY_FLAMEWREATH1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_FLAMEWREATH1);
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_FLAMEWREATH2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_FLAMEWREATH2);
|
||||
}
|
||||
DoScriptText(SAY_FLAMEWREATH1, m_creature);
|
||||
else
|
||||
DoScriptText(SAY_FLAMEWREATH2, m_creature);
|
||||
|
||||
FlameWreathTimer = 20000;
|
||||
FlameWreathCheckTime = 500;
|
||||
@@ -472,14 +414,9 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
case SUPER_BLIZZARD:
|
||||
|
||||
if (rand()%2)
|
||||
{
|
||||
DoYell(SAY_BLIZZARD1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_BLIZZARD1);
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_BLIZZARD2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_BLIZZARD2);
|
||||
}
|
||||
DoScriptText(SAY_BLIZZARD1, m_creature);
|
||||
else
|
||||
DoScriptText(SAY_BLIZZARD2, m_creature);
|
||||
|
||||
Creature* Spawn = NULL;
|
||||
Spawn = DoSpawnCreature(CREATURE_ARAN_BLIZZARD, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 25000);
|
||||
@@ -508,8 +445,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
DoYell(SAY_ELEMENTALS, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ELEMENTALS);
|
||||
DoScriptText(SAY_ELEMENTALS, m_creature);
|
||||
}
|
||||
|
||||
if(BerserkTimer < diff)
|
||||
@@ -524,8 +460,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
DoYell(SAY_TIMEOVER, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TIMEOVER);
|
||||
DoScriptText(SAY_TIMEOVER, m_creature);
|
||||
|
||||
BerserkTimer = 60000;
|
||||
}else BerserkTimer -= diff;
|
||||
@@ -582,15 +517,9 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
|
||||
switch (CurrentNormalSpell)
|
||||
{
|
||||
case SPELL_ARCMISSLE:
|
||||
ArcaneCooldown = 5000;
|
||||
break;
|
||||
case SPELL_FIREBALL:
|
||||
FireCooldown = 5000;
|
||||
break;
|
||||
case SPELL_FROSTBOLT:
|
||||
FrostCooldown = 5000;
|
||||
break;
|
||||
case SPELL_ARCMISSLE: ArcaneCooldown = 5000; break;
|
||||
case SPELL_FIREBALL: FireCooldown = 5000; break;
|
||||
case SPELL_FROSTBOLT: FrostCooldown = 5000; break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -24,6 +24,15 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_karazhan.h"
|
||||
|
||||
#define SAY_SLAY1 -1532065
|
||||
#define SAY_SLAY2 -1532066
|
||||
#define SAY_DEATH -1532067
|
||||
#define SAY_AGGRO -1532068
|
||||
#define SAY_SACRIFICE1 -1532069
|
||||
#define SAY_SACRIFICE2 -1532070
|
||||
#define SAY_SUMMON1 -1532071
|
||||
#define SAY_SUMMON2 -1532072
|
||||
|
||||
#define SPELL_SUMMON_DEMONCHAINS 30120 // Summons demonic chains that maintain the ritual of sacrifice.
|
||||
#define SPELL_DEMON_CHAINS 30206 // Instant - Visual Effect
|
||||
#define SPELL_ENRAGE 23537 // Increases the caster's attack speed by 50% and the Physical damage it deals by 219 to 281 for 10 min.
|
||||
@@ -42,27 +51,6 @@ EndScriptData */
|
||||
#define SPELL_AMPLIFY_FLAMES 30053 // Increases the Fire damage taken by an enemy by 500 for 25 sec.
|
||||
#define SPELL_FIREBOLT 18086 // Blasts a target for 150 Fire damage.
|
||||
|
||||
#define SAY_SLAY1 "Your blood will anoint my circle."
|
||||
#define SOUND_SLAY1 9264
|
||||
#define SAY_SLAY2 "The great one will be pleased."
|
||||
#define SOUND_SLAY2 9329
|
||||
|
||||
#define SAY_DEATH "My life, is yours. Oh great one."
|
||||
#define SOUND_DEATH 9262
|
||||
|
||||
#define SAY_AGGRO "Ah, you're just in time. The rituals are about to begin."
|
||||
#define SOUND_AGGRO 9260
|
||||
|
||||
#define SAY_SACRIFICE1 "Please, accept this humble offering, oh great one."
|
||||
#define SOUND_SACRIFICE1 9263
|
||||
#define SAY_SACRIFICE2 "Let the sacrifice serve his testament to my fealty."
|
||||
#define SOUND_SACRIFICE2 9330
|
||||
|
||||
#define SAY_SUMMON1 "Come, you dwellers in the dark. Rally to my call!"
|
||||
#define SOUND_SUMMON1 9265
|
||||
#define SAY_SUMMON2 "Gather, my pets. There is plenty for all."
|
||||
#define SOUND_SUMMON2 9331
|
||||
|
||||
#define CREATURE_DEMONCHAINS 17248
|
||||
#define CREATURE_FIENDISHIMP 17267
|
||||
#define CREATURE_PORTAL 17265
|
||||
@@ -225,8 +213,7 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -243,14 +230,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SLAY1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SLAY2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SLAY2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,8 +249,7 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_TERESTIAN_EVENT, DONE);
|
||||
@@ -317,14 +297,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
Chains->CastSpell(Chains, SPELL_DEMON_CHAINS, true);
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SACRIFICE1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SACRIFICE1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SACRIFICE2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SACRIFICE2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SACRIFICE1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SACRIFICE2, m_creature); break;
|
||||
}
|
||||
SacrificeTimer = 30000;
|
||||
}
|
||||
@@ -350,14 +324,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
SummonedPortals = true;
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_SUMMON1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_SUMMON2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_SUMMON2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
||||
}
|
||||
}
|
||||
uint32 random = rand()%2;
|
||||
@@ -371,11 +339,13 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
}else SummonTimer -= diff;
|
||||
|
||||
if(!Berserk)
|
||||
if(BerserkTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
Berserk = true;
|
||||
}else BerserkTimer -= diff;
|
||||
{
|
||||
if(BerserkTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_BERSERK);
|
||||
Berserk = true;
|
||||
}else BerserkTimer -= diff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
@@ -28,6 +28,29 @@ EndScriptData */
|
||||
/*** OPERA WIZARD OF OZ EVENT *****/
|
||||
/*********************************/
|
||||
|
||||
#define SAY_DOROTHEE_DEATH -1532025
|
||||
#define SAY_DOROTHEE_SUMMON -1532026
|
||||
#define SAY_DOROTHEE_TITO_DEATH -1532027
|
||||
#define SAY_DOROTHEE_AGGRO -1532028
|
||||
|
||||
#define SAY_ROAR_AGGRO -1532029
|
||||
#define SAY_ROAR_DEATH -1532030
|
||||
#define SAY_ROAR_SLAY -1532031
|
||||
|
||||
#define SAY_STRAWMAN_AGGRO -1532032
|
||||
#define SAY_STRAWMAN_DEATH -1532033
|
||||
#define SAY_STRAWMAN_SLAY -1532034
|
||||
|
||||
#define SAY_TINHEAD_AGGRO -1532035
|
||||
#define SAY_TINHEAD_DEATH -1532036
|
||||
#define SAY_TINHEAD_SLAY -1532037
|
||||
#define EMOTE_RUST -1532038
|
||||
|
||||
#define SAY_CRONE_AGGRO -1532039
|
||||
#define SAY_CRONE_AGGRO2 -1532040
|
||||
#define SAY_CRONE_DEATH -1532041
|
||||
#define SAY_CRONE_SLAY -1532042
|
||||
|
||||
/**** Spells ****/
|
||||
// Dorothee
|
||||
#define SPELL_WATERBOLT 31012
|
||||
@@ -63,46 +86,6 @@ EndScriptData */
|
||||
#define CREATURE_CYCLONE 18412
|
||||
#define CREATURE_CRONE 18168
|
||||
|
||||
/***** Speech and Sound *****/
|
||||
#define SAY_DOROTHEE_DEATH "Oh at last, at last. I can go home."
|
||||
#define SOUND_DOROTHEE_DEATH 9190
|
||||
#define SAY_DOROTHEE_SUMMON "Don't let them hurt us, Tito! Oh, you won't, will you?"
|
||||
#define SOUND_DOROTHEE_SUMMON 9191
|
||||
#define SAY_DOROTHEE_TITO_DEATH "Tito, oh Tito, no!"
|
||||
#define SOUND_DOROTHEE_TITO_DEATH 9192
|
||||
#define SAY_DOROTHEE_AGGRO "Oh dear, we simply must find a way home! The old wizard could be our only hope! Strawman, Roar, Tinhead, will you... wait! Oh golly, look! We have visitors!"
|
||||
#define SOUND_DOROTHEE_AGGRO 9195
|
||||
|
||||
#define SAY_ROAR_AGGRO "Wanna fight? Huh? Do ya? C'mon, I'll fight you with both claws behind my back!"
|
||||
#define SOUND_ROAR_AGGRO 9227
|
||||
#define SAY_ROAR_DEATH "You didn't have to go and do that."
|
||||
#define SOUND_ROAR_DEATH 9229
|
||||
#define SAY_ROAR_SLAY "I think I'm going to go take fourty winks"
|
||||
#define SOUND_ROAR_SLAY 9230
|
||||
|
||||
#define SAY_STRAWMAN_AGGRO "Now what should I do with you? I simply can't make up my mind."
|
||||
#define SOUND_STRAWMAN_AGGRO 9254
|
||||
#define SAY_STRAWMAN_DEATH "Don't let them make a mattress... out of me."
|
||||
#define SOUND_STRAWMAN_DEATH 9256
|
||||
#define SAY_STRAWMAN_SLAY "I guess I'm not a failure after all."
|
||||
#define SOUND_STRAWMAN_SLAY 9257
|
||||
|
||||
#define SAY_TINHEAD_AGGRO "I could really use a heart. Say, can I have yours?"
|
||||
#define SOUND_TINHEAD_AGGRO 9268
|
||||
#define SAY_TINHEAD_DEATH "Back to being an old rustbucket."
|
||||
#define SOUND_TINHEAD_DEATH 9270
|
||||
#define SAY_TINHEAD_SLAY "Guess I'm not so rusty, after all."
|
||||
#define SOUND_TINHEAD_SLAY 9271
|
||||
|
||||
#define SAY_CRONE_AGGRO "Woe to each and every one of you my pretties!"
|
||||
#define SOUND_CRONE_AGGRO 9179
|
||||
#define SAY_CRONE_AGGRO2 "It will all be over soon!"
|
||||
#define SOUND_CRONE_AGGRO2 9307
|
||||
#define SAY_CRONE_DEATH "How could you? What a cruel, cruel world!"
|
||||
#define SOUND_CRONE_DEATH 9178
|
||||
#define SAY_CRONE_SLAY "Fixed you, didn't I?"
|
||||
#define SOUND_CRONE_SLAY 9180
|
||||
|
||||
void SummonCroneIfReady(ScriptedInstance* pInstance, Creature *_Creature)
|
||||
{
|
||||
pInstance->SetData(DATA_OPERA_OZ_DEATHCOUNT, 0); // Increment DeathCount
|
||||
@@ -113,8 +96,6 @@ void SummonCroneIfReady(ScriptedInstance* pInstance, Creature *_Creature)
|
||||
{
|
||||
if(_Creature->getVictim())
|
||||
Crone->AI()->AttackStart(_Creature->getVictim());
|
||||
|
||||
Crone->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -154,16 +135,14 @@ struct TRINITY_DLL_DECL boss_dorotheeAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_DOROTHEE_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DOROTHEE_AGGRO);
|
||||
DoScriptText(SAY_DOROTHEE_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void SummonTito(); // See below
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_DOROTHEE_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DOROTHEE_DEATH);
|
||||
DoScriptText(SAY_DOROTHEE_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
SummonCroneIfReady(pInstance, m_creature);
|
||||
@@ -188,11 +167,13 @@ struct TRINITY_DLL_DECL boss_dorotheeAI : public ScriptedAI
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(AggroTimer)
|
||||
if(AggroTimer <= diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
{
|
||||
if(AggroTimer <= diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
}
|
||||
|
||||
if(!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
@@ -248,8 +229,7 @@ struct TRINITY_DLL_DECL mob_titoAI : public ScriptedAI
|
||||
if(Dorothee && Dorothee->isAlive())
|
||||
{
|
||||
((boss_dorotheeAI*)Dorothee->AI())->TitoDied = true;
|
||||
Dorothee->MonsterYell(SAY_DOROTHEE_TITO_DEATH, LANG_UNIVERSAL, 0);
|
||||
DoPlaySoundToSet(Dorothee, SOUND_DOROTHEE_TITO_DEATH);
|
||||
DoScriptText(SAY_DOROTHEE_TITO_DEATH, Dorothee);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -274,8 +254,7 @@ void boss_dorotheeAI::SummonTito()
|
||||
Creature* Tito = DoSpawnCreature(CREATURE_TITO, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45000);
|
||||
if(Tito)
|
||||
{
|
||||
DoYell(SAY_DOROTHEE_SUMMON, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DOROTHEE_SUMMON);
|
||||
DoScriptText(SAY_DOROTHEE_SUMMON, m_creature);
|
||||
((mob_titoAI*)Tito->AI())->DorotheeGUID = m_creature->GetGUID();
|
||||
Tito->AI()->AttackStart(m_creature->getVictim());
|
||||
SummonedTito = true;
|
||||
@@ -322,8 +301,7 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_STRAWMAN_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_STRAWMAN_AGGRO);
|
||||
DoScriptText(SAY_STRAWMAN_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void SpellHit(Unit* caster, const SpellEntry *Spell)
|
||||
@@ -334,8 +312,7 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_STRAWMAN_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_STRAWMAN_DEATH);
|
||||
DoScriptText(SAY_STRAWMAN_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
SummonCroneIfReady(pInstance, m_creature);
|
||||
@@ -343,18 +320,19 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_STRAWMAN_SLAY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_STRAWMAN_SLAY);
|
||||
DoScriptText(SAY_STRAWMAN_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(AggroTimer)
|
||||
if(AggroTimer <= diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
{
|
||||
if(AggroTimer <= diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
}
|
||||
|
||||
if(!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
@@ -402,8 +380,7 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_TINHEAD_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TINHEAD_AGGRO);
|
||||
DoScriptText(SAY_TINHEAD_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who)
|
||||
@@ -424,8 +401,7 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_TINHEAD_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TINHEAD_DEATH);
|
||||
DoScriptText(SAY_TINHEAD_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
SummonCroneIfReady(pInstance, m_creature);
|
||||
@@ -433,18 +409,19 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_TINHEAD_SLAY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TINHEAD_SLAY);
|
||||
DoScriptText(SAY_TINHEAD_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(AggroTimer)
|
||||
{
|
||||
if(AggroTimer < diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
}
|
||||
|
||||
if(!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
@@ -460,7 +437,7 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
|
||||
if(RustTimer < diff)
|
||||
{
|
||||
RustCount++;
|
||||
DoTextEmote("begins to rust", NULL);
|
||||
DoScriptText(EMOTE_RUST, m_creature);
|
||||
DoCast(m_creature, SPELL_RUST);
|
||||
RustTimer = 6000;
|
||||
}else RustTimer -= diff;
|
||||
@@ -511,14 +488,12 @@ struct TRINITY_DLL_DECL boss_roarAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_ROAR_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROAR_AGGRO);
|
||||
DoScriptText(SAY_ROAR_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_ROAR_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROAR_DEATH);
|
||||
DoScriptText(SAY_ROAR_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
SummonCroneIfReady(pInstance, m_creature);
|
||||
@@ -526,18 +501,19 @@ struct TRINITY_DLL_DECL boss_roarAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_ROAR_SLAY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROAR_SLAY);
|
||||
DoScriptText(SAY_ROAR_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(AggroTimer)
|
||||
{
|
||||
if(AggroTimer <= diff)
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
AggroTimer = 0;
|
||||
}else AggroTimer -= diff;
|
||||
}
|
||||
|
||||
if(!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
@@ -587,22 +563,16 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_CRONE_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CRONE_AGGRO);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_CRONE_AGGRO2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CRONE_AGGRO2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_CRONE_AGGRO, m_creature); break;
|
||||
case 1: DoScriptText(SAY_CRONE_AGGRO2, m_creature); break;
|
||||
}
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_CRONE_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_CRONE_DEATH);
|
||||
DoScriptText(SAY_CRONE_DEATH, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -715,21 +685,18 @@ CreatureAI* GetAI_mob_cyclone(Creature* _Creature)
|
||||
/**** Opera Red Riding Hood Event ****/
|
||||
/************************************/
|
||||
|
||||
#define GOSSIP_GRANDMA "What phat lewtz you have grandmother?"
|
||||
/**** Yells for the Wolf ****/
|
||||
#define SAY_WOLF_AGGRO -1532043
|
||||
#define SAY_WOLF_SLAY -1532044
|
||||
#define SAY_WOLF_HOOD -1532045
|
||||
#define SOUND_WOLF_DEATH 9275 //Only sound on death, no text.
|
||||
|
||||
/**** Spells For The Wolf ****/
|
||||
#define SPELL_LITTLE_RED_RIDING_HOOD 30768
|
||||
#define SPELL_TERRIFYING_HOWL 30752
|
||||
#define SPELL_WIDE_SWIPE 30761
|
||||
|
||||
/**** Yells for the Wolf ****/
|
||||
#define SAY_WOLF_AGGRO "All the better to own you with!"
|
||||
#define SOUND_WOLF_AGGRO 9276
|
||||
#define SOUND_WOLF_DEATH 9275 // No speech
|
||||
#define SAY_WOLF_SLAY "Mmmm... delicious."
|
||||
#define SOUND_WOLF_SLAY 9277
|
||||
#define SAY_WOLF_HOOD "Run away little girl, run away!"
|
||||
#define SOUND_WOLF_HOOD 9278
|
||||
#define GOSSIP_GRANDMA "What phat lewtz you have grandmother?"
|
||||
|
||||
/**** The Wolf's Entry ****/
|
||||
#define CREATURE_BIG_BAD_WOLF 17521
|
||||
@@ -795,8 +762,7 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_WOLF_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_WOLF_AGGRO);
|
||||
DoScriptText(SAY_WOLF_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
@@ -826,8 +792,7 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target && target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
DoYell(SAY_WOLF_HOOD, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_WOLF_HOOD);
|
||||
DoScriptText(SAY_WOLF_HOOD, m_creature);
|
||||
|
||||
DoCast(target, SPELL_LITTLE_RED_RIDING_HOOD, true);
|
||||
TempThreat = m_creature->getThreatManager().getThreat(target);
|
||||
@@ -883,6 +848,20 @@ CreatureAI* GetAI_boss_bigbadwolf(Creature* _Creature)
|
||||
/******** Opera Romeo and Juliet Event *******/
|
||||
/********************************************/
|
||||
|
||||
/**** Speech *****/
|
||||
#define SAY_JULIANNE_AGGRO -1532046
|
||||
#define SAY_JULIANNE_ENTER -1532047
|
||||
#define SAY_JULIANNE_DEATH01 -1532048
|
||||
#define SAY_JULIANNE_DEATH02 -1532049
|
||||
#define SAY_JULIANNE_RESURRECT -1532050
|
||||
#define SAY_JULIANNE_SLAY -1532051
|
||||
|
||||
#define SAY_ROMULO_AGGRO -1532052
|
||||
#define SAY_ROMULO_DEATH -1532053
|
||||
#define SAY_ROMULO_ENTER -1532054
|
||||
#define SAY_ROMULO_RESURRECT -1532055
|
||||
#define SAY_ROMULO_SLAY -1532056
|
||||
|
||||
/***** Spells For Julianne *****/
|
||||
#define SPELL_BLINDING_PASSION 30890
|
||||
#define SPELL_DEVOTION 30887
|
||||
@@ -900,33 +879,6 @@ CreatureAI* GetAI_boss_bigbadwolf(Creature* _Creature)
|
||||
#define SPELL_UNDYING_LOVE 30951
|
||||
#define SPELL_RES_VISUAL 24171
|
||||
|
||||
/**** Speech and Text *****/
|
||||
/****** Julianne *******/
|
||||
#define SAY_JULIANNE_AGGRO "What devil art thou, that dost torment me thus?"
|
||||
#define SOUND_JULIANNE_AGGRO 9196
|
||||
#define SAY_JULIANNE_ENTER "Where is my lord? Where is my Romulo?"
|
||||
#define SOUND_JULIANNE_ENTER 9199
|
||||
#define SAY_JULIANNE_DEATH01 "Romulo, I come! Oh... this do I drink to thee!"
|
||||
#define SOUND_JULIANNE_DEATH01 9198
|
||||
#define SAY_JULIANNE_DEATH02 "Where is my Lord? Where is my Romulo? Ohh, happy dagger! This is thy sheath! There rust, and let me die!"
|
||||
#define SOUND_JULIANNE_DEATH02 9310
|
||||
#define SAY_JULIANNE_RESURRECT "Come, gentle night; and give me back my Romulo!"
|
||||
#define SOUND_JULIANNE_RESURRECT 9200
|
||||
#define SAY_JULIANNE_SLAY "Parting is such sweet sorrow."
|
||||
#define SOUND_JULIANNE_SLAY 9201
|
||||
|
||||
/****** Romulo *******/
|
||||
#define SAY_ROMULO_AGGRO "Wilt thou provoke me? Then have at thee, boy!"
|
||||
#define SOUND_ROMULO_AGGRO 9233
|
||||
#define SAY_ROMULO_DEATH "Thou smilest... upon the stroke that... murders me."
|
||||
#define SOUND_ROMULO_DEATH 9235
|
||||
#define SAY_ROMULO_ENTER "This day's black fate on more days doth depend. This but begins the woe. Others must end."
|
||||
#define SOUND_ROMULO_ENTER 9236
|
||||
#define SAY_ROMULO_RESURRECT "Thou detestable maw, thou womb of death; I enforce thy rotten jaws to open!"
|
||||
#define SOUND_ROMULO_RESURRECT 9237
|
||||
#define SAY_ROMULO_SLAY "How well my comfort is revived by this!"
|
||||
#define SOUND_ROMULO_SLAY 9238
|
||||
|
||||
/*** Misc. Information ****/
|
||||
#define CREATURE_ROMULO 17533
|
||||
#define ROMULO_X -10900
|
||||
@@ -1049,8 +1001,7 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_DEATH02, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_DEATH02);
|
||||
DoScriptText(SAY_JULIANNE_DEATH02, m_creature);
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -1063,8 +1014,7 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_SLAY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_SLAY);
|
||||
DoScriptText(SAY_JULIANNE_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff);
|
||||
@@ -1116,8 +1066,7 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_ROMULO_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROMULO_AGGRO);
|
||||
DoScriptText(SAY_ROMULO_AGGRO, m_creature);
|
||||
if(JulianneGUID)
|
||||
{
|
||||
Creature* Julianne = ((Creature*)Unit::GetUnit((*m_creature), JulianneGUID));
|
||||
@@ -1139,14 +1088,12 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_ROMULO_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROMULO_DEATH);
|
||||
DoScriptText(SAY_ROMULO_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
DoYell(SAY_ROMULO_SLAY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROMULO_SLAY);
|
||||
DoScriptText(SAY_ROMULO_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff);
|
||||
@@ -1159,8 +1106,7 @@ void boss_julianneAI::DamageTaken(Unit* done_by, uint32 &damage)
|
||||
|
||||
if(Phase == PHASE_JULIANNE)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_DEATH01, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_DEATH01);
|
||||
DoScriptText(SAY_JULIANNE_DEATH01, m_creature);
|
||||
m_creature->InterruptNonMeleeSpells(true);
|
||||
DoCast(m_creature, SPELL_DRINK_POISON);
|
||||
PretendToDie(m_creature);
|
||||
@@ -1254,21 +1200,23 @@ void boss_romuloAI::DamageTaken(Unit* done_by, uint32 &damage)
|
||||
void boss_julianneAI::UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(EntryYellTimer)
|
||||
if(EntryYellTimer < diff)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_ENTER, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_ENTER);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
EntryYellTimer = 0;
|
||||
}else EntryYellTimer -= diff;
|
||||
{
|
||||
if(EntryYellTimer < diff)
|
||||
{
|
||||
DoScriptText(SAY_JULIANNE_ENTER, m_creature);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
EntryYellTimer = 0;
|
||||
}else EntryYellTimer -= diff;
|
||||
}
|
||||
|
||||
if(AggroYellTimer)
|
||||
if(AggroYellTimer < diff)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_AGGRO);
|
||||
AggroYellTimer = 0;
|
||||
}else AggroYellTimer -= diff;
|
||||
{
|
||||
if(AggroYellTimer < diff)
|
||||
{
|
||||
DoScriptText(SAY_JULIANNE_AGGRO, m_creature);
|
||||
AggroYellTimer = 0;
|
||||
}else AggroYellTimer -= diff;
|
||||
}
|
||||
|
||||
if(Phase == PHASE_ROMULO && !SummonedRomulo)
|
||||
{
|
||||
@@ -1295,19 +1243,20 @@ void boss_julianneAI::UpdateAI(const uint32 diff)
|
||||
return;
|
||||
|
||||
if(RomuloDead)
|
||||
{
|
||||
if(ResurrectTimer < diff)
|
||||
{
|
||||
Creature* Romulo = ((Creature*)Unit::GetUnit((*m_creature), RomuloGUID));
|
||||
if(Romulo && ((boss_romuloAI*)Romulo->AI())->IsFakingDeath)
|
||||
{
|
||||
DoYell(SAY_JULIANNE_RESURRECT, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_JULIANNE_RESURRECT);
|
||||
Resurrect(Romulo);
|
||||
((boss_romuloAI*)Romulo->AI())->IsFakingDeath = false;
|
||||
ResurrectTimer = 10000;
|
||||
}
|
||||
RomuloDead = false;
|
||||
}else ResurrectTimer -= diff;
|
||||
{
|
||||
Creature* Romulo = ((Creature*)Unit::GetUnit((*m_creature), RomuloGUID));
|
||||
if(Romulo && ((boss_romuloAI*)Romulo->AI())->IsFakingDeath)
|
||||
{
|
||||
DoScriptText(SAY_JULIANNE_RESURRECT, m_creature);
|
||||
Resurrect(Romulo);
|
||||
((boss_romuloAI*)Romulo->AI())->IsFakingDeath = false;
|
||||
ResurrectTimer = 10000;
|
||||
}
|
||||
RomuloDead = false;
|
||||
}else ResurrectTimer -= diff;
|
||||
}
|
||||
|
||||
if(BlindingPassionTimer < diff)
|
||||
{
|
||||
@@ -1336,8 +1285,7 @@ void boss_julianneAI::UpdateAI(const uint32 diff)
|
||||
DoCast(Romulo, SPELL_ETERNAL_AFFECTION);
|
||||
else
|
||||
return;
|
||||
}
|
||||
else DoCast(m_creature, SPELL_ETERNAL_AFFECTION);
|
||||
}else DoCast(m_creature, SPELL_ETERNAL_AFFECTION);
|
||||
|
||||
EternalAffectionTimer = 45000 + rand()%15000;
|
||||
}else EternalAffectionTimer -= diff;
|
||||
@@ -1351,19 +1299,20 @@ void boss_romuloAI::UpdateAI(const uint32 diff)
|
||||
return;
|
||||
|
||||
if(JulianneDead)
|
||||
{
|
||||
if(ResurrectTimer < diff)
|
||||
{
|
||||
Creature* Julianne = ((Creature*)Unit::GetUnit((*m_creature), JulianneGUID));
|
||||
if(Julianne && ((boss_julianneAI*)Julianne->AI())->IsFakingDeath)
|
||||
{
|
||||
DoYell(SAY_ROMULO_RESURRECT, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ROMULO_RESURRECT);
|
||||
Resurrect(Julianne);
|
||||
((boss_julianneAI*)Julianne->AI())->IsFakingDeath = false;
|
||||
ResurrectTimer = 10000;
|
||||
}
|
||||
JulianneDead = false;
|
||||
}else ResurrectTimer -= diff;
|
||||
{
|
||||
Creature* Julianne = ((Creature*)Unit::GetUnit((*m_creature), JulianneGUID));
|
||||
if(Julianne && ((boss_julianneAI*)Julianne->AI())->IsFakingDeath)
|
||||
{
|
||||
DoScriptText(SAY_ROMULO_RESURRECT, m_creature);
|
||||
Resurrect(Julianne);
|
||||
((boss_julianneAI*)Julianne->AI())->IsFakingDeath = false;
|
||||
ResurrectTimer = 10000;
|
||||
}
|
||||
JulianneDead = false;
|
||||
}else ResurrectTimer -= diff;
|
||||
}
|
||||
|
||||
if(BackwardLungeTimer < diff)
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#define DATA_NETHERSPITE_EVENT 9
|
||||
#define DATA_CHESS_EVENT 10
|
||||
#define DATA_MALCHEZZAR_EVENT 11
|
||||
#define DATA_NETHERBANE_EVENT 12
|
||||
#define DATA_NIGHTBANE_EVENT 12
|
||||
#define DATA_OPERA_PERFORMANCE 13
|
||||
#define DATA_OPERA_OZ_DEATHCOUNT 14
|
||||
#define DATA_KILREK 15
|
||||
|
||||
@@ -38,18 +38,15 @@ EndScriptData */
|
||||
8 - Netherspite (optional)
|
||||
9 - Chess Event
|
||||
10 - Prince Malchezzar
|
||||
11 - Netherbane
|
||||
11 - Nightbane
|
||||
*/
|
||||
struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
{
|
||||
instance_karazhan(Map* map) : ScriptedInstance(map)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
instance_karazhan(Map* map) : ScriptedInstance(map) {Initialize();}
|
||||
|
||||
uint32 Encounters[ENCOUNTERS];
|
||||
|
||||
uint32 OperaEvent; // 0 - OZ, 1 - HOOD, 2 - RAJ
|
||||
uint32 OperaEvent;
|
||||
uint32 OzDeathCount;
|
||||
|
||||
uint64 CurtainGUID;
|
||||
@@ -69,7 +66,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
for (uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||
Encounters[i] = NOT_STARTED;
|
||||
|
||||
OperaEvent = rand()%3; // This never gets altered.
|
||||
OperaEvent = urand(1,3); // 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered.
|
||||
OzDeathCount = 0;
|
||||
|
||||
CurtainGUID = 0;
|
||||
@@ -90,7 +87,8 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
bool IsEncounterInProgress() const
|
||||
{
|
||||
for (uint8 i = 0; i < ENCOUNTERS; ++i)
|
||||
if (Encounters[i] == IN_PROGRESS) return true;
|
||||
if (Encounters[i] == IN_PROGRESS)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -110,7 +108,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
case DATA_NETHERSPITE_EVENT: return Encounters[8];
|
||||
case DATA_CHESS_EVENT: return Encounters[9];
|
||||
case DATA_MALCHEZZAR_EVENT: return Encounters[10];
|
||||
case DATA_NETHERBANE_EVENT: return Encounters[11];
|
||||
case DATA_NIGHTBANE_EVENT: return Encounters[11];
|
||||
case DATA_OPERA_PERFORMANCE: return OperaEvent;
|
||||
case DATA_OPERA_OZ_DEATHCOUNT: return OzDeathCount;
|
||||
}
|
||||
@@ -120,7 +118,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 entry)
|
||||
{
|
||||
switch (entry)
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case 17229: KilrekGUID = creature->GetGUID(); break;
|
||||
case 15688: TerestianGUID = creature->GetGUID(); break;
|
||||
@@ -128,9 +126,9 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
}
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 identifier)
|
||||
uint64 GetData64(uint32 data)
|
||||
{
|
||||
switch (identifier)
|
||||
switch (data)
|
||||
{
|
||||
case DATA_KILREK: return KilrekGUID;
|
||||
case DATA_TERESTIAN: return TerestianGUID;
|
||||
@@ -148,12 +146,16 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 identifier, uint32 data)
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch (identifier)
|
||||
switch (type)
|
||||
{
|
||||
case DATA_ATTUMEN_EVENT: Encounters[0] = data; break;
|
||||
case DATA_MOROES_EVENT: Encounters[1] = data; break;
|
||||
case DATA_MOROES_EVENT:
|
||||
if (Encounters[1] == DONE)
|
||||
break;
|
||||
Encounters[1] = data;
|
||||
break;
|
||||
case DATA_MAIDENOFVIRTUE_EVENT: Encounters[2] = data; break;
|
||||
case DATA_OPTIONAL_BOSS_EVENT: Encounters[3] = data; break;
|
||||
case DATA_OPERA_EVENT: Encounters[4] = data; break;
|
||||
@@ -163,7 +165,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance
|
||||
case DATA_NETHERSPITE_EVENT: Encounters[8] = data; break;
|
||||
case DATA_CHESS_EVENT: Encounters[9] = data; break;
|
||||
case DATA_MALCHEZZAR_EVENT: Encounters[10] = data; break;
|
||||
case DATA_NETHERBANE_EVENT: Encounters[11] = data; break;
|
||||
case DATA_NIGHTBANE_EVENT: Encounters[11] = data; break;
|
||||
|
||||
case DATA_OPERA_OZ_DEATHCOUNT: ++OzDeathCount; break;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -47,32 +47,32 @@ EndContentData */
|
||||
|
||||
struct Dialogue
|
||||
{
|
||||
char* text;
|
||||
uint32 soundid, timer;
|
||||
int32 textid;
|
||||
uint32 timer;
|
||||
};
|
||||
|
||||
static Dialogue OzDialogue[]=
|
||||
{
|
||||
{"Welcome Ladies and Gentlemen, to this evening's presentation!", 9174, 6000},
|
||||
{"Tonight we plumb the depths of the human soul as we join a lost, lonely girl trying desperately -- with the help of her loyal companions -- to find her way home!", 9338, 18000},
|
||||
{"But she is pursued... by a wicked malevolent crone!", 9339, 9000},
|
||||
{"Will she survive? Will she prevail? Only time will tell. And now ... on with the show!", 9340, 15000}
|
||||
{-1532103, 6000},
|
||||
{-1532104, 18000},
|
||||
{-1532105, 9000},
|
||||
{-1532106, 15000}
|
||||
};
|
||||
|
||||
static Dialogue HoodDialogue[]=
|
||||
{
|
||||
{"Good evening, Ladies and Gentlemen! Welcome to this evening's presentation!", 9175, 6000},
|
||||
{"Tonight, things are not what they seem. For tonight, your eyes may not be trusted", 9335, 10000},
|
||||
{"Take for instance, this quiet, elderly woman, waiting for a visit from her granddaughter. Surely there is nothing to fear from this sweet, grey-haired, old lady.", 9336, 14000},
|
||||
{"But don't let me pull the wool over your eyes. See for yourself what lies beneath those covers! And now... on with the show!", 9337, 15000}
|
||||
{-1532107, 6000},
|
||||
{-1532108, 10000},
|
||||
{-1532109, 14000},
|
||||
{-1532110, 15000}
|
||||
};
|
||||
|
||||
static Dialogue RAJDialogue[]=
|
||||
{
|
||||
{"Welcome, Ladies and Gentlemen, to this evening's presentation!", 9176, 5000},
|
||||
{"Tonight, we explore a tale of forbidden love!", 9341, 7000},
|
||||
{"But beware, for not all love stories end happily, as you may find out. Sometimes, love pricks like a thorn.", 9342, 14000},
|
||||
{"But don't take it from me, see for yourself what tragedy lies ahead when the paths of star-crossed lovers meet. And now...on with the show!", 9343, 14000}
|
||||
{-1532111, 5000},
|
||||
{-1532112, 7000},
|
||||
{-1532113, 14000},
|
||||
{-1532114, 14000}
|
||||
};
|
||||
|
||||
// Entries and spawn locations for creatures in Oz event
|
||||
@@ -144,12 +144,10 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
Event = pInstance->GetData(DATA_OPERA_PERFORMANCE);
|
||||
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT));
|
||||
if(Door)
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(1);
|
||||
|
||||
GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS));
|
||||
if(Curtain)
|
||||
if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
Curtain->SetGoState(1);
|
||||
}
|
||||
}
|
||||
@@ -167,9 +165,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
float x,y,z;
|
||||
m_creature->GetPosition(x, y, z);
|
||||
Creature* Spotlight;
|
||||
Spotlight = m_creature->SummonCreature(CREATURE_SPOTLIGHT, x, y, z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 50000);
|
||||
if(Spotlight)
|
||||
if (Creature* Spotlight = m_creature->SummonCreature(CREATURE_SPOTLIGHT, x, y, z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 50000))
|
||||
{
|
||||
Spotlight->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Spotlight->CastSpell(Spotlight, SPELL_SPOTLIGHT, false);
|
||||
@@ -180,8 +176,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
case 5:
|
||||
if(pInstance)
|
||||
{
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT));
|
||||
if(Door)
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(1);
|
||||
}
|
||||
IsBeingEscorted = false;
|
||||
@@ -192,43 +187,34 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
void Talk(uint32 count)
|
||||
{
|
||||
char* text = NULL;
|
||||
uint32 sound = 0;
|
||||
int32 text = 0;
|
||||
|
||||
switch(Event)
|
||||
{
|
||||
case EVENT_OZ:
|
||||
if(OzDialogue[count].text)
|
||||
text = OzDialogue[count].text;
|
||||
if(OzDialogue[count].soundid)
|
||||
sound = OzDialogue[count].soundid;
|
||||
if (OzDialogue[count].textid)
|
||||
text = OzDialogue[count].textid;
|
||||
if(OzDialogue[count].timer)
|
||||
TalkTimer = OzDialogue[count].timer;
|
||||
break;
|
||||
|
||||
case EVENT_HOOD:
|
||||
if(HoodDialogue[count].text)
|
||||
text = HoodDialogue[count].text;
|
||||
if(HoodDialogue[count].soundid)
|
||||
sound = HoodDialogue[count].soundid;
|
||||
if (HoodDialogue[count].textid)
|
||||
text = HoodDialogue[count].textid;
|
||||
if(HoodDialogue[count].timer)
|
||||
TalkTimer = HoodDialogue[count].timer;
|
||||
break;
|
||||
|
||||
case EVENT_RAJ:
|
||||
if(RAJDialogue[count].text)
|
||||
text = RAJDialogue[count].text;
|
||||
if(RAJDialogue[count].soundid)
|
||||
sound = RAJDialogue[count].soundid;
|
||||
if (RAJDialogue[count].textid)
|
||||
text = RAJDialogue[count].textid;
|
||||
if(RAJDialogue[count].timer)
|
||||
TalkTimer = RAJDialogue[count].timer;
|
||||
break;
|
||||
}
|
||||
|
||||
if(text)
|
||||
DoYell(text, LANG_UNIVERSAL, 0);
|
||||
if(sound)
|
||||
DoPlaySoundToSet(m_creature, sound);
|
||||
DoScriptText(text, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -241,8 +227,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
{
|
||||
if(TalkCount > 3)
|
||||
{
|
||||
Unit* Spotlight = Unit::GetUnit((*m_creature), SpotlightGUID);
|
||||
if(Spotlight)
|
||||
if (Unit* Spotlight = Unit::GetUnit((*m_creature), SpotlightGUID))
|
||||
{
|
||||
Spotlight->RemoveAllAuras();
|
||||
Spotlight->SetVisibility(VISIBILITY_OFF);
|
||||
@@ -257,13 +242,13 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK);
|
||||
Talk(TalkCount);
|
||||
++TalkCount;
|
||||
}
|
||||
else TalkTimer -= diff;
|
||||
}else TalkTimer -= diff;
|
||||
}
|
||||
|
||||
if(PerformanceReady)
|
||||
{
|
||||
if(CurtainTimer)
|
||||
{
|
||||
if(CurtainTimer <= diff)
|
||||
{
|
||||
PrepareEncounter();
|
||||
@@ -271,12 +256,12 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
if(!pInstance)
|
||||
return;
|
||||
|
||||
GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS));
|
||||
if(Curtain)
|
||||
if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
Curtain->SetGoState(0);
|
||||
|
||||
CurtainTimer = 0;
|
||||
}else CurtainTimer -= diff;
|
||||
}
|
||||
|
||||
if(!RaidWiped)
|
||||
{
|
||||
@@ -324,8 +309,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
pInstance->SetData(DATA_OPERA_EVENT, IN_PROGRESS);
|
||||
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT));
|
||||
if(Door)
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(0);
|
||||
|
||||
m_creature->CastSpell(m_creature, SPELL_TUXEDO, true);
|
||||
@@ -361,8 +345,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
{
|
||||
uint32 entry = ((uint32)Spawns[index][0]);
|
||||
float PosX = Spawns[index][1];
|
||||
Creature* pCreature = m_creature->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
|
||||
if(pCreature)
|
||||
if (Creature* pCreature = m_creature->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
|
||||
{
|
||||
// In case database has bad flags
|
||||
pCreature->SetUInt32Value(UNIT_FIELD_FLAGS, 0);
|
||||
@@ -398,9 +381,7 @@ bool GossipHello_npc_barnes(Player* player, Creature* _Creature)
|
||||
player->SEND_GOSSIP_MENU(8970, _Creature->GetGUID());
|
||||
else
|
||||
player->SEND_GOSSIP_MENU(8975, _Creature->GetGUID());
|
||||
}
|
||||
else
|
||||
player->SEND_GOSSIP_MENU(8978, _Creature->GetGUID());
|
||||
}else player->SEND_GOSSIP_MENU(8978, _Creature->GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_felblood_kaelthas
|
||||
SDName: Boss_Felblood_Kaelthas
|
||||
SD%Complete: 80
|
||||
SDComment: Normal and Heroic Support. Issues: Arcane Spheres do not initially follow targets. TODO: Convert Phoenix to ACID.
|
||||
SDCategory: Magisters' Terrace
|
||||
@@ -26,6 +26,14 @@ EndScriptData */
|
||||
#include "WorldPacket.h"
|
||||
#include "ObjectMgr.h"
|
||||
|
||||
#define SAY_AGGRO -1585023 //This yell should be done when the room is cleared. For now, set it as aggro yell.
|
||||
#define SAY_PHOENIX -1585024
|
||||
#define SAY_FLAMESTRIKE -1585025
|
||||
#define SAY_GRAVITY_LAPSE -1585026
|
||||
#define SAY_TIRED -1585027
|
||||
#define SAY_RECAST_GRAVITY -1585028
|
||||
#define SAY_DEATH -1585029
|
||||
|
||||
/*** Spells ***/
|
||||
|
||||
// Phase 1 spells
|
||||
@@ -60,28 +68,6 @@ EndScriptData */
|
||||
#define CREATURE_PHOENIX_EGG 24675
|
||||
#define CREATURE_ARCANE_SPHERE 24708
|
||||
|
||||
/*** Dialogues ***/
|
||||
#define SAY_AGGRO "Don't look so smug! I know what you're thinking, but Tempest Keep was merely a set back. Did you honestly believe I would trust the future to some blind, half-night elf mongrel? Oh no, he was merely an instrument, a stepping stone to a much larger plan! It has all led to this, and this time, you will not interfere!"
|
||||
#define SOUND_AGGRO 12413 // This yell should be done when the room is cleared. For now, set it as aggro yell.
|
||||
|
||||
#define SAY_PHOENIX "Vengeance burns!"
|
||||
#define SOUND_PHOENIX 12415
|
||||
|
||||
#define SAY_FLAMESTRIKE "Felomin ashal!"
|
||||
#define SOUND_FLAMESTRIKE 12417
|
||||
|
||||
#define SAY_GRAVITY_LAPSE "I'll turn your world... upside... down..."
|
||||
#define SOUND_GRAVITY_LAPSE 12418
|
||||
|
||||
#define SAY_TIRED "Master... grant me strength."
|
||||
#define SOUND_TIRED 12419
|
||||
|
||||
#define SAY_RECAST_GRAVITY "Do not... get too comfortable."
|
||||
#define SOUND_RECAST_GRAVITY 12420
|
||||
|
||||
#define SAY_DEATH "My demise accomplishes nothing! The Master will have you! You will drown in your own blood! This world shall burn! Aaaghh!"
|
||||
#define SOUND_DEATH 12421
|
||||
|
||||
/** Locations **/
|
||||
float KaelLocations[6][2]=
|
||||
{
|
||||
@@ -100,7 +86,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
Heroic = c->GetMap()->IsHeroic() ? true : false;
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -171,8 +157,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
RemoveGravityLapse();
|
||||
DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_KAELTHAS_EVENT, DONE);
|
||||
}
|
||||
@@ -185,15 +170,15 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void SetThreatList(Creature* SummonedUnit)
|
||||
{
|
||||
if(!SummonedUnit) return;
|
||||
if(!SummonedUnit)
|
||||
return;
|
||||
|
||||
std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
|
||||
std::list<HostilReference*>::iterator i = m_threatlist.begin();
|
||||
@@ -316,18 +301,18 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
// *Heroic mode only:
|
||||
if(Heroic)
|
||||
{
|
||||
if(PyroblastTimer < diff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_SHOCK_BARRIER, true);
|
||||
DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
|
||||
PyroblastTimer = 60000;
|
||||
}else PyroblastTimer -= diff;
|
||||
{
|
||||
DoCast(m_creature, SPELL_SHOCK_BARRIER, true);
|
||||
DoCast(m_creature->getVictim(), SPELL_PYROBLAST);
|
||||
PyroblastTimer = 60000;
|
||||
}else PyroblastTimer -= diff;
|
||||
}
|
||||
|
||||
if(FireballTimer < diff)
|
||||
{
|
||||
// *Normal/Heroic mode support
|
||||
if(Heroic) DoCast(m_creature->getVictim(), SPELL_FIREBALL_HEROIC);
|
||||
else DoCast(m_creature->getVictim(), SPELL_FIREBALL_NORMAL);
|
||||
DoCast(m_creature->getVictim(), Heroic ? SPELL_FIREBALL_HEROIC : SPELL_FIREBALL_NORMAL);
|
||||
FireballTimer = 2000 + rand()%4000;
|
||||
}else FireballTimer -= diff;
|
||||
|
||||
@@ -356,23 +341,20 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
DoYell(SAY_PHOENIX, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_PHOENIX);
|
||||
DoScriptText(SAY_PHOENIX, m_creature);
|
||||
|
||||
PhoenixTimer = 40000;
|
||||
}else PhoenixTimer -= diff;
|
||||
|
||||
if(FlameStrikeTimer < diff)
|
||||
{
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
{
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
DoCast(target, SPELL_FLAMESTRIKE3, true);
|
||||
FlameStrikeTimer = 20000 + rand()%5000;
|
||||
DoScriptText(SAY_FLAMESTRIKE, m_creature);
|
||||
|
||||
DoYell(SAY_FLAMESTRIKE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_FLAMESTRIKE);
|
||||
FlameStrikeTimer = 20000 + rand()%5000;
|
||||
}
|
||||
}else FlameStrikeTimer -= diff;
|
||||
|
||||
@@ -401,8 +383,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
case 0:
|
||||
if(FirstGravityLapse) // Different yells at 50%, and at every following Gravity Lapse
|
||||
{
|
||||
DoYell(SAY_GRAVITY_LAPSE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_GRAVITY_LAPSE);
|
||||
DoScriptText(SAY_GRAVITY_LAPSE, m_creature);
|
||||
FirstGravityLapse = false;
|
||||
if(pInstance)
|
||||
{
|
||||
@@ -413,8 +394,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
}
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_RECAST_GRAVITY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RECAST_GRAVITY);
|
||||
DoScriptText(SAY_RECAST_GRAVITY, m_creature);
|
||||
}
|
||||
m_creature->StopMoving();
|
||||
DoCast(m_creature, SPELL_GRAVITY_LAPSE_INITIAL);
|
||||
@@ -468,8 +448,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
|
||||
case 4:
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
DoYell(SAY_TIRED,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_TIRED);
|
||||
DoScriptText(SAY_TIRED, m_creature);
|
||||
DoCast(m_creature, SPELL_POWER_FEEDBACK);
|
||||
RemoveGravityLapse();
|
||||
GravityLapseTimer = 10000;
|
||||
@@ -488,7 +467,7 @@ struct TRINITY_DLL_DECL mob_felkael_flamestrikeAI : public ScriptedAI
|
||||
mob_felkael_flamestrikeAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
Reset();
|
||||
Heroic = c->GetMap()->IsHeroic() ? true : false;
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
uint32 FlameStrikeTimer;
|
||||
@@ -510,9 +489,7 @@ struct TRINITY_DLL_DECL mob_felkael_flamestrikeAI : public ScriptedAI
|
||||
{
|
||||
if(FlameStrikeTimer < diff)
|
||||
{
|
||||
// *Normal/Heroic mode support
|
||||
if(Heroic) DoCast(m_creature, SPELL_FLAMESTRIKE1_HEROIC, true);
|
||||
else DoCast(m_creature, SPELL_FLAMESTRIKE1_NORMAL, true);
|
||||
DoCast(m_creature, Heroic ? SPELL_FLAMESTRIKE1_HEROIC : SPELL_FLAMESTRIKE1_NORMAL, true);
|
||||
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}else FlameStrikeTimer -= diff;
|
||||
}
|
||||
|
||||
@@ -24,34 +24,30 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_magisters_terrace.h"
|
||||
|
||||
#define SAY_AGGRO "Annihilate them!"
|
||||
#define SOUND_AGGRO 12395
|
||||
|
||||
struct Speech
|
||||
{
|
||||
const char* text;
|
||||
uint32 sound;
|
||||
int32 id;
|
||||
};
|
||||
|
||||
static Speech LackeyDeath[]=
|
||||
{
|
||||
{"Oh, the horror.", 12398},
|
||||
{"Well, aren't you lucky?", 12400},
|
||||
{"Now I'm getting annoyed.", 12401},
|
||||
{"Lackies be damned! I'll finish you myself!", 12403},
|
||||
{-1585013},
|
||||
{-1585014},
|
||||
{-1585015},
|
||||
{-1585016},
|
||||
};
|
||||
|
||||
static Speech PlayerDeath[]=
|
||||
{
|
||||
{"I call that a good start.", 12405},
|
||||
{"I could have sworn there were more of you.", 12407},
|
||||
{"Not really much of a group, anymore, is it?", 12409},
|
||||
{"One is such a lonely number", 12410},
|
||||
{"It's been a kick, really", 12411},
|
||||
{-1585017},
|
||||
{-1585018},
|
||||
{-1585019},
|
||||
{-1585020},
|
||||
{-1585021},
|
||||
};
|
||||
|
||||
#define SAY_DEATH "Not what I had... planned..."
|
||||
#define SOUND_DEATH 12397
|
||||
#define SAY_AGGRO -1585012
|
||||
#define SAY_DEATH -1585022
|
||||
|
||||
#define SPELL_DISPEL_MAGIC 27609
|
||||
#define SPELL_FLASH_HEAL 17843
|
||||
@@ -146,14 +142,12 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
if (m_creature->isDead())
|
||||
pInstance->SetData(DATA_DELRISSA_EVENT, DONE);
|
||||
else pInstance->SetData(DATA_DELRISSA_EVENT, NOT_STARTED);
|
||||
}
|
||||
else error_log(ERROR_INST_DATA);
|
||||
}else error_log(ERROR_INST_DATA);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
for(uint8 i = 0; i < Adds.size(); ++i)
|
||||
if(Unit* pAdd = Unit::GetUnit(*m_creature, Adds[i]->guid))
|
||||
@@ -215,8 +209,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
if(victim->GetTypeId() != TYPEID_PLAYER || m_creature->isDead())
|
||||
return;
|
||||
|
||||
DoYell(PlayerDeath[PlayersKilled].text, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, PlayerDeath[PlayersKilled].sound);
|
||||
DoScriptText(PlayerDeath[PlayersKilled].id, m_creature);
|
||||
if( PlayersKilled < 4 )
|
||||
++PlayersKilled;
|
||||
}
|
||||
@@ -225,8 +218,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
{
|
||||
if(m_creature->isDead())//no sense to talk if dead..
|
||||
return;
|
||||
DoYell(LackeyDeath[LackeysKilled].text, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, LackeyDeath[LackeysKilled].sound);
|
||||
DoScriptText(LackeyDeath[LackeysKilled].id, m_creature);
|
||||
if( LackeysKilled < 3 )
|
||||
++LackeysKilled;
|
||||
|
||||
@@ -235,8 +227,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
CheckLootable();
|
||||
|
||||
@@ -764,8 +755,7 @@ struct TRINITY_DLL_DECL boss_yazzaiAI : public boss_priestess_guestAI
|
||||
|
||||
if(Polymorph_Timer < diff)
|
||||
{
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if(target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
{
|
||||
DoCast(target, SPELL_POLYMORPH);
|
||||
m_creature->getThreatManager().modifyThreatPercent(target,-100);
|
||||
@@ -1132,15 +1122,9 @@ struct TRINITY_DLL_DECL boss_apokoAI : public boss_priestess_guestAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoCast(m_creature, SPELL_WINDFURY_TOTEM);
|
||||
break;
|
||||
case 1:
|
||||
DoCast(m_creature, SPELL_FIRE_NOVA_TOTEM);
|
||||
break;
|
||||
case 2:
|
||||
DoCast(m_creature, SPELL_EARTHBIND_TOTEM);
|
||||
break;
|
||||
case 0: DoCast(m_creature, SPELL_WINDFURY_TOTEM); break;
|
||||
case 1: DoCast(m_creature, SPELL_FIRE_NOVA_TOTEM); break;
|
||||
case 2: DoCast(m_creature, SPELL_EARTHBIND_TOTEM); break;
|
||||
}
|
||||
++Totem_Amount;
|
||||
Totem_Timer = Totem_Amount*2000;
|
||||
|
||||
@@ -24,23 +24,13 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_magisters_terrace.h"
|
||||
|
||||
#define SAY_AGGRO "You only waste my time!"
|
||||
#define SOUND_AGGRO 12378
|
||||
|
||||
#define SAY_ENERGY "My hunger knows no bounds! "
|
||||
#define SOUND_ENERGY 12381
|
||||
|
||||
#define SAY_EMPOWERED "Yes! I am a god!"
|
||||
#define SOUND_EMPOWERED 12382
|
||||
|
||||
#define SAY_KILL_1 "Enough distractions!"
|
||||
#define SOUND_KILL_1 12388
|
||||
|
||||
#define SAY_KILL_2 "I am invincible!"
|
||||
#define SOUND_KILL_2 12385
|
||||
|
||||
#define SAY_DEATH "No! More... I must have more!"
|
||||
#define SOUND_DEATH 12383
|
||||
#define SAY_AGGRO -1585000
|
||||
#define SAY_ENERGY -1585001
|
||||
#define SAY_EMPOWERED -1585002
|
||||
#define SAY_KILL_1 -1585003
|
||||
#define SAY_KILL_2 -1585004
|
||||
#define SAY_DEATH -1585005
|
||||
#define EMOTE_CRYSTAL -1585006
|
||||
|
||||
//Crystal efect spells
|
||||
#define SPELL_FEL_CRYSTAL_COSMETIC 44374
|
||||
@@ -78,7 +68,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
Reset();
|
||||
Heroic = c->GetMap()->IsHeroic() ? true : false;
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -163,8 +153,8 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
}
|
||||
if( CrystalChosen )
|
||||
{
|
||||
DoYell(SAY_ENERGY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENERGY);
|
||||
DoScriptText(SAY_ENERGY, m_creature);
|
||||
DoScriptText(EMOTE_CRYSTAL, m_creature);
|
||||
|
||||
CrystalChosen->CastSpell(CrystalChosen, SPELL_FEL_CRYSTAL_COSMETIC, true);
|
||||
|
||||
@@ -195,8 +185,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
m_creature->SetPower(POWER_MANA, 0);
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
if( pInstance )
|
||||
{
|
||||
@@ -210,14 +199,8 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,8 +228,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if(!pInstance)
|
||||
{
|
||||
@@ -330,8 +312,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
IsDraining = false;
|
||||
DrainingCrystal = false;
|
||||
|
||||
DoYell(SAY_EMPOWERED, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_EMPOWERED);
|
||||
DoScriptText(SAY_EMPOWERED, m_creature);
|
||||
|
||||
Unit* CrystalChosen = Unit::GetUnit(*m_creature, CrystalGUID);
|
||||
if( CrystalChosen && CrystalChosen->isAlive() )
|
||||
|
||||
@@ -24,19 +24,13 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_magisters_terrace.h"
|
||||
|
||||
#define SAY_AGGRO "Drain...life..."
|
||||
#define SOUND_AGGRO 12389
|
||||
|
||||
#define SAY_ENERGY "Un...con...tainable."
|
||||
#define SOUND_ENERGY 12392
|
||||
|
||||
#define SAY_OVERLOAD "Un...leash..."
|
||||
#define SOUND_OVERLOAD 12390
|
||||
|
||||
#define SAY_KILL "Con...sume."
|
||||
#define SOUND_KILL 12393
|
||||
|
||||
#define SAY_DEATH "What...happen...ed."
|
||||
#define SAY_AGGRO -1585007
|
||||
#define SAY_ENERGY -1585008
|
||||
#define SAY_OVERLOAD -1585009
|
||||
#define SAY_KILL -1585010
|
||||
#define EMOTE_DISCHARGE_ENERGY -1585011
|
||||
//is this text for real?
|
||||
#define SAY_DEATH "What...happen...ed."
|
||||
|
||||
//Pure energy spell info
|
||||
#define SPELL_ENERGY_BOLT 44342
|
||||
@@ -58,7 +52,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
Heroic = c->GetMap()->IsHeroic() ? true : false;
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -91,8 +85,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_KILL, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(victim, SOUND_KILL);
|
||||
DoScriptText(SAY_KILL, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
@@ -111,8 +104,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
|
||||
}
|
||||
@@ -132,8 +124,8 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
//used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25%
|
||||
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < (100-(SpawnAddInterval*(AlreadySpawnedAmount+1))))
|
||||
{
|
||||
DoYell(SAY_ENERGY, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_ENERGY);
|
||||
DoScriptText(SAY_ENERGY, m_creature);
|
||||
DoScriptText(EMOTE_DISCHARGE_ENERGY, m_creature);
|
||||
Creature* PureEnergyCreature = NULL;
|
||||
PureEnergyCreature = DoSpawnCreature(CREATURE_PURE_ENERGY, 10, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
|
||||
Unit* target = NULL;
|
||||
@@ -154,8 +146,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
|
||||
if(ChainLightningTimer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_CHAIN_LIGHTNING);
|
||||
ChainLightningTimer = 10000;
|
||||
}else ChainLightningTimer -= diff;
|
||||
@@ -171,8 +162,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
{
|
||||
if(OverloadTimer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(target, SPELL_OVERLOAD);
|
||||
OverloadTimer = 2200;
|
||||
}else OverloadTimer -= diff;
|
||||
|
||||
@@ -35,10 +35,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_magisters_terrace : public ScriptedInstance
|
||||
{
|
||||
instance_magisters_terrace(Map* map) : ScriptedInstance(map)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
instance_magisters_terrace(Map* map) : ScriptedInstance(map) {Initialize();}
|
||||
|
||||
uint32 DoorState[3];//0seline, 1vexallus, 2derlissa
|
||||
uint32 Encounters[NUMBER_OF_ENCOUNTERS];
|
||||
|
||||
@@ -23,6 +23,8 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_SERVICE -1409000
|
||||
|
||||
#define SPELL_INFERNO 19695
|
||||
#define SPELL_IGNITEMANA 19659
|
||||
#define SPELL_LIVINGBOMB 20475
|
||||
@@ -53,10 +55,11 @@ struct TRINITY_DLL_DECL boss_baron_geddonAI : public ScriptedAI
|
||||
return;
|
||||
|
||||
//If we are <2% hp cast Armageddom
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 2 && !m_creature->IsNonMeleeSpellCasted(false))
|
||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 2)
|
||||
{
|
||||
m_creature->InterruptNonMeleeSpells(true);
|
||||
DoCast(m_creature,SPELL_ARMAGEDDOM);
|
||||
DoTextEmote("performs one last service for Ragnaros.",NULL);
|
||||
DoScriptText(EMOTE_SERVICE, m_creature);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -70,9 +73,8 @@ struct TRINITY_DLL_DECL boss_baron_geddonAI : public ScriptedAI
|
||||
//IgniteMana_Timer
|
||||
if (IgniteMana_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target) DoCast(target,SPELL_IGNITEMANA);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_IGNITEMANA);
|
||||
|
||||
IgniteMana_Timer = 30000;
|
||||
}else IgniteMana_Timer -= diff;
|
||||
@@ -80,9 +82,8 @@ struct TRINITY_DLL_DECL boss_baron_geddonAI : public ScriptedAI
|
||||
//LivingBomb_Timer
|
||||
if (LivingBomb_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target) DoCast(target,SPELL_LIVINGBOMB);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_LIVINGBOMB);
|
||||
|
||||
LivingBomb_Timer = 35000;
|
||||
}else LivingBomb_Timer -= diff;
|
||||
|
||||
@@ -85,11 +85,6 @@ struct TRINITY_DLL_DECL mob_fireswornAI : public ScriptedAI
|
||||
void Reset()
|
||||
{
|
||||
Immolate_Timer = 4000; //These times are probably wrong
|
||||
|
||||
//m_creature->RemoveAllAuras();
|
||||
//m_creature->DeleteThreatList();
|
||||
//m_creature->CombatStop();
|
||||
//DoGoHome();
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
@@ -104,9 +99,7 @@ struct TRINITY_DLL_DECL mob_fireswornAI : public ScriptedAI
|
||||
//Immolate_Timer
|
||||
if (Immolate_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target)
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_IMMOLATE);
|
||||
|
||||
Immolate_Timer = 5000 + rand()%5000;
|
||||
|
||||
@@ -24,6 +24,8 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_molten_core.h"
|
||||
|
||||
#define EMOTE_AEGIS -1409002
|
||||
|
||||
#define SPELL_MAGMASPLASH 13879
|
||||
#define SPELL_PYROBLAST 20228
|
||||
#define SPELL_EARTHQUAKE 19798
|
||||
@@ -34,21 +36,19 @@ EndScriptData */
|
||||
#define SPELL_MANGLE 19820
|
||||
#define SPELL_AEGIS 20620 //This is self casted whenever we are below 50%
|
||||
|
||||
#define EMOTE_AEGIS "refuses to die while its master is in trouble"
|
||||
|
||||
struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI
|
||||
{
|
||||
boss_golemaggAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL;
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
}
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
uint32 Pyroblast_Timer;
|
||||
uint32 EarthQuake_Timer;
|
||||
uint32 Enrage_Timer;
|
||||
uint32 Buff_Timer;
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
@@ -66,7 +66,7 @@ struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? ((ScriptedInstance*)m_creature->GetInstanceData()) : NULL;
|
||||
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_GOLEMAGG_DEATH, 0);
|
||||
}
|
||||
@@ -78,9 +78,8 @@ struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI
|
||||
//Pyroblast_Timer
|
||||
if (Pyroblast_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
if (target) DoCast(target,SPELL_PYROBLAST);
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(target,SPELL_PYROBLAST);
|
||||
|
||||
Pyroblast_Timer = 7000;
|
||||
}else Pyroblast_Timer -= diff;
|
||||
@@ -154,7 +153,7 @@ struct TRINITY_DLL_DECL mob_core_ragerAI : public ScriptedAI
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 50 )
|
||||
{
|
||||
DoCast(m_creature,SPELL_AEGIS);
|
||||
DoTextEmote(EMOTE_AEGIS, NULL);
|
||||
DoScriptText(EMOTE_AEGIS, m_creature);
|
||||
}
|
||||
|
||||
//Check_Timer
|
||||
|
||||
@@ -23,6 +23,8 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_FRENZY -1409001
|
||||
|
||||
#define SPELL_FRENZY 19451
|
||||
#define SPELL_MAGMASPIT 19449 //This is actually a buff he gives himself
|
||||
#define SPELL_PANIC 19408
|
||||
@@ -58,7 +60,7 @@ struct TRINITY_DLL_DECL boss_magmadarAI : public ScriptedAI
|
||||
//Frenzy_Timer
|
||||
if (Frenzy_Timer < diff)
|
||||
{
|
||||
DoTextEmote("goes into a killing frenzy!",NULL);
|
||||
DoScriptText(EMOTE_FRENZY, m_creature);
|
||||
DoCast(m_creature,SPELL_FRENZY);
|
||||
Frenzy_Timer = 15000;
|
||||
}else Frenzy_Timer -= diff;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_MajorDomo_Executus
|
||||
SDName: Boss_Majordomo_Executus
|
||||
SD%Complete: 30
|
||||
SDComment: Correct spawning and Event NYI
|
||||
SDCategory: Molten Core
|
||||
@@ -23,35 +23,43 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SPELL_MAGICREFLECTION 20619
|
||||
#define SPELL_DAMAGEREFLECTION 21075
|
||||
#define SAY_AGGRO -1409003
|
||||
#define SAY_SPAWN -1409004
|
||||
#define SAY_SLAY -1409005
|
||||
#define SAY_SPECIAL -1409006
|
||||
#define SAY_DEFEAT -1409007
|
||||
|
||||
#define SAY_SUMMON_MAJ -1409008
|
||||
#define SAY_ARRIVAL1_RAG -1409009
|
||||
#define SAY_ARRIVAL2_MAJ -1409010
|
||||
#define SAY_ARRIVAL3_RAG -1409011
|
||||
#define SAY_ARRIVAL5_RAG -1409012
|
||||
|
||||
#define SPAWN_RAG_X 838.51
|
||||
#define SPAWN_RAG_Y -829.84
|
||||
#define SPAWN_RAG_Z -232.00
|
||||
#define SPAWN_RAG_O 1.70
|
||||
|
||||
#define SPELL_MAGIC_REFLECTION 20619
|
||||
#define SPELL_DAMAGE_REFLECTION 21075
|
||||
|
||||
#define SPELL_BLASTWAVE 20229
|
||||
#define SPELL_AEGIS 20620 //This is self casted whenever we are below 50%
|
||||
#define SPELL_TELEPORT 20618
|
||||
#define SPELL_SUMMON_RAGNAROS 19774
|
||||
|
||||
#define SAY_AGGRO "Reckless mortals, none may challenge the sons of the living flame!"
|
||||
#define SOUND_AGGRO 8035
|
||||
|
||||
#define SAY_SPAWN "The runes of warding have been destroyed! Hunt down the infedels my bretheren."
|
||||
#define SOUND_SPAWN 8039
|
||||
|
||||
#define SAY_DEFEAT "Impossible! Stay your attack mortals! I submitt! I submitt! Brashly you have come to rest the secrets of the living flame. You will soon regret the recklessness of your quest. I go now to summon the lord whos house this is. Should you seek an audiance with him your paltry lives will surly be forfit. Nevertheless seek out his lair if you dare!"
|
||||
#define SOUND_DEFEAT 8038
|
||||
|
||||
#define SAY_KILL "Ashes to Ashes!"
|
||||
#define SOUND_KILL 8037
|
||||
|
||||
#define SAY_SPECIAL "Burn mortals! Burn for this transgression!"
|
||||
#define SOUND_SPECIAL 8036
|
||||
|
||||
#define SAY_SUMMON "Behold Ragnaros, the Firelord! He who was ancient when this world was young! Bow before him, mortals! Bow before your ending!"
|
||||
#define SOUND_SUMMON 8040
|
||||
|
||||
#define SAY_ARRIVAL1 "These mortal infidels, my lord! They have invaded your sanctum, and seek to steal your secrets!"
|
||||
#define SOUND_ARRIVAL1 8041
|
||||
#define ENTRY_FLAMEWALKER_HEALER 11663
|
||||
#define ENTRY_FLAMEWALKER_ELITE 11664
|
||||
|
||||
struct TRINITY_DLL_DECL boss_majordomoAI : public ScriptedAI
|
||||
{
|
||||
boss_majordomoAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_majordomoAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 MagicReflection_Timer;
|
||||
uint32 DamageReflection_Timer;
|
||||
@@ -69,14 +77,12 @@ struct TRINITY_DLL_DECL boss_majordomoAI : public ScriptedAI
|
||||
if (rand()%5)
|
||||
return;
|
||||
|
||||
DoYell(SAY_KILL,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_KILL);
|
||||
DoScriptText(SAY_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
|
||||
@@ -23,6 +23,13 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_REINFORCEMENTS1 -1409013
|
||||
#define SAY_REINFORCEMENTS2 -1409014
|
||||
#define SAY_HAND -1409015
|
||||
#define SAY_WRATH -1409016
|
||||
#define SAY_KILL -1409017
|
||||
#define SAY_MAGMABURST -1409018
|
||||
|
||||
#define SPELL_HANDOFRAGNAROS 19780
|
||||
#define SPELL_WRATHOFRAGNAROS 20566
|
||||
#define SPELL_LAVABURST 21158
|
||||
@@ -36,26 +43,6 @@ EndScriptData */
|
||||
#define SPELL_ELEMENTALFIRE 20564
|
||||
#define SPELL_ERRUPTION 17731
|
||||
|
||||
#define SAY_ARRIVAL_1 "TOO SOON! YOU HAVE AWAKENED ME TOO SOON, EXECUTUS! WHAT IS THE MEANING OF THIS INTRUSION?"
|
||||
#define SAY_ARRIVAL_3 "FOOL! YOU ALLOWED THESE INSECTS TO RUN RAMPANT THROUGH THE HALLOWED CORE, AND NOW YOU LEAD THEM TO MY VERY LAIR? YOU HAVE FAILED ME, EXECUTUS! JUSTICE SHALL BE MET, INDEED!"
|
||||
#define SAY_ARRIVAL_5 "NOW FOR YOU, INSECTS. BOLDLY YOU SAUGHT THE POWER OF RAGNAROS NOW YOU SHALL SEE IT FIRST HAND."
|
||||
#define SAY_REINFORCEMENTS1 "COME FORTH, MY SERVANTS! DEFEND YOUR MASTER!"
|
||||
#define SAY_REINFORCEMENTS2 "YOU CANNOT DEFEAT THE LIVING FLAME! COME YOU MINIONS OF FIRE! COME FORTH YOU CREATURES OF HATE! YOUR MASTER CALLS!"
|
||||
#define SAY_HAND "BY FIRE BE PURGED!"
|
||||
#define SAY_WRATH "TASTE THE FLAMES OF SULFURON!"
|
||||
#define SAY_KILL "DIE INSECT!"
|
||||
#define SAY_MAGMABURST "MY PATIENCE IS DWINDILING! COME NATS TO YOUR DEATH!"
|
||||
|
||||
#define SOUND_ARRIVAL_1 8043
|
||||
#define SOUND_ARRIVAL_3 8044
|
||||
#define SOUND_ARRIVAL_5 8045
|
||||
#define SOUND_REINFORCEMENTS1 8049
|
||||
#define SOUND_REINFORCEMENTS2 8050
|
||||
#define SOUND_HAND 8046
|
||||
#define SOUND_WRATH 8047
|
||||
#define SOUND_KILL 8051
|
||||
#define SOUND_MAGMABURST 8048
|
||||
|
||||
#define ADD_1X 848.740356
|
||||
#define ADD_1Y -816.103455
|
||||
#define ADD_1Z -229.74327
|
||||
@@ -137,14 +124,11 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
if (rand()%5)
|
||||
return;
|
||||
|
||||
DoYell(SAY_KILL, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL);
|
||||
DoScriptText(SAY_KILL, m_creature);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_ARRIVAL_5,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_ARRIVAL_5);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -174,8 +158,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
|
||||
if (rand()%2 == 0)
|
||||
{
|
||||
DoYell(SAY_WRATH,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_WRATH);
|
||||
DoScriptText(SAY_WRATH, m_creature);
|
||||
}
|
||||
|
||||
WrathOfRagnaros_Timer = 30000;
|
||||
@@ -188,8 +171,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
|
||||
if (rand()%2==0)
|
||||
{
|
||||
DoYell(SAY_HAND,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_HAND);
|
||||
DoScriptText(SAY_HAND, m_creature);
|
||||
}
|
||||
|
||||
HandOfRagnaros_Timer = 25000;
|
||||
@@ -235,8 +217,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
|
||||
if (!HasSubmergedOnce)
|
||||
{
|
||||
DoYell(SAY_REINFORCEMENTS1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_REINFORCEMENTS1);
|
||||
DoScriptText(SAY_REINFORCEMENTS1, m_creature);
|
||||
|
||||
// summon 10 elementals
|
||||
Unit* target = NULL;
|
||||
@@ -254,8 +235,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
|
||||
}else
|
||||
{
|
||||
DoYell(SAY_REINFORCEMENTS2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_REINFORCEMENTS2);
|
||||
DoScriptText(SAY_REINFORCEMENTS2, m_creature);
|
||||
|
||||
Unit* target = NULL;
|
||||
for(int i = 0; i < 9;i++)
|
||||
@@ -292,8 +272,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
if (!HasYelledMagmaBurst)
|
||||
{
|
||||
//Say our dialog
|
||||
DoYell(SAY_MAGMABURST,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_MAGMABURST);
|
||||
DoScriptText(SAY_MAGMABURST, m_creature);
|
||||
HasYelledMagmaBurst = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_molten_core.h"
|
||||
|
||||
#define ENCOUNTERS 9
|
||||
|
||||
#define ID_LUCIFRON 12118
|
||||
#define ID_MAGMADAR 11982
|
||||
#define ID_GEHENNAS 12259
|
||||
@@ -36,24 +38,20 @@ EndScriptData */
|
||||
#define ID_RAGNAROS 11502
|
||||
#define ID_FLAMEWAKERPRIEST 11662
|
||||
|
||||
class TRINITY_DLL_SPEC instance_molten_core : public ScriptedInstance
|
||||
struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance
|
||||
{
|
||||
public:
|
||||
|
||||
instance_molten_core(Map *map) : ScriptedInstance(map) {}
|
||||
instance_molten_core(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint64 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest;
|
||||
uint64 RuneGUID[8];
|
||||
uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn;
|
||||
|
||||
//If all Bosses are dead.
|
||||
bool IsBossDied[9];
|
||||
|
||||
uint32 CheckTimer;
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
//On creation, NOT load.
|
||||
void Initialize()
|
||||
{
|
||||
//Clear all GUIDs
|
||||
Lucifron = 0;
|
||||
Magmadar = 0;
|
||||
Gehennas = 0;
|
||||
@@ -66,14 +64,13 @@ class TRINITY_DLL_SPEC instance_molten_core : public ScriptedInstance
|
||||
Ragnaros = 0;
|
||||
FlamewakerPriest = 0;
|
||||
|
||||
RuneGUID[0] = 0;
|
||||
RuneGUID[1] = 0;
|
||||
RuneGUID[2] = 0;
|
||||
RuneGUID[3] = 0;
|
||||
RuneGUID[4] = 0;
|
||||
RuneGUID[5] = 0;
|
||||
RuneGUID[6] = 0;
|
||||
RuneGUID[7] = 0;
|
||||
RuneKoro = 0;
|
||||
RuneZeth = 0;
|
||||
RuneMazj = 0;
|
||||
RuneTheri = 0;
|
||||
RuneBlaz = 0;
|
||||
RuneKress = 0;
|
||||
RuneMohn = 0;
|
||||
|
||||
IsBossDied[0] = false;
|
||||
IsBossDied[1] = false;
|
||||
@@ -86,38 +83,49 @@ class TRINITY_DLL_SPEC instance_molten_core : public ScriptedInstance
|
||||
IsBossDied[7] = false;
|
||||
IsBossDied[8] = false;
|
||||
|
||||
CheckTimer = 10000;
|
||||
}
|
||||
//Called every map update
|
||||
void Update(uint32 diff)
|
||||
{
|
||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||
Encounter[i] = NOT_STARTED;
|
||||
|
||||
if (CheckTimer < diff)
|
||||
{
|
||||
//Check if all bosses are dead and activate Major Domo
|
||||
|
||||
}else CheckTimer -= diff;
|
||||
|
||||
}
|
||||
|
||||
//Used by the map's CanEnter function.
|
||||
//This is to prevent players from entering during boss encounters.
|
||||
bool IsEncounterInProgress() const
|
||||
{
|
||||
return false;
|
||||
};
|
||||
|
||||
//Called when a gameobject is created
|
||||
void OnObjectCreate(GameObject *obj)
|
||||
|
||||
void OnObjectCreate(GameObject *go)
|
||||
{
|
||||
//Still searching for the individual rune ids.
|
||||
//Currently they don't exist within most databases and are hard to find on websites
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case 176951: //Sulfuron
|
||||
RuneKoro = go->GetGUID();
|
||||
break;
|
||||
case 176952: //Geddon
|
||||
RuneZeth = go->GetGUID();
|
||||
break;
|
||||
case 176953: //Shazzrah
|
||||
RuneMazj = go->GetGUID();
|
||||
break;
|
||||
case 176954: //Golemagg
|
||||
RuneTheri = go->GetGUID();
|
||||
break;
|
||||
case 176955: //Garr
|
||||
RuneBlaz = go->GetGUID();
|
||||
break;
|
||||
case 176956: //Magmadar
|
||||
RuneKress = go->GetGUID();
|
||||
break;
|
||||
case 176957: //Gehennas
|
||||
RuneMohn = go->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//called on creature creation
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 creature_entry)
|
||||
{
|
||||
//Store specific creatures based on entry id
|
||||
switch (creature_entry)
|
||||
{
|
||||
case ID_LUCIFRON:
|
||||
@@ -180,7 +188,7 @@ class TRINITY_DLL_SPEC instance_molten_core : public ScriptedInstance
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // end GetData64
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
@@ -235,16 +243,16 @@ class TRINITY_DLL_SPEC instance_molten_core : public ScriptedInstance
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
if(type == DATA_GOLEMAGG_DEATH)
|
||||
IsBossDied[7] = true;
|
||||
}
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
if (type == DATA_GOLEMAGG_DEATH)
|
||||
IsBossDied[7] = true;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstance_instance_molten_core(Map *_Map)
|
||||
InstanceData* GetInstance_instance_molten_core(Map *map)
|
||||
{
|
||||
return new instance_molten_core (_Map);
|
||||
return new instance_molten_core (map);
|
||||
}
|
||||
|
||||
void AddSC_instance_molten_core()
|
||||
|
||||
@@ -23,6 +23,12 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SAY_AGGRO -1249000
|
||||
#define SAY_KILL -1249001
|
||||
#define SAY_PHASE_2_TRANS -1249002
|
||||
#define SAY_PHASE_3_TRANS -1249003
|
||||
#define EMOTE_BREATH -1249004
|
||||
|
||||
#define SPELL_WINGBUFFET 18500
|
||||
#define SPELL_FLAMEBREATH 18435
|
||||
#define SPELL_CLEAVE 19983
|
||||
@@ -38,12 +44,6 @@ EndScriptData */
|
||||
|
||||
#define SPELL_SUMMONWHELP 17646
|
||||
|
||||
#define SAY_AGGRO "How fortuitous. Usually, I must leave my lair to feed."
|
||||
#define SAY_KILL "Learn your place mortal!"
|
||||
#define SAY_PHASE_2_TRANS "This meaningless exertion bores me. I'll incinerate you from above!"
|
||||
#define SAY_PHASE_3_TRANS "It seems you'll need another lesson!"
|
||||
#define EMOTE_BREATH "takes a deep breath..."
|
||||
|
||||
static float MovementLocations[7][3]=
|
||||
{
|
||||
{-65.8444, -213.809, -60.2985},
|
||||
@@ -99,13 +99,13 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoZoneInCombat();
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_KILL, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_KILL, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
DoYell(SAY_PHASE_2_TRANS, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_PHASE_2_TRANS, m_creature);
|
||||
}
|
||||
|
||||
if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 40) && (Phase == 2))
|
||||
@@ -128,7 +128,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
Phase = 3;
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
DoYell(SAY_PHASE_3_TRANS, LANG_UNIVERSAL, NULL);
|
||||
DoScriptText(SAY_PHASE_3_TRANS, m_creature);
|
||||
}
|
||||
|
||||
if(Phase == 1 || Phase == 3)
|
||||
@@ -181,7 +181,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
m_creature->GetMotionMaster()->MovePoint(0, MovementLocations[random][0], MovementLocations[random][1], MovementLocations[random][2]);
|
||||
else
|
||||
{
|
||||
DoTextEmote(EMOTE_BREATH, NULL);
|
||||
DoScriptText(EMOTE_BREATH, m_creature);
|
||||
DoCast(m_creature->getVictim(), SPELL_DEEPBREATH);
|
||||
}
|
||||
MovementTimer = 25000;
|
||||
|
||||
@@ -22,3 +22,5 @@ SDCategory: Ruins of Ahn'Qiraj
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_TARGET -1509002
|
||||
@@ -23,14 +23,15 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define EMOTE_AGGRO -1509000
|
||||
#define EMOTE_MANA_FULL -1509001
|
||||
|
||||
#define SPELL_TRAMPLE 15550
|
||||
#define SPELL_DRAINMANA 27256
|
||||
#define SPELL_ARCANEERUPTION 25672
|
||||
#define SPELL_SUMMONMANA 25681
|
||||
#define SPELL_GRDRSLEEP 24360 //Greater Dreamless Sleep
|
||||
|
||||
#define SAY_MANA "moam bristles with energy!"
|
||||
|
||||
struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
|
||||
{
|
||||
boss_moamAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
@@ -53,6 +54,7 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoScriptText(EMOTE_AGGRO, m_creature);
|
||||
pTarget = who;
|
||||
}
|
||||
|
||||
@@ -65,7 +67,7 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
|
||||
//if (j==1 && m_creature->GetMana()*100 / m_creature->GetMaxMana() == 100 && !m_creature->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_ARCANEERUPTION);
|
||||
DoYell(SAY_MANA,LANG_UNIVERSAL,NULL);
|
||||
DoScriptText(EMOTE_MANA_FULL, m_creature);
|
||||
}
|
||||
|
||||
//If we are <50%HP cast MANA FIEND (Summon Mana) and Sleep
|
||||
|
||||
@@ -23,14 +23,15 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
//Ossirian
|
||||
//8593 I am rejuvinated!
|
||||
//8594 I have... failed
|
||||
//8595 My powers are renewed!
|
||||
//8596 My powers return!
|
||||
//8597 Protect the city at all costs!
|
||||
//8598 Sands of the desert rise and block out the sun!
|
||||
//8599 The walls have been breached!
|
||||
//8600 To your posts. Defend the city.
|
||||
//8601 Tresspassers will be terminated.
|
||||
//8602 You are terminated.
|
||||
#define SAY_SURPREME2 -1509019
|
||||
#define SAY_SURPREME3 -1509020
|
||||
|
||||
#define SAY_RAND_INTRO1 -1509021
|
||||
#define SAY_RAND_INTRO2 -1509022
|
||||
#define SAY_RAND_INTRO3 -1509023
|
||||
#define SAY_RAND_INTRO4 -1509024 //possibly old?
|
||||
|
||||
#define SAY_AGGRO -1509025
|
||||
|
||||
#define SAY_SLAY -1509026
|
||||
#define SAY_DEATH -1509027
|
||||
@@ -23,20 +23,22 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
//Rajaxx
|
||||
//8603 Attack and make them pay dearly!
|
||||
//8604 Breath your last!
|
||||
//8605 Crush them! Drive them out!
|
||||
//8606 Do not hesitate! Destroy them!
|
||||
//8613 Warriors! Captians! Continue the fight...
|
||||
//8614 You are not worth my time $N!
|
||||
//8612 The time of our retribution is at hand! Let darkness reign in the hearts of our enemies!
|
||||
//8610 No longer will we wait behind barred doors and walls of stone! No longer will our vengeance be denied! The dragons themselves will tremble before our wrath!
|
||||
//8608 Fear is for the enemy! Fear and death!
|
||||
//8611 Staghelm will whimper and beg for his life, just as his whelp of a son did! One thousand years of injustice will end this day!
|
||||
//8607 Fandral! Your time has come! Go and hide in the Emerald Dream and pray we never find you!
|
||||
//8609 Impudent fool! I will kill you myself!
|
||||
|
||||
//Andorov - no sound
|
||||
//"Remember, Rajaxx, when I said I'd kill you last? I lied..."
|
||||
//"They come now. Try not to get yourself killed, young blood."
|
||||
#define SAY_ANDOROV_INTRO -1509003
|
||||
#define SAY_ANDOROV_ATTACK -1509004
|
||||
|
||||
#define SAY_WAVE3 -1509005
|
||||
#define SAY_WAVE4 -1509006
|
||||
#define SAY_WAVE5 -1509007
|
||||
#define SAY_WAVE6 -1509008
|
||||
#define SAY_WAVE7 -1509009
|
||||
#define SAY_INTRO -1509010
|
||||
|
||||
#define SAY_UNK1 -1509011
|
||||
#define SAY_UNK2 -1509012
|
||||
#define SAY_UNK3 -1509013
|
||||
#define SAY_UNK4 -1509014
|
||||
|
||||
#define SAY_DEAGGRO -1509015
|
||||
#define SAY_KILLS_ANDOROV -1509016
|
||||
|
||||
#define SAY_COMPLETE_QUEST -1509017 //Yell when realm complete quest 8743 for world event
|
||||
@@ -16,168 +16,91 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Herod
|
||||
SD%Complete: 90
|
||||
SDComment: Missing adds spawn at death
|
||||
SD%Complete: 95
|
||||
SDComment: Should in addition spawn Myrmidons in the hallway outside
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
|
||||
#define SPELL_RUSHINGCHARGE 32021
|
||||
#define SPELL_RUSHINGCHARGE1 6268
|
||||
#define SAY_AGGRO -1189000
|
||||
#define SAY_WHIRLWIND -1189001
|
||||
#define SAY_ENRAGE -1189002
|
||||
#define SAY_KILL -1189003
|
||||
#define EMOTE_ENRAGE -1189004
|
||||
|
||||
#define SPELL_CLEAVE 11608
|
||||
#define SPELL_RUSHINGCHARGE 8260
|
||||
#define SPELL_CLEAVE 15496
|
||||
#define SPELL_WHIRLWIND 8989
|
||||
#define SPELL_SUNDERARMOR 16145
|
||||
#define SPELL_REND 21949
|
||||
#define SPELL_THUNDERCLAP 15588
|
||||
#define SPELL_SLAM 11430
|
||||
#define SPELL_BERSERKERSTANCE 2458
|
||||
#define SPELL_ENRAGE 28747
|
||||
#define SPELL_FIREBALL11 10151
|
||||
#define SPELL_CONEOFCOLD5 10161
|
||||
#define SPELL_FRENZY 8269
|
||||
|
||||
#define SAY_AGGRO "Ah, I have been waiting for a real challenge!"
|
||||
#define SAY_WHIRLWIND "Blades of Light!"
|
||||
#define SAY_ENRAGE "Light, give me strength!"
|
||||
#define SAY_DEATH "Hah, is that all?"
|
||||
|
||||
#define SOUND_AGGRO 5830
|
||||
#define SOUND_WHIRLWIND 5832
|
||||
#define SOUND_ENRAGE 5833
|
||||
#define SOUND_DEATH 5831
|
||||
#define ENTRY_SCARLET_TRAINEE 6575
|
||||
#define ENTRY_SCARLET_MYRMIDON 4295
|
||||
|
||||
struct TRINITY_DLL_DECL boss_herodAI : public ScriptedAI
|
||||
{
|
||||
boss_herodAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
uint32 Yell_Timer;
|
||||
uint32 Enrage_Timer;
|
||||
bool Enrage;
|
||||
|
||||
uint32 Cleave_Timer;
|
||||
uint32 Whirlwind_Timer;
|
||||
uint32 SunderArmor_Timer;
|
||||
uint32 Rend_Timer;
|
||||
uint32 ThunderClap_Timer;
|
||||
uint32 Slam_Timer;
|
||||
uint32 Fireball11_Timer;
|
||||
uint32 ConeOfCold5_Timer;
|
||||
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Yell_Timer = 58000;
|
||||
Enrage = false;
|
||||
Cleave_Timer = 12000;
|
||||
Whirlwind_Timer = 60000;
|
||||
Enrage_Timer = 0;
|
||||
Cleave_Timer = 15000;
|
||||
SunderArmor_Timer = 40000;
|
||||
Rend_Timer = 25000;
|
||||
ThunderClap_Timer = 25000;
|
||||
Slam_Timer = 20000;
|
||||
Fireball11_Timer = 30000;
|
||||
ConeOfCold5_Timer = 40000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_AGGRO);
|
||||
|
||||
//Activate Berserker Stance
|
||||
DoCast(m_creature,SPELL_BERSERKERSTANCE);
|
||||
|
||||
//Switch between 2 different charge methods
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoCast(m_creature,SPELL_RUSHINGCHARGE);
|
||||
break;
|
||||
case 1:
|
||||
DoCast(m_creature,SPELL_RUSHINGCHARGE1);
|
||||
break;
|
||||
}
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoCast(m_creature,SPELL_RUSHINGCHARGE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoScriptText(SAY_KILL, m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
for(uint8 i = 0; i < 20; ++i)
|
||||
m_creature->SummonCreature(ENTRY_SCARLET_TRAINEE, 1939.18, -431.58, 17.09, 6.22, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//If we are <10% hp goes Enraged
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 10 && !m_creature->IsNonMeleeSpellCasted(false) && Enrage_Timer < diff)
|
||||
{
|
||||
DoYell(SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_ENRAGE);
|
||||
|
||||
DoCast(m_creature,SPELL_ENRAGE);
|
||||
|
||||
//Shouldn't cast this agian
|
||||
Enrage_Timer = diff;
|
||||
//If we are <30% hp goes Enraged
|
||||
if (!Enrage && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 30 && !m_creature->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
DoScriptText(EMOTE_ENRAGE, m_creature);
|
||||
DoScriptText(SAY_ENRAGE, m_creature);
|
||||
DoCast(m_creature,SPELL_FRENZY);
|
||||
Enrage = true;
|
||||
}
|
||||
|
||||
//Cleave_Timer
|
||||
if (Cleave_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CLEAVE);
|
||||
Cleave_Timer = 15000;
|
||||
Cleave_Timer = 12000;
|
||||
}else Cleave_Timer -= diff;
|
||||
|
||||
//Yelling and Whirlwind casting
|
||||
if (Yell_Timer < diff)
|
||||
{
|
||||
//Say Whirlwind monologe
|
||||
DoYell(SAY_WHIRLWIND,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_WHIRLWIND);
|
||||
|
||||
Yell_Timer = 30000;
|
||||
}else Yell_Timer -= diff;
|
||||
|
||||
// Whirlwind_Timer
|
||||
if (Whirlwind_Timer < diff)
|
||||
{
|
||||
DoScriptText(SAY_WHIRLWIND, m_creature);
|
||||
DoCast(m_creature->getVictim(),SPELL_WHIRLWIND);
|
||||
Whirlwind_Timer = 30000;
|
||||
}else Whirlwind_Timer -= diff;
|
||||
|
||||
//SunderArmor_Timer
|
||||
if (SunderArmor_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_SUNDERARMOR);
|
||||
SunderArmor_Timer = 40000;
|
||||
}else SunderArmor_Timer -= diff;
|
||||
|
||||
//Rend_Timer
|
||||
if (Rend_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_REND);
|
||||
Rend_Timer = 25000;
|
||||
}else Rend_Timer -= diff;
|
||||
|
||||
//ThunderClap_Timer
|
||||
if (ThunderClap_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_THUNDERCLAP);
|
||||
ThunderClap_Timer = 20000;
|
||||
}else ThunderClap_Timer -= diff;
|
||||
|
||||
//Slam_Timer
|
||||
if (Slam_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_SLAM);
|
||||
Slam_Timer = 20000;
|
||||
}else Slam_Timer -= diff;
|
||||
|
||||
//Fireball11_Timer
|
||||
if (Fireball11_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_FIREBALL11);
|
||||
Fireball11_Timer = 30000;
|
||||
}else Fireball11_Timer -= diff;
|
||||
|
||||
//ConeOfCold5_Timer
|
||||
if (ConeOfCold5_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CONEOFCOLD5);
|
||||
ConeOfCold5_Timer = 40000;
|
||||
}else ConeOfCold5_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
@@ -187,11 +110,77 @@ CreatureAI* GetAI_boss_herod(Creature *_Creature)
|
||||
return new boss_herodAI (_Creature);
|
||||
}
|
||||
|
||||
float Location[12][3]=
|
||||
{
|
||||
{1945.81, -431.54, 16.36},
|
||||
{1946.21, -436.41, 16.36},
|
||||
{1950.01, -444.11, 14.63},
|
||||
{1956.08, -449.34, 13.12},
|
||||
{1966.59, -450.55, 11.27},
|
||||
{1976.09, -447.51, 11.27},
|
||||
{1983.42, -435.85, 11.27},
|
||||
{1978.17, -428.81, 11.27},
|
||||
{1973.97, -422.08, 9.04},
|
||||
{1963.84, -418.90, 6.17},
|
||||
{1961.22, -422.74, 6.17},
|
||||
{1964.80, -431.26, 6.17}
|
||||
};
|
||||
|
||||
uint32 Wait[12][1]=
|
||||
{
|
||||
{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{600000}
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL mob_scarlet_traineeAI : public npc_escortAI
|
||||
{
|
||||
mob_scarlet_traineeAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
uint32 Start_Timer;
|
||||
|
||||
void WaypointReached(uint32 i) { }
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Start_Timer = urand(1500,4500);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (Start_Timer)
|
||||
{
|
||||
if (Start_Timer < diff)
|
||||
{
|
||||
Start(true,true,true);
|
||||
Start_Timer = 0;
|
||||
}else Start_Timer -= diff;
|
||||
}
|
||||
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_scarlet_trainee(Creature* _Creature)
|
||||
{
|
||||
mob_scarlet_traineeAI* thisAI = new mob_scarlet_traineeAI(_Creature);
|
||||
|
||||
for(uint32 i = 0; i < 12; ++i)
|
||||
thisAI->AddWaypoint(i, Location[i][0], Location[i][1], Location[i][2], Wait[i][0]);
|
||||
|
||||
return ((CreatureAI*)thisAI);
|
||||
}
|
||||
|
||||
void AddSC_boss_herod()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name="boss_herod";
|
||||
newscript->GetAI = GetAI_boss_herod;
|
||||
newscript->GetAI = &GetAI_boss_herod;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_scarlet_trainee";
|
||||
newscript->GetAI = &GetAI_mob_scarlet_trainee;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
+4
-4
@@ -6,12 +6,12 @@
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
@@ -126,7 +126,7 @@ void AddSC_boss_high_inquisitor_fairbanks()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name="boss_high_inquisitor_fairbanks";
|
||||
newscript->GetAI = GetAI_boss_high_inquisitor_fairbanks;
|
||||
newscript->Name = "boss_high_inquisitor_fairbanks";
|
||||
newscript->GetAI = &GetAI_boss_high_inquisitor_fairbanks;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
-177
@@ -1,177 +0,0 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_High_Inquistor_Whitmane
|
||||
SD%Complete: 50
|
||||
SDComment: Missing connection with commander mograine
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SPELL_DEEPSLEEP 9256
|
||||
#define SPELL_SCARLETRESURRECTION 9232
|
||||
|
||||
#define SPELL_CRUSADERSTRIKE 17281
|
||||
#define SPELL_HAMMEROFJUSTICE 13005
|
||||
#define SPELL_HOLYSMITE6 9481
|
||||
#define SPELL_HOLYFIRE5 15265
|
||||
#define SPELL_MINDBLAST6 8106
|
||||
|
||||
#define SPELL_POWERWORDSHIELD 6065
|
||||
|
||||
#define SPELL_RENEW 6078
|
||||
#define SPELL_FLASHHEAL6 10916
|
||||
|
||||
#define SAY_AGGRO "There is no escape for you. The Crusade shall destroy all who carry the Scourge's taint."
|
||||
#define SAY_SPAWN "What, Mograine has fallen? You shall pay for this treachery! "
|
||||
#define SAY_RES "Arise, my champion!"
|
||||
#define SAY_DEATH "The Light has spoken!"
|
||||
|
||||
//#define SOUND_AGGRO
|
||||
#define SOUND_RES 5840
|
||||
#define SOUND_SPAWN 5838
|
||||
#define SOUND_DEATH 5839
|
||||
|
||||
struct TRINITY_DLL_DECL boss_high_inquisitor_whitemaneAI : public ScriptedAI
|
||||
{
|
||||
boss_high_inquisitor_whitemaneAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
uint32 Healing_Timer;
|
||||
uint32 Renew_Timer;
|
||||
uint32 PowerWordShield_Timer;
|
||||
uint32 CrusaderStrike_Timer;
|
||||
uint32 HammerOfJustice_Timer;
|
||||
uint32 HolySmite6_Timer;
|
||||
uint32 HolyFire5_Timer;
|
||||
uint32 MindBlast6_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Healing_Timer = 0;
|
||||
Renew_Timer= 0;
|
||||
PowerWordShield_Timer = 2000;
|
||||
CrusaderStrike_Timer = 12000;
|
||||
HammerOfJustice_Timer = 18000;
|
||||
HolySmite6_Timer = 10000;
|
||||
HolyFire5_Timer = 20000;
|
||||
MindBlast6_Timer = 6000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
/*
|
||||
//This is going to be a routine to make the resurrection event...
|
||||
if (m_creature->isAlive && m_creature->isAlive)
|
||||
{
|
||||
m_creature->Relocate(1163.113370,1398.856812,32.527786,3.171014);
|
||||
|
||||
DoYell(SAY_SPAWN,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_SPAWN);
|
||||
DoCast(m_creature->getVictim(),SPELL_DEEPSLEEP);
|
||||
DoCast(m-creature->GetGUID(51117),SPELL_SCARLETRESURRECTION)
|
||||
}
|
||||
*/
|
||||
|
||||
//If we are <75% hp cast healing spells at self and Mograine
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 75 )
|
||||
{
|
||||
if (Healing_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_FLASHHEAL6);
|
||||
return;
|
||||
|
||||
//22-32 seconds until we should cast this agian
|
||||
Healing_Timer = 22000 + rand()%10000;
|
||||
}else Healing_Timer -= diff;
|
||||
}
|
||||
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 30)
|
||||
{
|
||||
if (Renew_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_RENEW);
|
||||
Renew_Timer = 30000;
|
||||
}else Renew_Timer -= diff;
|
||||
}
|
||||
|
||||
//PowerWordShield_Timer
|
||||
if (PowerWordShield_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_POWERWORDSHIELD);
|
||||
PowerWordShield_Timer = 25000;
|
||||
}else PowerWordShield_Timer -= diff;
|
||||
|
||||
//CrusaderStrike_Timer
|
||||
if (CrusaderStrike_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CRUSADERSTRIKE);
|
||||
CrusaderStrike_Timer = 15000;
|
||||
}else CrusaderStrike_Timer -= diff;
|
||||
|
||||
//HammerOfJustice_Timer
|
||||
if (HammerOfJustice_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HAMMEROFJUSTICE);
|
||||
HammerOfJustice_Timer = 12000;
|
||||
}else HammerOfJustice_Timer -= diff;
|
||||
|
||||
//HolySmite6_Timer
|
||||
if (HolySmite6_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HOLYSMITE6);
|
||||
HolySmite6_Timer = 10000;
|
||||
}else HolySmite6_Timer -= diff;
|
||||
|
||||
//HolyFire5_Timer
|
||||
if (HolyFire5_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HOLYFIRE5);
|
||||
HolyFire5_Timer = 15000;
|
||||
}else HolyFire5_Timer -= diff;
|
||||
|
||||
//MindBlast6_Timer
|
||||
if (MindBlast6_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_MINDBLAST6);
|
||||
MindBlast6_Timer = 8000;
|
||||
}else MindBlast6_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_boss_high_inquisitor_whitemane(Creature *_Creature)
|
||||
{
|
||||
return new boss_high_inquisitor_whitemaneAI (_Creature);
|
||||
}
|
||||
|
||||
void AddSC_boss_high_inquisitor_whitemane()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name="boss_high_inquisitor_whitemane";
|
||||
newscript->GetAI = GetAI_boss_high_inquisitor_whitemane;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Mograine_And_Whitemane
|
||||
SD%Complete: 75
|
||||
SDComment: Event not implemented
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_scarlet_monastery.h"
|
||||
|
||||
#define SAY_MO_AGGRO -1189005
|
||||
#define SAY_MO_KILL -1189006
|
||||
#define SAY_MO_RESSURECTED -1189007
|
||||
|
||||
#define SAY_WH_INTRO -1189008
|
||||
#define SAY_WH_KILL -1189009
|
||||
#define SAY_WH_RESSURECT -1189010
|
||||
|
||||
#define SPELL_DIVINESHIELD2 1020
|
||||
#define SPELL_CRUSADERSTRIKE5 35395
|
||||
#define SPELL_HAMMEROFJUSTICE3 5589
|
||||
#define SPELL_HOLYLIGHT6 3472
|
||||
#define SPELL_CONSECRATION3 20922
|
||||
#define SPELL_BLESSINGOFWISDOM 1044
|
||||
#define SPELL_RETRIBUTIONAURA3 10299
|
||||
#define SPELL_BLESSINGOFPROTECTION3 10278
|
||||
#define SPELL_FLASHHEAL6 10916
|
||||
|
||||
struct TRINITY_DLL_DECL boss_scarlet_commander_mograineAI : public ScriptedAI
|
||||
{
|
||||
boss_scarlet_commander_mograineAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 Heal_Timer;
|
||||
uint32 DivineShield2_Timer;
|
||||
uint32 CrusaderStrike5_Timer;
|
||||
uint32 HammerOfJustice3_Timer;
|
||||
uint32 Consecration3_Timer;
|
||||
uint32 BlessingOfWisdom_Timer;
|
||||
uint32 BlessingOfProtection3_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Heal_Timer = 80000;
|
||||
DivineShield2_Timer = 60000;
|
||||
CrusaderStrike5_Timer = 20000;
|
||||
HammerOfJustice3_Timer = 80000;
|
||||
Consecration3_Timer = 30000;
|
||||
BlessingOfWisdom_Timer = 45000;
|
||||
BlessingOfProtection3_Timer = 45000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoScriptText(SAY_MO_AGGRO, m_creature);
|
||||
DoCast(m_creature,SPELL_RETRIBUTIONAURA3);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoScriptText(SAY_MO_KILL, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//If we are <50% hp cast Arcane Bubble and start casting SPECIAL Arcane Explosion
|
||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && !m_creature->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
//heal_Timer
|
||||
if (Heal_Timer < diff)
|
||||
{
|
||||
//Switch between 2 different charge methods
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoCast(m_creature,SPELL_HOLYLIGHT6);
|
||||
break;
|
||||
case 1:
|
||||
DoCast(m_creature,SPELL_FLASHHEAL6);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
|
||||
//60 seconds until we should cast this agian
|
||||
Heal_Timer = 60000;
|
||||
}else Heal_Timer -= diff;
|
||||
}
|
||||
|
||||
//DivineShield2_Timer
|
||||
if (DivineShield2_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_DIVINESHIELD2);
|
||||
DivineShield2_Timer = 60000;
|
||||
}else DivineShield2_Timer -= diff;
|
||||
|
||||
//CrusaderStrike5_Timer
|
||||
if (CrusaderStrike5_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CRUSADERSTRIKE5);
|
||||
CrusaderStrike5_Timer = 20000;
|
||||
}else CrusaderStrike5_Timer -= diff;
|
||||
|
||||
//HammerOfJustice3_Timer
|
||||
if (HammerOfJustice3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HAMMEROFJUSTICE3);
|
||||
HammerOfJustice3_Timer = 30000;
|
||||
}else HammerOfJustice3_Timer -= diff;
|
||||
|
||||
//Consecration3_Timer
|
||||
if (Consecration3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CONSECRATION3);
|
||||
Consecration3_Timer = 20000;
|
||||
}else Consecration3_Timer -= diff;
|
||||
|
||||
//BlessingOfWisdom_Timer
|
||||
if (BlessingOfWisdom_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_BLESSINGOFWISDOM);
|
||||
BlessingOfWisdom_Timer = 45000;
|
||||
}else BlessingOfWisdom_Timer -= diff;
|
||||
|
||||
//BlessingOfProtection3_Timer
|
||||
if (BlessingOfProtection3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_BLESSINGOFPROTECTION3);
|
||||
BlessingOfProtection3_Timer = 50000;
|
||||
}else BlessingOfProtection3_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
#define SPELL_DEEPSLEEP 9256
|
||||
#define SPELL_SCARLETRESURRECTION 9232
|
||||
|
||||
#define SPELL_CRUSADERSTRIKE 17281
|
||||
#define SPELL_HAMMEROFJUSTICE 13005
|
||||
#define SPELL_HOLYSMITE6 9481
|
||||
#define SPELL_HOLYFIRE5 15265
|
||||
#define SPELL_MINDBLAST6 8106
|
||||
|
||||
#define SPELL_POWERWORDSHIELD 6065
|
||||
|
||||
#define SPELL_RENEW 6078
|
||||
#define SPELL_FLASHHEAL6 10916
|
||||
|
||||
struct TRINITY_DLL_DECL boss_high_inquisitor_whitemaneAI : public ScriptedAI
|
||||
{
|
||||
boss_high_inquisitor_whitemaneAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 Healing_Timer;
|
||||
uint32 Renew_Timer;
|
||||
uint32 PowerWordShield_Timer;
|
||||
uint32 CrusaderStrike_Timer;
|
||||
uint32 HammerOfJustice_Timer;
|
||||
uint32 HolySmite6_Timer;
|
||||
uint32 HolyFire5_Timer;
|
||||
uint32 MindBlast6_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Healing_Timer = 0;
|
||||
Renew_Timer= 0;
|
||||
PowerWordShield_Timer = 2000;
|
||||
CrusaderStrike_Timer = 12000;
|
||||
HammerOfJustice_Timer = 18000;
|
||||
HolySmite6_Timer = 10000;
|
||||
HolyFire5_Timer = 20000;
|
||||
MindBlast6_Timer = 6000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoScriptText(SAY_WH_INTRO, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
DoScriptText(SAY_WH_KILL, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
/*
|
||||
//This is going to be a routine to make the resurrection event...
|
||||
if (m_creature->isAlive && m_creature->isAlive)
|
||||
{
|
||||
m_creature->Relocate(1163.113370,1398.856812,32.527786,3.171014);
|
||||
|
||||
DoScriptText(SAY_WH_RESSURECT, m_creature);
|
||||
|
||||
DoCast(m_creature->getVictim(),SPELL_DEEPSLEEP);
|
||||
DoCast(m-creature->GetGUID(51117),SPELL_SCARLETRESURRECTION)
|
||||
}
|
||||
*/
|
||||
|
||||
//If we are <75% hp cast healing spells at self and Mograine
|
||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 75 )
|
||||
{
|
||||
if (Healing_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_FLASHHEAL6);
|
||||
return;
|
||||
|
||||
//22-32 seconds until we should cast this agian
|
||||
Healing_Timer = 22000 + rand()%10000;
|
||||
}else Healing_Timer -= diff;
|
||||
}
|
||||
|
||||
if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 30)
|
||||
{
|
||||
if (Renew_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_RENEW);
|
||||
Renew_Timer = 30000;
|
||||
}else Renew_Timer -= diff;
|
||||
}
|
||||
|
||||
//PowerWordShield_Timer
|
||||
if (PowerWordShield_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_POWERWORDSHIELD);
|
||||
PowerWordShield_Timer = 25000;
|
||||
}else PowerWordShield_Timer -= diff;
|
||||
|
||||
//CrusaderStrike_Timer
|
||||
if (CrusaderStrike_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CRUSADERSTRIKE);
|
||||
CrusaderStrike_Timer = 15000;
|
||||
}else CrusaderStrike_Timer -= diff;
|
||||
|
||||
//HammerOfJustice_Timer
|
||||
if (HammerOfJustice_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HAMMEROFJUSTICE);
|
||||
HammerOfJustice_Timer = 12000;
|
||||
}else HammerOfJustice_Timer -= diff;
|
||||
|
||||
//HolySmite6_Timer
|
||||
if (HolySmite6_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HOLYSMITE6);
|
||||
HolySmite6_Timer = 10000;
|
||||
}else HolySmite6_Timer -= diff;
|
||||
|
||||
//HolyFire5_Timer
|
||||
if (HolyFire5_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HOLYFIRE5);
|
||||
HolyFire5_Timer = 15000;
|
||||
}else HolyFire5_Timer -= diff;
|
||||
|
||||
//MindBlast6_Timer
|
||||
if (MindBlast6_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_MINDBLAST6);
|
||||
MindBlast6_Timer = 8000;
|
||||
}else MindBlast6_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_scarlet_commander_mograine(Creature *_Creature)
|
||||
{
|
||||
return new boss_scarlet_commander_mograineAI (_Creature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_boss_high_inquisitor_whitemane(Creature *_Creature)
|
||||
{
|
||||
return new boss_high_inquisitor_whitemaneAI (_Creature);
|
||||
}
|
||||
|
||||
void AddSC_boss_mograine_and_whitemane()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_scarlet_commander_mograine";
|
||||
newscript->GetAI = &GetAI_boss_scarlet_commander_mograine;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_high_inquisitor_whitemane";
|
||||
newscript->GetAI = &GetAI_boss_high_inquisitor_whitemane;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
-160
@@ -1,160 +0,0 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Scarlet_Commander_Mograine
|
||||
SD%Complete: 100
|
||||
SDComment: Missing revive
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SPELL_DIVINESHIELD2 1020
|
||||
#define SPELL_CRUSADERSTRIKE5 35395
|
||||
#define SPELL_HAMMEROFJUSTICE3 5589
|
||||
#define SPELL_HOLYLIGHT6 3472
|
||||
#define SPELL_CONSECRATION3 20922
|
||||
#define SPELL_BLESSINGOFWISDOM 1044
|
||||
#define SPELL_RETRIBUTIONAURA3 10299
|
||||
#define SPELL_BLESSINGOFPROTECTION3 10278
|
||||
#define SPELL_FLASHHEAL6 10916
|
||||
|
||||
#define SAY_AGGRO "Infidels! They must be purified!"
|
||||
#define SAY_RES "At your side, milady!"
|
||||
#define SAY_DEATH "Unworthy!"
|
||||
|
||||
#define SOUND_AGGRO 5835
|
||||
#define SOUND_RES 5837
|
||||
#define SOUND_DEATH 5836
|
||||
|
||||
struct TRINITY_DLL_DECL boss_scarlet_commander_mograineAI : public ScriptedAI
|
||||
{
|
||||
boss_scarlet_commander_mograineAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
uint32 Heal_Timer;
|
||||
uint32 DivineShield2_Timer;
|
||||
uint32 CrusaderStrike5_Timer;
|
||||
uint32 HammerOfJustice3_Timer;
|
||||
uint32 Consecration3_Timer;
|
||||
uint32 BlessingOfWisdom_Timer;
|
||||
uint32 BlessingOfProtection3_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Heal_Timer = 80000;
|
||||
DivineShield2_Timer = 60000;
|
||||
CrusaderStrike5_Timer = 20000;
|
||||
HammerOfJustice3_Timer = 80000;
|
||||
Consecration3_Timer = 30000;
|
||||
BlessingOfWisdom_Timer = 45000;
|
||||
BlessingOfProtection3_Timer = 45000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_AGGRO);
|
||||
DoCast(m_creature,SPELL_RETRIBUTIONAURA3);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//If we are <50% hp cast Arcane Bubble and start casting SPECIAL Arcane Explosion
|
||||
if ( m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && !m_creature->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
//heal_Timer
|
||||
if (Heal_Timer < diff)
|
||||
{
|
||||
//Switch between 2 different charge methods
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoCast(m_creature,SPELL_HOLYLIGHT6);
|
||||
break;
|
||||
case 1:
|
||||
DoCast(m_creature,SPELL_FLASHHEAL6);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
|
||||
//60 seconds until we should cast this agian
|
||||
Heal_Timer = 60000;
|
||||
}else Heal_Timer -= diff;
|
||||
}
|
||||
|
||||
//DivineShield2_Timer
|
||||
if (DivineShield2_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_DIVINESHIELD2);
|
||||
DivineShield2_Timer = 60000;
|
||||
}else DivineShield2_Timer -= diff;
|
||||
|
||||
//CrusaderStrike5_Timer
|
||||
if (CrusaderStrike5_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CRUSADERSTRIKE5);
|
||||
CrusaderStrike5_Timer = 20000;
|
||||
}else CrusaderStrike5_Timer -= diff;
|
||||
|
||||
//HammerOfJustice3_Timer
|
||||
if (HammerOfJustice3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_HAMMEROFJUSTICE3);
|
||||
HammerOfJustice3_Timer = 30000;
|
||||
}else HammerOfJustice3_Timer -= diff;
|
||||
|
||||
//Consecration3_Timer
|
||||
if (Consecration3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CONSECRATION3);
|
||||
Consecration3_Timer = 20000;
|
||||
}else Consecration3_Timer -= diff;
|
||||
|
||||
//BlessingOfWisdom_Timer
|
||||
if (BlessingOfWisdom_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_BLESSINGOFWISDOM);
|
||||
BlessingOfWisdom_Timer = 45000;
|
||||
}else BlessingOfWisdom_Timer -= diff;
|
||||
|
||||
//BlessingOfProtection3_Timer
|
||||
if (BlessingOfProtection3_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature,SPELL_BLESSINGOFPROTECTION3);
|
||||
BlessingOfProtection3_Timer = 50000;
|
||||
}else BlessingOfProtection3_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_scarlet_commander_mograine(Creature *_Creature)
|
||||
{
|
||||
return new boss_scarlet_commander_mograineAI (_Creature);
|
||||
}
|
||||
|
||||
void AddSC_boss_scarlet_commander_mograine()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name="boss_scarlet_commander_mograine";
|
||||
newscript->GetAI = GetAI_boss_scarlet_commander_mograine;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
@@ -5,6 +5,11 @@
|
||||
#ifndef DEF_SCARLET_M
|
||||
#define DEF_SCARLET_M
|
||||
|
||||
#define DATA_HORSEMAN_EVENT 1
|
||||
#define GAMEOBJECT_PUMPKIN_SHRINE 2
|
||||
#define TYPE_MOGRAINE_AND_WHITE_EVENT 1
|
||||
#define DATA_MOGRAINE 2
|
||||
#define DATA_WHITEMANE 3
|
||||
#define DATA_DOOR_WHITEMANE 4
|
||||
|
||||
#define DATA_HORSEMAN_EVENT 5
|
||||
#define GAMEOBJECT_PUMPKIN_SHRINE 6
|
||||
#endif
|
||||
@@ -1,3 +1,25 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Scarlet_Monastery
|
||||
SD%Complete: 50
|
||||
SDComment:
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_scarlet_monastery.h"
|
||||
@@ -8,6 +30,8 @@
|
||||
#define ENTRY_HEAD 23775
|
||||
#define ENTRY_PUMPKIN 23694
|
||||
|
||||
#define ENCOUNTERS 1
|
||||
|
||||
struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
|
||||
{
|
||||
instance_scarlet_monastery(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
@@ -17,20 +41,33 @@ struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
|
||||
uint64 HeadGUID;
|
||||
std::set<uint64> HorsemanAdds;
|
||||
|
||||
uint64 MograineGUID;
|
||||
uint64 WhitemaneGUID;
|
||||
uint64 DoorHighInquisitorGUID;
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
PumpkinShrineGUID = 0;
|
||||
HorsemanGUID = 0;
|
||||
HeadGUID = 0;
|
||||
HorsemanAdds.clear();
|
||||
|
||||
MograineGUID = 0;
|
||||
WhitemaneGUID = 0;
|
||||
DoorHighInquisitorGUID = 0;
|
||||
|
||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||
Encounter[i] = NOT_STARTED;
|
||||
}
|
||||
|
||||
void OnObjectCreate(GameObject *go)
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case ENTRY_PUMPKIN_SHRINE:
|
||||
PumpkinShrineGUID = go->GetGUID();break;
|
||||
case ENTRY_PUMPKIN_SHRINE: PumpkinShrineGUID = go->GetGUID();break;
|
||||
case 104600: DoorHighInquisitorGUID = go->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +78,8 @@ struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
|
||||
case ENTRY_HORSEMAN: HorsemanGUID = creature->GetGUID(); break;
|
||||
case ENTRY_HEAD: HeadGUID = creature->GetGUID(); break;
|
||||
case ENTRY_PUMPKIN: HorsemanAdds.insert(creature->GetGUID());break;
|
||||
case 3976: MograineGUID = creature->GetGUID(); break;
|
||||
case 3977: WhitemaneGUID = creature->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +87,7 @@ struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_MOGRAINE_AND_WHITE_EVENT: Encounter[0] = data; break;
|
||||
case GAMEOBJECT_PUMPKIN_SHRINE:
|
||||
{
|
||||
GameObject *Shrine = instance->GetGameObjectInMap(PumpkinShrineGUID);
|
||||
@@ -72,16 +112,27 @@ struct TRINITY_DLL_DECL instance_scarlet_monastery : public ScriptedInstance
|
||||
}
|
||||
}
|
||||
|
||||
/* uint64 GetData64(uint32 type)
|
||||
uint64 GetData64(uint32 type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case GAMEOBJECT_PUMPKIN_SHRINE: return PumpkinShrineGUID;
|
||||
case DATA_HORSEMAN: return HorsemanGUID;
|
||||
case DATA_HEAD: return HeadGUID;
|
||||
//case GAMEOBJECT_PUMPKIN_SHRINE: return PumpkinShrineGUID;
|
||||
//case DATA_HORSEMAN: return HorsemanGUID;
|
||||
//case DATA_HEAD: return HeadGUID;
|
||||
case DATA_MOGRAINE: return MograineGUID;
|
||||
case DATA_WHITEMANE: return WhitemaneGUID;
|
||||
case DATA_DOOR_WHITEMANE: return DoorHighInquisitorGUID;
|
||||
}
|
||||
return 0;
|
||||
}*/
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
if (type == TYPE_MOGRAINE_AND_WHITE_EVENT)
|
||||
return Encounter[0];
|
||||
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstanceData_instance_scarlet_monastery(Map* map)
|
||||
|
||||
@@ -26,7 +26,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_scholomance : public ScriptedInstance
|
||||
{
|
||||
instance_scholomance(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_scholomance(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
//Lord Alexei Barov, Doctor Theolen Krastinov, The Ravenian, Lorekeeper Polkelt, Instructor Malicia and the Lady Illucia Barov.
|
||||
bool IsBossDied[6];
|
||||
|
||||
@@ -28,7 +28,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
||||
{
|
||||
instance_shadowfang_keep(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_shadowfang_keep(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -33,6 +33,9 @@ EndContentData */
|
||||
## npc_shadowfang_prisoner
|
||||
######*/
|
||||
|
||||
#define SAY_FREE -1033000
|
||||
#define GOSSIP_ITEM_DOOR "Thanks, I'll follow you to the door."
|
||||
|
||||
struct TRINITY_DLL_DECL npc_shadowfang_prisonerAI : public npc_escortAI
|
||||
{
|
||||
npc_shadowfang_prisonerAI(Creature *c) : npc_escortAI(c)
|
||||
@@ -48,7 +51,7 @@ struct TRINITY_DLL_DECL npc_shadowfang_prisonerAI : public npc_escortAI
|
||||
if( pInstance && i == 6)
|
||||
{
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
|
||||
m_creature->Say("Thanks for freeing me, I'll open this door for you, then I will get out of here.", LANG_UNIVERSAL, 0);
|
||||
DoScriptText(SAY_FREE, m_creature);
|
||||
pInstance->SetData(TYPE_FREE_NPC, DONE);
|
||||
}
|
||||
}
|
||||
@@ -82,8 +85,7 @@ bool GossipHello_npc_shadowfang_prisoner(Player *player, Creature *_Creature)
|
||||
{
|
||||
ScriptedInstance* pInstance = ((ScriptedInstance*)_Creature->GetInstanceData());
|
||||
|
||||
if( pInstance && !pInstance->GetData(TYPE_FREE_NPC) && pInstance->GetData(TYPE_RETHILGORE) == DONE )
|
||||
player->ADD_GOSSIP_ITEM( 0, "Thanks, I'll follow you to the door.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||
player->ADD_GOSSIP_ITEM( 0, GOSSIP_ITEM_DOOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||
|
||||
player->SEND_GOSSIP_MENU(_Creature->GetNpcTextId(), _Creature->GetGUID());
|
||||
|
||||
|
||||
@@ -17,16 +17,82 @@
|
||||
/* ScriptData
|
||||
SDName: Silithus
|
||||
SD%Complete: 100
|
||||
SDComment: Quest support: 8304.
|
||||
SDComment: Quest support: 7785, 8304.
|
||||
SDCategory: Silithus
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
npc_highlord_demitrian
|
||||
npcs_rutgar_and_frankal
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
/*###
|
||||
## npc_highlord_demitrian
|
||||
###*/
|
||||
|
||||
#define GOSSIP_DEMITRIAN1 "What do you know of it?"
|
||||
#define GOSSIP_DEMITRIAN2 "I am listening , Demitrian."
|
||||
#define GOSSIP_DEMITRIAN3 "Continue, please."
|
||||
#define GOSSIP_DEMITRIAN4 "A battle?"
|
||||
#define GOSSIP_DEMITRIAN5 "<Nod>"
|
||||
#define GOSSIP_DEMITRIAN6 "Caught unaware? How?"
|
||||
#define GOSSIP_DEMITRIAN7 "So what did Ragnaros do next?"
|
||||
|
||||
bool GossipHello_npc_highlord_demitrian(Player *player, Creature *_Creature)
|
||||
{
|
||||
if (_Creature->isQuestGiver())
|
||||
player->PrepareQuestMenu(_Creature->GetGUID());
|
||||
|
||||
if (player->GetQuestStatus(7785) == QUEST_STATUS_NONE &&
|
||||
(player->HasItemCount(18563,1,false) || player->HasItemCount(18564,1,false)))
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
|
||||
player->SEND_GOSSIP_MENU(6812, _Creature->GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GossipSelect_npc_highlord_demitrian(Player *player, Creature *_Creature, uint32 sender, uint32 action)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
||||
player->SEND_GOSSIP_MENU(6842, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+1:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
|
||||
player->SEND_GOSSIP_MENU(6843, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+2:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
|
||||
player->SEND_GOSSIP_MENU(6844, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+3:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
|
||||
player->SEND_GOSSIP_MENU(6867, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+4:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
|
||||
player->SEND_GOSSIP_MENU(6868, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+5:
|
||||
player->ADD_GOSSIP_ITEM(0, GOSSIP_DEMITRIAN7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
|
||||
player->SEND_GOSSIP_MENU(6869, _Creature->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF+6:
|
||||
player->SEND_GOSSIP_MENU(6870, _Creature->GetGUID());
|
||||
|
||||
ItemPosCountVec dest;
|
||||
uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 19016, 1);
|
||||
if (msg == EQUIP_ERR_OK)
|
||||
player->StoreNewItem(dest, 19016, true);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*###
|
||||
## npcs_rutgar_and_frankal
|
||||
###*/
|
||||
@@ -141,7 +207,14 @@ bool GossipSelect_npcs_rutgar_and_frankal(Player *player, Creature *_Creature, u
|
||||
void AddSC_silithus()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_highlord_demitrian";
|
||||
newscript->pGossipHello = &GossipHello_npc_highlord_demitrian;
|
||||
newscript->pGossipSelect = &GossipSelect_npc_highlord_demitrian;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="npcs_rutgar_and_frankal";
|
||||
newscript->pGossipHello = &GossipHello_npcs_rutgar_and_frankal;
|
||||
newscript->pGossipSelect = &GossipSelect_npcs_rutgar_and_frankal;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
|
||||
@@ -15,13 +15,14 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_baron_rivendare
|
||||
SD%Complete: 100
|
||||
SDName: Boss_Baron_Rivendare
|
||||
SD%Complete: 70
|
||||
SDComment: aura applied/defined in database
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SAY_0 "Intruders! More pawns of the Argent Dawn, no doubt. I already count one of their number among my prisoners. Withdraw from my domain before she is executed!"
|
||||
#define SAY_1 "You're still here? Your foolishness is amusing! The Argent Dawn wench needn't suffer in vain. Leave at once and she shall be spared!"
|
||||
@@ -60,19 +61,29 @@ EndScriptData */
|
||||
#define ADD_6Z 115.055222
|
||||
#define ADD_6O 2.457497
|
||||
|
||||
#define SPELL_SHADOWBOLT 18164
|
||||
#define SPELL_CLEAVE 15584
|
||||
#define SPELL_MORTALSTRIKE 13737
|
||||
#define SPELL_SHADOWBOLT 17393
|
||||
#define SPELL_CLEAVE 15284
|
||||
#define SPELL_MORTALSTRIKE 15708
|
||||
|
||||
// spell 17473 should trigger -> 17471
|
||||
|
||||
//#define SPELL_RAISEDEAD 17475
|
||||
//#define SPELL_DEATHPACT 17698
|
||||
//#define SPELL_SUMMONSKELETONS 17274
|
||||
#define SPELL_UNHOLY_AURA 17467
|
||||
#define SPELL_RAISEDEAD 17473 //triggers death pact (17471)
|
||||
|
||||
#define SPELL_RAISE_DEAD1 17475
|
||||
#define SPELL_RAISE_DEAD2 17476
|
||||
#define SPELL_RAISE_DEAD3 17477
|
||||
#define SPELL_RAISE_DEAD4 17478
|
||||
#define SPELL_RAISE_DEAD5 17479
|
||||
#define SPELL_RAISE_DEAD6 17480
|
||||
|
||||
struct TRINITY_DLL_DECL boss_baron_rivendareAI : public ScriptedAI
|
||||
{
|
||||
boss_baron_rivendareAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_baron_rivendareAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 ShadowBolt_Timer;
|
||||
uint32 Cleave_Timer;
|
||||
@@ -88,108 +99,71 @@ struct TRINITY_DLL_DECL boss_baron_rivendareAI : public ScriptedAI
|
||||
MortalStrike_Timer = 12000;
|
||||
// RaiseDead_Timer = 30000;
|
||||
SummonSkeletons_Timer = 34000;
|
||||
|
||||
m_creature->LoadCreaturesAddon();
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
switch (rand()%6)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_0,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_1,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_2,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 3:
|
||||
DoYell(SAY_3,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 4:
|
||||
DoYell(SAY_4,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 5:
|
||||
DoYell(SAY_5,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
}
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_BARON,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
summoned->AI()->AttackStart(target);
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_BARON,DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//ShadowBolt
|
||||
if (ShadowBolt_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 70) //70% chance to cast
|
||||
{
|
||||
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||
DoCast(m_creature->getVictim(),SPELL_SHADOWBOLT);
|
||||
}
|
||||
//10 seconds until we should cast this again
|
||||
|
||||
ShadowBolt_Timer = 10000;
|
||||
}else ShadowBolt_Timer -= diff;
|
||||
|
||||
//Cleave
|
||||
if (Cleave_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 55) //55% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CLEAVE);
|
||||
}
|
||||
DoCast(m_creature->getVictim(),SPELL_CLEAVE);
|
||||
//13 seconds until we should cast this again
|
||||
Cleave_Timer = 12000;
|
||||
Cleave_Timer = 7000 + (rand()%10000);
|
||||
}else Cleave_Timer -= diff;
|
||||
|
||||
//MortalStrike
|
||||
if (MortalStrike_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 30) //30% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_MORTALSTRIKE);
|
||||
}
|
||||
//16 seconds until we should cast this again
|
||||
MortalStrike_Timer = 16000;
|
||||
DoCast(m_creature->getVictim(),SPELL_MORTALSTRIKE);
|
||||
MortalStrike_Timer = 10000 + (rand()%15000);
|
||||
}else MortalStrike_Timer -= diff;
|
||||
|
||||
//RaiseDead
|
||||
// if (RaiseDead_Timer < diff)
|
||||
// {
|
||||
//Cast
|
||||
// DoCast(m_creature,SPELL_RAISEDEAD);
|
||||
// DoSay("summon triggered",LANG_UNIVERSAL,NULL); //just a checkpoint
|
||||
//45 seconds until we should cast this again
|
||||
// {
|
||||
// DoCast(m_creature,SPELL_RAISEDEAD);
|
||||
// RaiseDead_Timer = 45000;
|
||||
// }else RaiseDead_Timer -= diff;
|
||||
|
||||
//SummonSkeletons
|
||||
//Creature* Unit::SummonCreature(uint32 id, float x, float y, float z, float ang,TempSummonType spwtype,uint32 despwtime);
|
||||
|
||||
if (SummonSkeletons_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
//Cast
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_1X,ADD_1Y,ADD_1Z,ADD_1O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_2X,ADD_2Y,ADD_2Z,ADD_2O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_3X,ADD_3Y,ADD_3Z,ADD_3O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_4X,ADD_4Y,ADD_4Z,ADD_4O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_5X,ADD_5Y,ADD_5Z,ADD_5O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(11197,ADD_6X,ADD_6Y,ADD_6Z,ADD_6O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
m_creature->SummonCreature(11197,ADD_1X,ADD_1Y,ADD_1Z,ADD_1O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
m_creature->SummonCreature(11197,ADD_2X,ADD_2Y,ADD_2Z,ADD_2O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
m_creature->SummonCreature(11197,ADD_3X,ADD_3Y,ADD_3Z,ADD_3O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
m_creature->SummonCreature(11197,ADD_4X,ADD_4Y,ADD_4Z,ADD_4O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
m_creature->SummonCreature(11197,ADD_5X,ADD_5Y,ADD_5Z,ADD_5O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
m_creature->SummonCreature(11197,ADD_6X,ADD_6Y,ADD_6Z,ADD_6O,TEMPSUMMON_TIMED_DESPAWN,29000);
|
||||
|
||||
//34 seconds until we should cast this again
|
||||
SummonSkeletons_Timer = 40000;
|
||||
|
||||
@@ -15,13 +15,14 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_baroness_anastari
|
||||
SDName: Boss_Baroness_Anastari
|
||||
SD%Complete: 90
|
||||
SDComment: MC disabled
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SPELL_BANSHEEWAIL 16565
|
||||
#define SPELL_BANSHEECURSE 16867
|
||||
@@ -30,7 +31,13 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL boss_baroness_anastariAI : public ScriptedAI
|
||||
{
|
||||
boss_baroness_anastariAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_baroness_anastariAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 BansheeWail_Timer;
|
||||
uint32 BansheeCurse_Timer;
|
||||
@@ -48,20 +55,23 @@ struct TRINITY_DLL_DECL boss_baroness_anastariAI : public ScriptedAI
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_BARONESS,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//BansheeWail
|
||||
if (BansheeWail_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 95) //95% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_BANSHEEWAIL);
|
||||
}
|
||||
if (rand()%100 < 95)
|
||||
DoCast(m_creature->getVictim(),SPELL_BANSHEEWAIL);
|
||||
//4 seconds until we should cast this again
|
||||
BansheeWail_Timer = 4000;
|
||||
}else BansheeWail_Timer -= diff;
|
||||
@@ -69,11 +79,8 @@ struct TRINITY_DLL_DECL boss_baroness_anastariAI : public ScriptedAI
|
||||
//BansheeCurse
|
||||
if (BansheeCurse_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 75) //75% chance to cast
|
||||
{
|
||||
if (rand()%100 < 75)
|
||||
DoCast(m_creature->getVictim(),SPELL_BANSHEECURSE);
|
||||
}
|
||||
//18 seconds until we should cast this again
|
||||
BansheeCurse_Timer = 18000;
|
||||
}else BansheeCurse_Timer -= diff;
|
||||
@@ -81,11 +88,8 @@ struct TRINITY_DLL_DECL boss_baroness_anastariAI : public ScriptedAI
|
||||
//Silence
|
||||
if (Silence_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 80) //80% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_SILENCE);
|
||||
}
|
||||
if (rand()%100 < 80)
|
||||
DoCast(m_creature->getVictim(),SPELL_SILENCE);
|
||||
//13 seconds until we should cast this again
|
||||
Silence_Timer = 13000;
|
||||
}else Silence_Timer -= diff;
|
||||
@@ -94,7 +98,7 @@ struct TRINITY_DLL_DECL boss_baroness_anastariAI : public ScriptedAI
|
||||
/* if (Possess_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 65) //65% chance to cast
|
||||
if (rand()%100 < 65)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
@@ -15,35 +15,64 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_magistrate_barthilas
|
||||
SD%Complete: 100
|
||||
SDName: Boss_Magistrate_Barthilas
|
||||
SD%Complete: 70
|
||||
SDComment:
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SPELL_DRAININGBLOW 16793
|
||||
#define SPELL_CROWDPUMMEL 10887
|
||||
#define SPELL_MIGHTYBLOW 14099
|
||||
#define SPELL_DAZED 1604
|
||||
#define SPELL_FURIOUS_ANGER 16791
|
||||
|
||||
#define MODEL_NORMAL 10433
|
||||
#define MODEL_HUMAN 3637
|
||||
|
||||
struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI
|
||||
{
|
||||
boss_magistrate_barthilasAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_magistrate_barthilasAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 DrainingBlow_Timer;
|
||||
uint32 CrowdPummel_Timer;
|
||||
uint32 MightyBlow_Timer;
|
||||
uint32 Dazed_Timer;
|
||||
uint32 FuriousAnger_Timer;
|
||||
uint32 AngerCount;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
DrainingBlow_Timer = 4000;
|
||||
CrowdPummel_Timer = 13000;
|
||||
MightyBlow_Timer = 11000;
|
||||
Dazed_Timer = 7000;
|
||||
}
|
||||
DrainingBlow_Timer = 20000;
|
||||
CrowdPummel_Timer = 15000;
|
||||
MightyBlow_Timer = 10000;
|
||||
FuriousAnger_Timer = 5000;
|
||||
AngerCount = 0;
|
||||
|
||||
if (m_creature->isAlive())
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NORMAL);
|
||||
else
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
//nothing to see here yet
|
||||
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
@@ -55,46 +84,37 @@ struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if (FuriousAnger_Timer < diff)
|
||||
{
|
||||
FuriousAnger_Timer = 4000;
|
||||
if (AngerCount > 25)
|
||||
return;
|
||||
|
||||
++AngerCount;
|
||||
m_creature->CastSpell(m_creature,SPELL_FURIOUS_ANGER,false);
|
||||
}else FuriousAnger_Timer -= diff;
|
||||
|
||||
//DrainingBlow
|
||||
if (DrainingBlow_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
DoCast(m_creature->getVictim(),SPELL_DRAININGBLOW);
|
||||
|
||||
//4 seconds until we should cast this again
|
||||
DrainingBlow_Timer = 4000;
|
||||
DrainingBlow_Timer = 15000;
|
||||
}else DrainingBlow_Timer -= diff;
|
||||
|
||||
//CrowdPummel
|
||||
if (CrowdPummel_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
DoCast(m_creature->getVictim(),SPELL_CROWDPUMMEL);
|
||||
|
||||
//13 seconds until we should cast this agian
|
||||
CrowdPummel_Timer = 13000;
|
||||
DoCast(m_creature->getVictim(),SPELL_CROWDPUMMEL);
|
||||
CrowdPummel_Timer = 15000;
|
||||
}else CrowdPummel_Timer -= diff;
|
||||
|
||||
//MightyBlow
|
||||
if (MightyBlow_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_MIGHTYBLOW);
|
||||
|
||||
//11 seconds until we should cast this again
|
||||
MightyBlow_Timer = 11000;
|
||||
MightyBlow_Timer = 20000;
|
||||
}else MightyBlow_Timer -= diff;
|
||||
|
||||
//Dazed
|
||||
if (Dazed_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
DoCast(m_creature->getVictim(),SPELL_DAZED);
|
||||
|
||||
//20 seconds until we should cast this again
|
||||
Dazed_Timer = 20000;
|
||||
}else Dazed_Timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,24 +22,29 @@ SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SPELL_FROSTNOVA 22645
|
||||
#define SPELL_FROSTBOLT 17503
|
||||
#define SPELL_DRAINLIFE 20743
|
||||
#define SPELL_DRAIN_MANA 17243
|
||||
#define SPELL_ICETOMB 16869
|
||||
|
||||
struct TRINITY_DLL_DECL boss_maleki_the_pallidAI : public ScriptedAI
|
||||
{
|
||||
boss_maleki_the_pallidAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_maleki_the_pallidAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 FrostNova_Timer;
|
||||
uint32 Frostbolt_Timer;
|
||||
uint32 IceTomb_Timer;
|
||||
uint32 DrainLife_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
FrostNova_Timer = 11000;
|
||||
Frostbolt_Timer = 1000;
|
||||
IceTomb_Timer = 16000;
|
||||
DrainLife_Timer = 31000;
|
||||
@@ -49,54 +54,39 @@ struct TRINITY_DLL_DECL boss_maleki_the_pallidAI : public ScriptedAI
|
||||
{
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_PALLID,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//FrostNova
|
||||
if (FrostNova_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
DoCast(m_creature->getVictim(),SPELL_FROSTNOVA);
|
||||
//23 seconds until we should cast this again
|
||||
FrostNova_Timer = 23000;
|
||||
}else FrostNova_Timer -= diff;
|
||||
|
||||
//Frostbolt
|
||||
if (Frostbolt_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 90) //90% chance to cast
|
||||
{
|
||||
if (rand()%100 < 90)
|
||||
DoCast(m_creature->getVictim(),SPELL_FROSTBOLT);
|
||||
}
|
||||
//3.5 seconds until we should cast this again
|
||||
Frostbolt_Timer = 3500;
|
||||
}else Frostbolt_Timer -= diff;
|
||||
|
||||
//IceTomb
|
||||
if (IceTomb_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 65) //65% chance to cast
|
||||
{
|
||||
if (rand()%100 < 65)
|
||||
DoCast(m_creature->getVictim(),SPELL_ICETOMB);
|
||||
}
|
||||
//28 seconds until we should cast this again
|
||||
IceTomb_Timer = 28000;
|
||||
}else IceTomb_Timer -= diff;
|
||||
|
||||
//DrainLife
|
||||
if (DrainLife_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 55) //55% chance to cast
|
||||
{
|
||||
if (rand()%100 < 55)
|
||||
DoCast(m_creature->getVictim(),SPELL_DRAINLIFE);
|
||||
}
|
||||
//31 seconds until we should cast this again
|
||||
DrainLife_Timer = 31000;
|
||||
}else DrainLife_Timer -= diff;
|
||||
|
||||
|
||||
@@ -15,26 +15,33 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_nerubenkan
|
||||
SD%Complete: 100
|
||||
SDName: Boss_Nerubenkan
|
||||
SD%Complete: 70
|
||||
SDComment:
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SPELL_ENCASINGWEBS 4962
|
||||
#define SPELL_PIERCEARMOR 6016
|
||||
#define SPELL_VIRULENTPOISON 16427
|
||||
//#define SPELL_RAISEUNDEADSCARAB 17235
|
||||
#define SPELL_CRYPT_SCARABS 31602
|
||||
#define SPELL_RAISEUNDEADSCARAB 17235
|
||||
|
||||
struct TRINITY_DLL_DECL boss_nerubenkanAI : public ScriptedAI
|
||||
{
|
||||
boss_nerubenkanAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_nerubenkanAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 EncasingWebs_Timer;
|
||||
uint32 PierceArmor_Timer;
|
||||
uint32 VirulentPoison_Timer;
|
||||
uint32 CryptScarabs_Timer;
|
||||
uint32 RaiseUndeadScarab_Timer;
|
||||
int Rand;
|
||||
int RandX;
|
||||
@@ -43,16 +50,22 @@ struct TRINITY_DLL_DECL boss_nerubenkanAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
VirulentPoison_Timer = 3000;
|
||||
CryptScarabs_Timer = 3000;
|
||||
EncasingWebs_Timer = 7000;
|
||||
PierceArmor_Timer = 19000;
|
||||
RaiseUndeadScarab_Timer = 11000;
|
||||
RaiseUndeadScarab_Timer = 3000;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_NERUB,IN_PROGRESS);
|
||||
}
|
||||
|
||||
void RaiseUndeadScarab(Unit* victim)
|
||||
{
|
||||
Rand = rand()%10;
|
||||
@@ -76,46 +89,38 @@ struct TRINITY_DLL_DECL boss_nerubenkanAI : public ScriptedAI
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
//EncasingWebs
|
||||
if (EncasingWebs_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
|
||||
DoCast(m_creature->getVictim(),SPELL_ENCASINGWEBS);
|
||||
//30 seconds until we should cast this again
|
||||
|
||||
EncasingWebs_Timer = 30000;
|
||||
}else EncasingWebs_Timer -= diff;
|
||||
|
||||
//PierceArmor
|
||||
if (PierceArmor_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 75) //75% chance to cast
|
||||
{
|
||||
if (rand()%100 < 75)
|
||||
DoCast(m_creature->getVictim(),SPELL_PIERCEARMOR);
|
||||
}
|
||||
//35 seconds until we should cast this again
|
||||
|
||||
PierceArmor_Timer = 35000;
|
||||
}else PierceArmor_Timer -= diff;
|
||||
|
||||
//VirulentPoison
|
||||
if (VirulentPoison_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
DoCast(m_creature->getVictim(),SPELL_VIRULENTPOISON);
|
||||
//20 seconds until we should cast this again
|
||||
VirulentPoison_Timer = 20000;
|
||||
}else VirulentPoison_Timer -= diff;
|
||||
//CryptScarabs_Timer
|
||||
if (CryptScarabs_Timer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_CRYPT_SCARABS);
|
||||
CryptScarabs_Timer = 20000;
|
||||
}else CryptScarabs_Timer -= diff;
|
||||
|
||||
//RaiseUndeadScarab
|
||||
if (RaiseUndeadScarab_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
RaiseUndeadScarab(m_creature->getVictim());
|
||||
//16 seconds until we should cast this again
|
||||
{
|
||||
RaiseUndeadScarab(m_creature->getVictim());
|
||||
RaiseUndeadScarab_Timer = 16000;
|
||||
}else RaiseUndeadScarab_Timer -= diff;
|
||||
|
||||
|
||||
@@ -15,20 +15,29 @@
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: boss_ramstein_the_gorger
|
||||
SD%Complete: 100
|
||||
SDName: Boss_Ramstein_The_Gorger
|
||||
SD%Complete: 70
|
||||
SDComment:
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define SPELL_TRAMPLE 15550
|
||||
#define SPELL_TRAMPLE 5568
|
||||
#define SPELL_KNOCKOUT 17307
|
||||
|
||||
#define C_MINDLESS_UNDEAD 11030
|
||||
|
||||
struct TRINITY_DLL_DECL boss_ramstein_the_gorgerAI : public ScriptedAI
|
||||
{
|
||||
boss_ramstein_the_gorgerAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
boss_ramstein_the_gorgerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (ScriptedInstance*)m_creature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 Trample_Timer;
|
||||
uint32 Knockout_Timer;
|
||||
@@ -43,6 +52,15 @@ struct TRINITY_DLL_DECL boss_ramstein_the_gorgerAI : public ScriptedAI
|
||||
{
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
for(uint8 i = 0; i < 30; i++)
|
||||
m_creature->SummonCreature(C_MINDLESS_UNDEAD,3969.35,-3391.87,119.11,5.91,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(TYPE_RAMSTEIN,DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
@@ -52,24 +70,14 @@ struct TRINITY_DLL_DECL boss_ramstein_the_gorgerAI : public ScriptedAI
|
||||
//Trample
|
||||
if (Trample_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 75) //75% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_TRAMPLE);
|
||||
}
|
||||
//7 seconds until we should cast this again
|
||||
DoCast(m_creature,SPELL_TRAMPLE);
|
||||
Trample_Timer = 7000;
|
||||
}else Trample_Timer -= diff;
|
||||
|
||||
//Knockout
|
||||
if (Knockout_Timer < diff)
|
||||
{
|
||||
//Cast
|
||||
if (rand()%100 < 70) //70% chance to cast
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_KNOCKOUT);
|
||||
}
|
||||
//10 seconds until we should cast this again
|
||||
DoCast(m_creature->getVictim(),SPELL_KNOCKOUT);
|
||||
Knockout_Timer = 10000;
|
||||
}else Knockout_Timer -= diff;
|
||||
|
||||
|
||||
@@ -5,10 +5,23 @@
|
||||
#ifndef DEF_STRATHOLME_H
|
||||
#define DEF_STRATHOLME_H
|
||||
|
||||
#define TYPE_SH_AELMAR 1
|
||||
#define TYPE_SH_CATHELA 2
|
||||
#define TYPE_SH_GREGOR 3
|
||||
#define TYPE_SH_NEMAS 4
|
||||
#define TYPE_SH_VICAR 5
|
||||
#define TYPE_SH_QUEST 6
|
||||
#define TYPE_BARON_RUN 1
|
||||
#define TYPE_BARONESS 2
|
||||
#define TYPE_NERUB 3
|
||||
#define TYPE_PALLID 4
|
||||
#define TYPE_RAMSTEIN 5
|
||||
#define TYPE_BARON 6
|
||||
|
||||
#define DATA_BARON 10
|
||||
#define DATA_YSIDA_TRIGGER 11
|
||||
|
||||
#define TYPE_SH_QUEST 20
|
||||
#define TYPE_SH_CATHELA 21
|
||||
#define TYPE_SH_GREGOR 22
|
||||
#define TYPE_SH_NEMAS 23
|
||||
#define TYPE_SH_VICAR 24
|
||||
#define TYPE_SH_AELMAR 25
|
||||
|
||||
#define QUEST_DEAD_MAN_PLEA 8945
|
||||
#define SPELL_BARON_ULTIMATUM 27861
|
||||
#endif
|
||||
|
||||
@@ -16,49 +16,367 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: instance_stratholme
|
||||
SD%Complete: 100
|
||||
SDComment:
|
||||
SD%Complete: 50
|
||||
SDComment: In progress. Undead side 75% implemented. Save/load not implemented.
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
#define GO_SERVICE_ENTRANCE 175368
|
||||
#define GO_GAUNTLET_GATE1 175357
|
||||
#define GO_ZIGGURAT1 175380 //baroness
|
||||
#define GO_ZIGGURAT2 175379 //nerub'enkan
|
||||
#define GO_ZIGGURAT3 175381 //maleki
|
||||
#define GO_ZIGGURAT4 175405 //rammstein
|
||||
#define GO_ZIGGURAT5 175796 //baron
|
||||
#define GO_PORT_GAUNTLET 175374 //port from gauntlet to slaugther
|
||||
#define GO_PORT_SLAUGTHER 175373 //port at slaugther
|
||||
#define GO_PORT_ELDERS 175377 //port at elders square
|
||||
|
||||
#define C_CRYSTAL 10415 //three ziggurat crystals
|
||||
#define C_BARON 10440
|
||||
#define C_YSIDA_TRIGGER 16100
|
||||
|
||||
#define C_RAMSTEIN 10439
|
||||
#define C_ABOM_BILE 10416
|
||||
#define C_ABOM_VENOM 10417
|
||||
#define C_BLACK_GUARD 10394
|
||||
#define C_YSIDA 16031
|
||||
|
||||
#define ENCOUNTERS 6
|
||||
|
||||
struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance
|
||||
{
|
||||
instance_stratholme(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_stratholme(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
bool IsSilverHandDead[5];
|
||||
uint32 Encounter[ENCOUNTERS];
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
bool IsSilverHandDead[5];
|
||||
|
||||
uint32 BaronRun_Timer;
|
||||
uint32 SlaugtherSquare_Timer;
|
||||
|
||||
uint64 serviceEntranceGUID;
|
||||
uint64 gauntletGate1GUID;
|
||||
uint64 ziggurat1GUID;
|
||||
uint64 ziggurat2GUID;
|
||||
uint64 ziggurat3GUID;
|
||||
uint64 ziggurat4GUID;
|
||||
uint64 ziggurat5GUID;
|
||||
uint64 portGauntletGUID;
|
||||
uint64 portSlaugtherGUID;
|
||||
uint64 portElderGUID;
|
||||
|
||||
uint64 baronGUID;
|
||||
uint64 ysidaTriggerGUID;
|
||||
std::set<uint64> crystalsGUID;
|
||||
std::set<uint64> abomnationGUID;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
for(uint8 i = 0; i < ENCOUNTERS; i++)
|
||||
Encounter[i] = NOT_STARTED;
|
||||
|
||||
for(uint8 i = 0; i < 5; i++)
|
||||
IsSilverHandDead[5] = false;
|
||||
|
||||
BaronRun_Timer = 0;
|
||||
SlaugtherSquare_Timer = 0;
|
||||
|
||||
serviceEntranceGUID = 0;
|
||||
gauntletGate1GUID = 0;
|
||||
ziggurat1GUID = 0;
|
||||
ziggurat2GUID = 0;
|
||||
ziggurat3GUID = 0;
|
||||
ziggurat4GUID = 0;
|
||||
ziggurat5GUID = 0;
|
||||
portGauntletGUID = 0;
|
||||
portSlaugtherGUID = 0;
|
||||
portElderGUID = 0;
|
||||
|
||||
baronGUID = 0;
|
||||
ysidaTriggerGUID = 0;
|
||||
crystalsGUID.clear();
|
||||
abomnationGUID.clear();
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("SD2: Instance Stratholme: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool StartSlaugtherSquare()
|
||||
{
|
||||
//change to DONE when crystals implemented
|
||||
if (Encounter[1] == IN_PROGRESS && Encounter[2] == IN_PROGRESS && Encounter[3] == IN_PROGRESS)
|
||||
{
|
||||
UpdateGoState(portGauntletGUID,0,false);
|
||||
UpdateGoState(portSlaugtherGUID,0,false);
|
||||
return true;
|
||||
}
|
||||
|
||||
debug_log("SD2: Instance Stratholme: Cannot open slaugther square yet.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//if withRestoreTime true, then newState will be ignored and GO should be restored to original state after 10 seconds
|
||||
void UpdateGoState(uint64 goGuid, uint32 newState, bool withRestoreTime)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player || !goGuid)
|
||||
return;
|
||||
|
||||
if (GameObject *go = GameObject::GetGameObject(*player, goGuid))
|
||||
{
|
||||
if (withRestoreTime)
|
||||
go->UseDoorOrButton(10);
|
||||
else
|
||||
go->SetGoState(newState);
|
||||
}
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 creature_entry)
|
||||
{
|
||||
switch(creature->GetEntry())
|
||||
{
|
||||
case C_BARON: baronGUID = creature->GetGUID(); break;
|
||||
case C_YSIDA_TRIGGER: ysidaTriggerGUID = creature->GetGUID(); break;
|
||||
case C_CRYSTAL: crystalsGUID.insert(creature->GetGUID()); break;
|
||||
case C_ABOM_BILE:
|
||||
case C_ABOM_VENOM: abomnationGUID.insert(creature->GetGUID()); break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnObjectCreate(GameObject *go)
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case GO_SERVICE_ENTRANCE: serviceEntranceGUID = go->GetGUID(); break;
|
||||
case GO_GAUNTLET_GATE1:
|
||||
//weird, but unless flag is set, client will not respond as expected. DB bug?
|
||||
go->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_LOCKED);
|
||||
gauntletGate1GUID = go->GetGUID();
|
||||
break;
|
||||
case GO_ZIGGURAT1: ziggurat1GUID = go->GetGUID(); break;
|
||||
case GO_ZIGGURAT2: ziggurat2GUID = go->GetGUID(); break;
|
||||
case GO_ZIGGURAT3: ziggurat3GUID = go->GetGUID(); break;
|
||||
case GO_ZIGGURAT4: ziggurat4GUID = go->GetGUID(); break;
|
||||
case GO_ZIGGURAT5: ziggurat5GUID = go->GetGUID(); break;
|
||||
case GO_PORT_GAUNTLET: portGauntletGUID = go->GetGUID(); break;
|
||||
case GO_PORT_SLAUGTHER: portSlaugtherGUID = go->GetGUID(); break;
|
||||
case GO_PORT_ELDERS: portElderGUID = go->GetGUID(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("SD2: Instance Stratholme: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_SH_AELMAR:
|
||||
IsSilverHandDead[0] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_CATHELA:
|
||||
IsSilverHandDead[1] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_GREGOR:
|
||||
IsSilverHandDead[2] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_NEMAS:
|
||||
IsSilverHandDead[3] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_VICAR:
|
||||
IsSilverHandDead[4] = (data) ? true : false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case TYPE_BARON_RUN:
|
||||
switch(data)
|
||||
{
|
||||
case IN_PROGRESS:
|
||||
if (Encounter[0] == IN_PROGRESS || Encounter[0] == FAIL)
|
||||
break;
|
||||
BaronRun_Timer = 2700000;
|
||||
debug_log("SD2: Instance Stratholme: Baron run in progress.");
|
||||
break;
|
||||
case FAIL:
|
||||
//may add code to remove aura from players, but in theory the time should be up already and removed.
|
||||
break;
|
||||
case DONE:
|
||||
if (Unit *t = Unit::GetUnit(*player, ysidaTriggerGUID))
|
||||
t->SummonCreature(C_YSIDA,t->GetPositionX(),t->GetPositionY(),t->GetPositionZ(),t->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,1800000);
|
||||
BaronRun_Timer = 0;
|
||||
break;
|
||||
}
|
||||
Encounter[0] = data;
|
||||
break;
|
||||
case TYPE_BARONESS:
|
||||
Encounter[1] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
UpdateGoState(ziggurat1GUID,0,false);
|
||||
if (data == IN_PROGRESS) //change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
break;
|
||||
case TYPE_NERUB:
|
||||
Encounter[2] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
UpdateGoState(ziggurat2GUID,0,false);
|
||||
if (data == IN_PROGRESS) //change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
break;
|
||||
case TYPE_PALLID:
|
||||
Encounter[3] = data;
|
||||
if (data == IN_PROGRESS)
|
||||
UpdateGoState(ziggurat3GUID,0,false);
|
||||
if (data == IN_PROGRESS) //change to DONE when crystals implemented
|
||||
StartSlaugtherSquare();
|
||||
break;
|
||||
case TYPE_RAMSTEIN:
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
if (Encounter[4] != IN_PROGRESS)
|
||||
UpdateGoState(portGauntletGUID,1,false);
|
||||
|
||||
uint32 count = abomnationGUID.size();
|
||||
for(std::set<uint64>::iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i)
|
||||
{
|
||||
if (Unit* abom = Unit::GetUnit(*player, *i))
|
||||
{
|
||||
if (!abom->isAlive())
|
||||
--count;
|
||||
}
|
||||
}
|
||||
|
||||
if (!count)
|
||||
{
|
||||
//a bit itchy, it should close the door after 10 secs, but it doesn't. skipping it for now.
|
||||
//UpdateGoState(ziggurat4GUID,0,true);
|
||||
player->SummonCreature(C_RAMSTEIN,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
|
||||
debug_log("SD2: Instance Stratholme: Ramstein spawned.");
|
||||
} else debug_log("SD2: Instance Stratholme: %u Abomnation left to kill.",count);
|
||||
}
|
||||
if (data == DONE)
|
||||
{
|
||||
SlaugtherSquare_Timer = 300000;
|
||||
debug_log("SD2: Instance Stratholme: Slaugther event will continue in 5 minutes.");
|
||||
}
|
||||
Encounter[4] = data;
|
||||
break;
|
||||
case TYPE_BARON:
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
|
||||
{
|
||||
if (Group *pGroup = player->GetGroup())
|
||||
{
|
||||
for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* pGroupie = itr->getSource();
|
||||
if (!pGroupie)
|
||||
continue;
|
||||
|
||||
if (pGroupie->HasAura(SPELL_BARON_ULTIMATUM,0))
|
||||
pGroupie->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM);
|
||||
}
|
||||
} else if (player->HasAura(SPELL_BARON_ULTIMATUM,0))
|
||||
player->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM);
|
||||
|
||||
if (Unit *temp = Unit::GetUnit(*player,GetData64(DATA_BARON)))
|
||||
player->GroupEventHappens(QUEST_DEAD_MAN_PLEA,temp);
|
||||
|
||||
SetData(TYPE_BARON_RUN,DONE);
|
||||
}
|
||||
}
|
||||
Encounter[5] = data;
|
||||
break;
|
||||
case TYPE_SH_AELMAR:
|
||||
IsSilverHandDead[0] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_CATHELA:
|
||||
IsSilverHandDead[1] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_GREGOR:
|
||||
IsSilverHandDead[2] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_NEMAS:
|
||||
IsSilverHandDead[3] = (data) ? true : false;
|
||||
break;
|
||||
case TYPE_SH_VICAR:
|
||||
IsSilverHandDead[4] = (data) ? true : false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type)
|
||||
{
|
||||
if(type == TYPE_SH_QUEST)
|
||||
if(IsSilverHandDead[0] && IsSilverHandDead[1] && IsSilverHandDead[2] && IsSilverHandDead[3] && IsSilverHandDead[4])
|
||||
return true;
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_SH_QUEST:
|
||||
if(IsSilverHandDead[0] && IsSilverHandDead[1] && IsSilverHandDead[2] && IsSilverHandDead[3] && IsSilverHandDead[4])
|
||||
return 1;
|
||||
return 0;
|
||||
case TYPE_BARON_RUN:
|
||||
return Encounter[0];
|
||||
case TYPE_BARONESS:
|
||||
return Encounter[1];
|
||||
case TYPE_NERUB:
|
||||
return Encounter[2];
|
||||
case TYPE_PALLID:
|
||||
return Encounter[3];
|
||||
case TYPE_RAMSTEIN:
|
||||
return Encounter[4];
|
||||
case TYPE_BARON:
|
||||
return Encounter[5];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 data)
|
||||
{
|
||||
switch(data)
|
||||
{
|
||||
case DATA_BARON:
|
||||
return baronGUID;
|
||||
case DATA_YSIDA_TRIGGER:
|
||||
return ysidaTriggerGUID;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Update(uint32 diff)
|
||||
{
|
||||
if (BaronRun_Timer)
|
||||
{
|
||||
if (BaronRun_Timer <= diff)
|
||||
{
|
||||
if (GetData(TYPE_BARON_RUN) != DONE)
|
||||
SetData(TYPE_BARON_RUN, FAIL);
|
||||
BaronRun_Timer = 0;
|
||||
debug_log("SD2: Instance Stratholme: Baron run event reached end. Event has state %u.",GetData(TYPE_BARON_RUN));
|
||||
}else BaronRun_Timer -= diff;
|
||||
}
|
||||
|
||||
return false;
|
||||
if (SlaugtherSquare_Timer)
|
||||
{
|
||||
if (SlaugtherSquare_Timer <= diff)
|
||||
{
|
||||
if (Player *p = GetPlayerInMap())
|
||||
{
|
||||
for(uint8 i = 0; i < 4; i++)
|
||||
p->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
|
||||
|
||||
UpdateGoState(ziggurat4GUID,0,false);
|
||||
UpdateGoState(ziggurat5GUID,0,false);
|
||||
debug_log("SD2: Instance Stratholme: Black guard sentries spawned. Opening gates to baron.");
|
||||
}
|
||||
SlaugtherSquare_Timer = 0;
|
||||
}else SlaugtherSquare_Timer -= diff;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1,28 +1,71 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Stratholme
|
||||
SD%Complete: 100
|
||||
SDComment: trash mobs for strat. Simple AI mobs converted to EAI (except Mindless Skeleton and Thuzadin Acolyte)
|
||||
SDComment: Misc mobs for instance. GO-script to apply aura and start event for quest 8945
|
||||
SDCategory: Stratholme
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
go_gauntlet_gate
|
||||
mob_freed_soul
|
||||
mob_restless_soul
|
||||
mobs_spectral_ghostly_citizen
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../creature/simple_ai.h"
|
||||
#include "def_stratholme.h"
|
||||
|
||||
/*######
|
||||
## go_gauntlet_gate (this is the _first_ of the gauntlet gates, two exist)
|
||||
######*/
|
||||
|
||||
bool GOHello_go_gauntlet_gate(Player *player, GameObject* _GO)
|
||||
{
|
||||
ScriptedInstance* pInstance = (ScriptedInstance*)_GO->GetInstanceData();
|
||||
|
||||
if (!pInstance)
|
||||
return false;
|
||||
|
||||
if (pInstance->GetData(TYPE_BARON_RUN) != NOT_STARTED)
|
||||
return false;
|
||||
|
||||
if (Group *pGroup = player->GetGroup())
|
||||
{
|
||||
for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* pGroupie = itr->getSource();
|
||||
if (!pGroupie)
|
||||
continue;
|
||||
|
||||
if (pGroupie->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE &&
|
||||
!pGroupie->HasAura(SPELL_BARON_ULTIMATUM,0) &&
|
||||
pGroupie->GetMap() == _GO->GetMap())
|
||||
pGroupie->CastSpell(pGroupie,SPELL_BARON_ULTIMATUM,true);
|
||||
}
|
||||
} else if (player->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE &&
|
||||
!player->HasAura(SPELL_BARON_ULTIMATUM,0) &&
|
||||
player->GetMap() == _GO->GetMap())
|
||||
player->CastSpell(player,SPELL_BARON_ULTIMATUM,true);
|
||||
|
||||
pInstance->SetData(TYPE_BARON_RUN,IN_PROGRESS);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*######
|
||||
## mob_freed_soul
|
||||
@@ -40,116 +83,86 @@ struct TRINITY_DLL_DECL mob_freed_soulAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
|
||||
switch (rand()%4)
|
||||
{
|
||||
case 0:
|
||||
DoSay(SAY_ZAPPED0,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 1:
|
||||
DoSay(SAY_ZAPPED1,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 2:
|
||||
DoSay(SAY_ZAPPED2,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 3:
|
||||
DoSay(SAY_ZAPPED3,LANG_UNIVERSAL,NULL);
|
||||
break;
|
||||
case 0: DoSay(SAY_ZAPPED0,LANG_UNIVERSAL,NULL); break;
|
||||
case 1: DoSay(SAY_ZAPPED1,LANG_UNIVERSAL,NULL); break;
|
||||
case 2: DoSay(SAY_ZAPPED2,LANG_UNIVERSAL,NULL); break;
|
||||
case 3: DoSay(SAY_ZAPPED3,LANG_UNIVERSAL,NULL); break;
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
}
|
||||
void Aggro(Unit* who) { }
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_freed_soul(Creature *_Creature)
|
||||
{
|
||||
return new mob_freed_soulAI (_Creature);
|
||||
}
|
||||
|
||||
/*######
|
||||
## mob_restless_soul
|
||||
######*/
|
||||
|
||||
#define SPELL_EGAN_BLASTER 17368
|
||||
#define SPELL_SOUL_FREED 17370
|
||||
#define QUEST_RESTLESS_SOUL 5282
|
||||
#define ENTRY_RESTLESS 11122
|
||||
#define ENTRY_FREED 11136
|
||||
|
||||
struct TRINITY_DLL_DECL mob_restless_soulAI : public ScriptedAI
|
||||
{
|
||||
mob_restless_soulAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
Unit* PlayerHolder;
|
||||
uint64 Tagger;
|
||||
uint32 Die_Timer;
|
||||
bool OkToDie;
|
||||
bool Tagged;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Die_Timer = 10000;
|
||||
OkToDie = false;
|
||||
|
||||
PlayerHolder = NULL;
|
||||
Tagger = 0;
|
||||
Die_Timer = 5000;
|
||||
Tagged = false;
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
}
|
||||
|
||||
void SummonFreedSoul(Unit* victim)
|
||||
{
|
||||
int Rand;
|
||||
int RandX;
|
||||
int RandY;
|
||||
|
||||
Rand = rand()%1;
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0: RandX = 0 - Rand; break;
|
||||
case 1: RandX = 0 + Rand; break;
|
||||
}
|
||||
Rand = 0;
|
||||
Rand = rand()%1;
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0: RandY = 0 - Rand; break;
|
||||
case 1: RandY = 0 + Rand; break;
|
||||
}
|
||||
Rand = 0;
|
||||
DoSpawnCreature(11136, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 300000);
|
||||
}
|
||||
void Aggro(Unit* who) { }
|
||||
|
||||
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||
{
|
||||
if (caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if(!PlayerHolder && !OkToDie && spell->Id == 17368 && ((Player*)caster)->GetQuestStatus(5282) == QUEST_STATUS_INCOMPLETE)
|
||||
if (!Tagged && spell->Id == SPELL_EGAN_BLASTER && ((Player*)caster)->GetQuestStatus(QUEST_RESTLESS_SOUL) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
PlayerHolder = caster;
|
||||
OkToDie = true;
|
||||
Die_Timer = 5000;
|
||||
Tagged = true;
|
||||
Tagger = caster->GetGUID();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void JustSummoned(Creature *summoned)
|
||||
{
|
||||
summoned->CastSpell(summoned,SPELL_SOUL_FREED,false);
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (Killer->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
//check quest status
|
||||
if(PlayerHolder == ((Player*)Killer) && ((Player*)Killer)->GetQuestStatus(5282) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
SummonFreedSoul(m_creature->getVictim());
|
||||
}
|
||||
}
|
||||
if (Tagged)
|
||||
DoSpawnCreature(ENTRY_FREED, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 300000);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (PlayerHolder && OkToDie && Die_Timer < diff)
|
||||
if (Tagged)
|
||||
{
|
||||
PlayerHolder->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
if (Die_Timer < diff)
|
||||
{
|
||||
if (Unit* temp = Unit::GetUnit(*m_creature,Tagger))
|
||||
temp->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}else Die_Timer -= diff;
|
||||
}
|
||||
else Die_Timer -= diff;
|
||||
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_restless_soul(Creature *_Creature)
|
||||
{
|
||||
return new mob_restless_soulAI (_Creature);
|
||||
@@ -159,177 +172,117 @@ CreatureAI* GetAI_mob_restless_soul(Creature *_Creature)
|
||||
## mobs_spectral_ghostly_citizen
|
||||
######*/
|
||||
|
||||
#define SPELL_HAUNTING_PHANTOM 16336
|
||||
|
||||
struct TRINITY_DLL_DECL mobs_spectral_ghostly_citizenAI : public ScriptedAI
|
||||
{
|
||||
mobs_spectral_ghostly_citizenAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
Unit* PlayerHolder;
|
||||
uint32 Die_Timer;
|
||||
bool OkToDie;
|
||||
bool Tagged;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Die_Timer = 5000;
|
||||
OkToDie = false;
|
||||
PlayerHolder = NULL;
|
||||
Tagged = false;
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
}
|
||||
|
||||
void SummonRestlessSoul(Unit* victim)
|
||||
{
|
||||
int Rand;
|
||||
int RandX;
|
||||
int RandY;
|
||||
|
||||
Rand = rand()%7;
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0: RandX = 0 - Rand; break;
|
||||
case 1: RandX = 0 + Rand; break;
|
||||
}
|
||||
Rand = 0;
|
||||
Rand = rand()%7;
|
||||
switch (rand()%2)
|
||||
{
|
||||
case 0: RandY = 0 - Rand; break;
|
||||
case 1: RandY = 0 + Rand; break;
|
||||
}
|
||||
Rand = 0;
|
||||
DoSpawnCreature(11122, RandX, RandY, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 600000);
|
||||
}
|
||||
void Aggro(Unit* who) { }
|
||||
|
||||
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||
{
|
||||
if (caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if(!PlayerHolder && !OkToDie && spell->Id == 17368 && ((Player*)caster)->GetQuestStatus(5282) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
PlayerHolder = caster;
|
||||
OkToDie = true;
|
||||
Die_Timer = 5000;
|
||||
}
|
||||
}
|
||||
return;
|
||||
if (!Tagged && spell->Id == SPELL_EGAN_BLASTER)
|
||||
Tagged = true;
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
if (Killer->GetTypeId() == TYPEID_PLAYER)
|
||||
if (Tagged)
|
||||
{
|
||||
//check quest status
|
||||
if(PlayerHolder == ((Player*)Killer) && ((Player*)Killer)->GetQuestStatus(5282) == QUEST_STATUS_INCOMPLETE)
|
||||
for(uint8 i = 0; i < 4; i++)
|
||||
{
|
||||
SummonRestlessSoul(m_creature->getVictim()); //always one
|
||||
if (rand()%100 < 90) SummonRestlessSoul(m_creature->getVictim()); //90% a second
|
||||
if (rand()%100 < 50) SummonRestlessSoul(m_creature->getVictim()); //50% a third
|
||||
if (rand()%100 < 30) SummonRestlessSoul(m_creature->getVictim()); //30% a fourth
|
||||
float x,y,z;
|
||||
m_creature->GetRandomPoint(m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),25.0f,x,y,z);
|
||||
|
||||
int j = rand()%i;
|
||||
if (!j)
|
||||
m_creature->SummonCreature(ENTRY_RESTLESS,x,y,z,0,TEMPSUMMON_CORPSE_DESPAWN,600000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (PlayerHolder && OkToDie && Die_Timer < diff)
|
||||
if (Tagged)
|
||||
{
|
||||
PlayerHolder->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
if (Die_Timer < diff)
|
||||
{
|
||||
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}else Die_Timer -= diff;
|
||||
}
|
||||
else Die_Timer -= diff;
|
||||
|
||||
//Return since we have no target
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mobs_spectral_ghostly_citizen(Creature *_Creature)
|
||||
{
|
||||
return new mobs_spectral_ghostly_citizenAI (_Creature);
|
||||
}
|
||||
|
||||
bool ReciveEmote_mobs_spectral_ghostly_citizen(Player *player, Creature *_Creature, uint32 emote)
|
||||
{
|
||||
_Creature->HandleEmoteCommand(emote);
|
||||
|
||||
if (emote == TEXTEMOTE_DANCE)
|
||||
((mobs_spectral_ghostly_citizenAI*)_Creature->AI())->EnterEvadeMode();
|
||||
switch(emote)
|
||||
{
|
||||
case TEXTEMOTE_DANCE:
|
||||
((mobs_spectral_ghostly_citizenAI*)_Creature->AI())->EnterEvadeMode();
|
||||
break;
|
||||
case TEXTEMOTE_RUDE:
|
||||
//Should instead cast spell, kicking player back. Spell not found.
|
||||
if (_Creature->IsWithinDistInMap(player, 5))
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_RUDE);
|
||||
else
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_RUDE);
|
||||
break;
|
||||
case TEXTEMOTE_WAVE:
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_WAVE);
|
||||
break;
|
||||
case TEXTEMOTE_BOW:
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_BOW);
|
||||
break;
|
||||
case TEXTEMOTE_KISS:
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_FLEX);
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## mob_mindless_skeleton
|
||||
######*/
|
||||
|
||||
CreatureAI* GetAI_mob_mindless_skeleton(Creature *_Creature)
|
||||
{
|
||||
SimpleAI* ai = new SimpleAI (_Creature);
|
||||
|
||||
//dazed
|
||||
ai->Spell[0].Enabled = true;
|
||||
ai->Spell[0].Spell_Id = 13496;
|
||||
ai->Spell[0].Cooldown = 15000;
|
||||
ai->Spell[0].First_Cast = 3000;
|
||||
ai->Spell[0].Cast_Target_Type = CAST_HOSTILE_TARGET;
|
||||
|
||||
ai->EnterEvadeMode();
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
||||
/*######
|
||||
## mob_thuzadin_acolyte
|
||||
######*/
|
||||
|
||||
CreatureAI* GetAI_mob_thuzadin_acolyte(Creature *_Creature)
|
||||
{
|
||||
SimpleAI* ai = new SimpleAI (_Creature);
|
||||
|
||||
//dazed
|
||||
ai->Spell[0].Enabled = true;
|
||||
ai->Spell[0].Spell_Id = 13496;
|
||||
ai->Spell[0].Cooldown = 15000;
|
||||
ai->Spell[0].First_Cast = 1000;
|
||||
ai->Spell[0].Cast_Target_Type = CAST_HOSTILE_TARGET;
|
||||
|
||||
ai->EnterEvadeMode();
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
||||
/*######
|
||||
##
|
||||
######*/
|
||||
|
||||
void AddSC_stratholme()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_freed_soul";
|
||||
newscript->GetAI = GetAI_mob_freed_soul;
|
||||
newscript->Name = "go_gauntlet_gate";
|
||||
newscript->pGOHello = &GOHello_go_gauntlet_gate;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_restless_soul";
|
||||
newscript->GetAI = GetAI_mob_restless_soul;
|
||||
newscript->Name = "mob_freed_soul";
|
||||
newscript->GetAI = &GetAI_mob_freed_soul;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mobs_spectral_ghostly_citizen";
|
||||
newscript->GetAI = GetAI_mobs_spectral_ghostly_citizen;
|
||||
newscript->Name = "mob_restless_soul";
|
||||
newscript->GetAI = &GetAI_mob_restless_soul;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mobs_spectral_ghostly_citizen";
|
||||
newscript->GetAI = &GetAI_mobs_spectral_ghostly_citizen;
|
||||
newscript->pReceiveEmote = &ReciveEmote_mobs_spectral_ghostly_citizen;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_mindless_skeleton";
|
||||
newscript->GetAI = GetAI_mob_mindless_skeleton;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_thuzadin_acolyte";
|
||||
newscript->GetAI = GetAI_mob_thuzadin_acolyte;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright ?2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -16,54 +16,50 @@
|
||||
|
||||
/* ScriptData
|
||||
SDName: Boss_Brutallus
|
||||
SD%Complete: 90
|
||||
SDComment: Burn gets casted on himself and intro is missing.
|
||||
SD%Complete: 50
|
||||
SDComment: Intro not made. Script for Madrigosa to be added here.
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_sunwell_plateau.h"
|
||||
|
||||
// Yells and Sounds used by boss.
|
||||
#define YELL_AGGRO "Ahh! More lambs to the slaughter!"
|
||||
#define SOUND_AGGRO 12463
|
||||
#define YELL_INTRO -1580017
|
||||
#define YELL_INTRO_BREAK_ICE -1580018
|
||||
#define YELL_INTRO_CHARGE -1580019
|
||||
#define YELL_INTRO_KILL_MADRIGOSA -1580020
|
||||
#define YELL_INTRO_TAUNT -1580021
|
||||
|
||||
#define YELL_BERSERK "So much for a real challenge... Die!"
|
||||
#define SOUND_BERSERK 12470
|
||||
|
||||
#define YELL_KILL1 "Perish, insect!"
|
||||
#define SOUND_KILL1 12464
|
||||
|
||||
#define YELL_KILL2 "You are meat!"
|
||||
#define SOUND_KILL2 12465
|
||||
|
||||
#define YELL_KILL3 "Too easy!"
|
||||
#define SOUND_KILL3 12466
|
||||
|
||||
#define YELL_CHARGE "I will crush you!"
|
||||
#define SOUND_CHARGE 12460
|
||||
|
||||
#define YELL_DEATH "Gah! Well done... Now... this gets... interesting..."
|
||||
#define SOUND_DEATH 12471
|
||||
|
||||
#define YELL_LOVE1 "Bring the fight to me!"
|
||||
#define SOUND_LOVE1 12467
|
||||
|
||||
#define YELL_LOVE2 "Another day, another glorious battle!"
|
||||
#define SOUND_LOVE2 12468
|
||||
|
||||
#define YELL_LOVE3 "I live for this!"
|
||||
#define SOUND_LOVE3 12469
|
||||
|
||||
// Boss spells.
|
||||
#define SPELL_METEOR_SLASH 45150
|
||||
#define SPELL_BURN 46394
|
||||
#define SPELL_STOMP 45185
|
||||
#define SPELL_BERSERK 26662
|
||||
#define YELL_MADR_ICE_BARRIER -1580031
|
||||
#define YELL_MADR_INTRO -1580032
|
||||
#define YELL_MADR_ICE_BLOCK -1580033
|
||||
#define YELL_MADR_TRAP -1580034
|
||||
#define YELL_MADR_DEATH -1580035
|
||||
|
||||
#define YELL_AGGRO -1580022
|
||||
#define YELL_KILL1 -1580023
|
||||
#define YELL_KILL2 -1580024
|
||||
#define YELL_KILL3 -1580025
|
||||
#define YELL_LOVE1 -1580026
|
||||
#define YELL_LOVE2 -1580027
|
||||
#define YELL_LOVE3 -1580028
|
||||
#define YELL_BERSERK -1580029
|
||||
#define YELL_DEATH -1580030
|
||||
|
||||
#define SPELL_METEOR_SLASH 45150
|
||||
#define SPELL_BURN 45141
|
||||
#define SPELL_STOMP 45185
|
||||
#define SPELL_BERSERK 26662
|
||||
#define SPELL_DUAL_WIELD 42459
|
||||
|
||||
struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
|
||||
{
|
||||
boss_brutallusAI(Creature *c) : ScriptedAI(c) { Reset(); }
|
||||
boss_brutallusAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 SlashTimer;
|
||||
uint32 BurnTimer;
|
||||
@@ -81,33 +77,22 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(YELL_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_AGGRO);
|
||||
DoScriptText(YELL_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(YELL_KILL1,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(YELL_KILL2,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(YELL_KILL3,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_KILL3);
|
||||
break;
|
||||
case 0: DoScriptText(YELL_KILL1, m_creature); break;
|
||||
case 1: DoScriptText(YELL_KILL2, m_creature); break;
|
||||
case 2: DoScriptText(YELL_KILL3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
DoYell(YELL_DEATH,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_DEATH);
|
||||
DoScriptText(YELL_DEATH, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -117,7 +102,7 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
|
||||
|
||||
if(SlashTimer < diff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(),SPELL_METEOR_SLASH);
|
||||
DoCast(m_creature->getVictim(),SPELL_METEOR_SLASH);
|
||||
SlashTimer = 11000;
|
||||
}else SlashTimer -= diff;
|
||||
|
||||
@@ -125,18 +110,9 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0:
|
||||
DoYell(YELL_LOVE1,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_LOVE1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(YELL_LOVE2,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_LOVE2);
|
||||
break;
|
||||
case 2:
|
||||
DoYell(YELL_LOVE3,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_LOVE3);
|
||||
break;
|
||||
case 0: DoScriptText(YELL_LOVE1, m_creature); break;
|
||||
case 1: DoScriptText(YELL_LOVE2, m_creature); break;
|
||||
case 2: DoScriptText(YELL_LOVE3, m_creature); break;
|
||||
}
|
||||
|
||||
Unit *Target = m_creature->getVictim();
|
||||
@@ -153,16 +129,15 @@ struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI
|
||||
}
|
||||
else BurnTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
if(BerserkTimer < diff)
|
||||
{
|
||||
DoYell(YELL_BERSERK,LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_BERSERK);
|
||||
DoScriptText(YELL_BERSERK, m_creature);
|
||||
DoCast(m_creature,SPELL_BERSERK);
|
||||
BerserkTimer = 20000;
|
||||
}
|
||||
else BerserkTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright ?2006,2007 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
@@ -23,42 +23,26 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_sunwell_plateau.h"
|
||||
|
||||
#define KALECGOS_SAY_AGGRO "No longer will I be a slave to Malygos! Challenge me and you will be destroyed!"
|
||||
#define KALECGOS_SOUND_AGGRO 12422
|
||||
#define KALECGOS_SAY_SPELL_1 "I will purge you!"
|
||||
#define KALECGOS_SOUND_SPELL_1 12423
|
||||
#define KALECGOS_SAY_SPELL_2 "Your pain has only begun!"
|
||||
#define KALECGOS_SOUND_SPELL_2 12424
|
||||
#define KALECGOS_SAY_KILL_1 "In the name of Kil'jaeden!"
|
||||
#define KALECGOS_SOUND_KILL_1 12425
|
||||
#define KALECGOS_SAY_KILL_2 "You were warned!"
|
||||
#define KALECGOS_SOUND_KILL_2 12426
|
||||
#define KALECGOS_SAY_FLY_AWAY "My awakening is complete! You shall all perish!"
|
||||
#define KALECGOS_SOUND_FLY_AWAY 12427
|
||||
#define KALECGOS_SAY_WIN "I am forever in your debt. Once we have triumphed over Kil'jaeden, this entire world will be in your debt as well."
|
||||
#define KALECGOS_SOUND_WIN 12431
|
||||
//kalecgos dragon form
|
||||
#define SAY_EVIL_AGGRO -1580000
|
||||
#define SAY_EVIL_SPELL1 -1580001
|
||||
#define SAY_EVIL_SPELL2 -1580002
|
||||
#define SAY_EVIL_SLAY1 -1580003
|
||||
#define SAY_EVIL_SLAY2 -1580004
|
||||
#define SAY_EVIL_ENRAGE -1580005
|
||||
//kalecgos humanoid form
|
||||
#define SAY_GOOD_AGGRO -1580006
|
||||
#define SAY_GOOD_NEAR_DEATH -1580007
|
||||
#define SAY_GOOD_NEAR_DEATH2 -1580008
|
||||
#define SAY_GOOD_PLRWIN -1580009
|
||||
|
||||
#define SATH_SAY_AGGRO "Gyahaha... There will be no reprieve. My work here is nearly finished."
|
||||
#define SATH_SOUND_AGGRO 12451
|
||||
#define SATH_SAY_DIE "I'm... never on... the losing... side..."
|
||||
#define SATH_SOUND_DIE 12452
|
||||
#define SATH_SAY_SPELL_1 "Your misery is my delight!"
|
||||
#define SATH_SOUND_SPELL_1 12453
|
||||
#define SATH_SAY_SPELL_2 "I will watch you bleed!"
|
||||
#define SATH_SOUND_SPELL_2 12454
|
||||
#define SATH_SAY_KILL_1 "Pitious mortal!"
|
||||
#define SATH_SOUND_KILL_1 12455
|
||||
#define SATH_SAY_KILL_2 "Haven't you heard? I always win!"
|
||||
#define SATH_SOUND_KILL_2 12456
|
||||
#define SATH_SAY_ENRAGE "I have toyed with you long enough!"
|
||||
#define SATH_SOUND_ENRAGE 12457
|
||||
|
||||
#define KALEC_SAY_AGGRO "I need... your help... Cannot... resist him... much longer..."
|
||||
#define KALEC_SOUND_AGGRO 12428
|
||||
#define KALEC_SAY_LOSING1 "Aaahhh! Help me, before I lose my mind!"
|
||||
#define KALEC_SOUND_LOSING1 12429
|
||||
#define KALEC_SAY_LOSING2 "Hurry! There is not much of me left!" //???
|
||||
#define KALEC_SOUND_LOSING2 12430
|
||||
#define SAY_SATH_AGGRO -1580010
|
||||
#define SAY_SATH_DEATH -1580011
|
||||
#define SAY_SATH_SPELL1 -1580012
|
||||
#define SAY_SATH_SPELL2 -1580013
|
||||
#define SAY_SATH_SLAY1 -1580014
|
||||
#define SAY_SATH_SLAY2 -1580015
|
||||
#define SAY_SATH_ENRAGE -1580016
|
||||
|
||||
#define GO_FAILED "You are unable to use this currently."
|
||||
|
||||
@@ -175,8 +159,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
m_creature->SetStandState(PLAYER_STATE_NONE);
|
||||
DoYell(KALECGOS_SAY_AGGRO, LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, KALECGOS_SOUND_AGGRO);
|
||||
DoScriptText(SAY_EVIL_AGGRO, m_creature);
|
||||
GameObject *Door = GameObject::GetGameObject(*m_creature, DoorGUID);
|
||||
if(Door) Door->SetLootState(GO_ACTIVATED);
|
||||
DoZoneInCombat();
|
||||
@@ -186,14 +169,8 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(KALECGOS_SAY_KILL_1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,KALECGOS_SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(KALECGOS_SAY_KILL_2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,KALECGOS_SOUND_KILL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_EVIL_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_EVIL_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,8 +196,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
TalkTimer = 1000;
|
||||
break;
|
||||
case 2:
|
||||
DoSay(KALECGOS_SAY_WIN, LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature, KALECGOS_SOUND_WIN);
|
||||
DoScriptText(SAY_GOOD_PLRWIN, m_creature);
|
||||
TalkTimer = 10000;
|
||||
break;
|
||||
case 3:
|
||||
@@ -239,8 +215,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
switch(TalkSequence)
|
||||
{
|
||||
case 1:
|
||||
DoYell(KALECGOS_SAY_FLY_AWAY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,KALECGOS_SOUND_FLY_AWAY);
|
||||
DoScriptText(SAY_EVIL_ENRAGE, m_creature);
|
||||
TalkTimer = 3000;
|
||||
break;
|
||||
case 2:
|
||||
@@ -315,8 +290,7 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI
|
||||
m_creature->CombatStart(Kalec);
|
||||
m_creature->AddThreat(Kalec, 100.0f);
|
||||
}
|
||||
DoYell(SATH_SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SATH_SOUND_AGGRO);
|
||||
DoScriptText(SAY_SATH_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit *done_by, uint32 &damage)
|
||||
@@ -340,21 +314,14 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI
|
||||
}
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SATH_SAY_KILL_1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SATH_SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SATH_SAY_KILL_2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SATH_SOUND_KILL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_SATH_SLAY1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SATH_SLAY2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
DoYell(SATH_SAY_DIE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SATH_SOUND_DIE);
|
||||
DoScriptText(SAY_SATH_DEATH, m_creature);
|
||||
m_creature->Relocate(m_creature->GetPositionX(), m_creature->GetPositionY(), DRAGON_REALM_Z, m_creature->GetOrientation());
|
||||
TeleportAllPlayersBack();
|
||||
if(Unit *Kalecgos = Unit::GetUnit(*m_creature, KalecgosGUID))
|
||||
@@ -414,6 +381,7 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI
|
||||
|
||||
if(ShadowBoltTimer < diff)
|
||||
{
|
||||
DoScriptText(SAY_SATH_SPELL1, m_creature);
|
||||
DoCast(m_creature, SPELL_SHADOW_BOLT);
|
||||
ShadowBoltTimer = 7000+(rand()%3000);
|
||||
}else ShadowBoltTimer -= diff;
|
||||
@@ -428,6 +396,7 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI
|
||||
|
||||
if(CorruptionStrikeTimer < diff)
|
||||
{
|
||||
DoScriptText(SAY_SATH_SPELL2, m_creature);
|
||||
DoCast(m_creature->getVictim(), SPELL_CORRUPTION_STRIKE);
|
||||
CorruptionStrikeTimer = 13000;
|
||||
}else CorruptionStrikeTimer -= diff;
|
||||
@@ -494,23 +463,20 @@ struct TRINITY_DLL_DECL boss_kalecAI : public ScriptedAI
|
||||
switch(YellSequence)
|
||||
{
|
||||
case 0:
|
||||
DoYell(KALEC_SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, KALEC_SOUND_AGGRO);
|
||||
DoScriptText(SAY_GOOD_AGGRO, m_creature);
|
||||
YellSequence++;
|
||||
break;
|
||||
case 1:
|
||||
if((m_creature->GetHealth()*100)/m_creature->GetMaxHealth() < 50)
|
||||
{
|
||||
DoYell(KALEC_SAY_LOSING1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, KALEC_SOUND_LOSING1);
|
||||
DoScriptText(SAY_GOOD_NEAR_DEATH, m_creature);
|
||||
YellSequence++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if((m_creature->GetHealth()*100)/m_creature->GetMaxHealth() < 10)
|
||||
{
|
||||
DoYell(KALEC_SAY_LOSING2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, KALEC_SOUND_LOSING2);
|
||||
DoScriptText(SAY_GOOD_NEAR_DEATH2, m_creature);
|
||||
YellSequence++;
|
||||
}
|
||||
break;
|
||||
@@ -645,7 +611,7 @@ void boss_sathrovarrAI::Enrage()
|
||||
error_log("SD2 ERROR: unable to find Kalec");
|
||||
return;
|
||||
}
|
||||
DoYell(SATH_SAY_ENRAGE,LANG_UNIVERSAL,NULL);
|
||||
DoScriptText(SAY_SATH_ENRAGE, m_creature);
|
||||
m_creature->CastSpell(m_creature, SPELL_ENRAGE, true);
|
||||
Kalecgos->CastSpell(Kalecgos, SPELL_ENRAGE, true);
|
||||
isEnraged = true;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Please see the included DOCS/LICENSE.TXT for more information */
|
||||
|
||||
/* ScriptData
|
||||
SDName: instance_sunwell_plateau
|
||||
SDName: Instance_Sunwell_Plateau
|
||||
SD%Complete: 0
|
||||
SDComment: VERIFY SCRIPT
|
||||
SDCategory: Sunwell_Plateau
|
||||
@@ -25,7 +25,7 @@ EndScriptData */
|
||||
|
||||
struct TRINITY_DLL_DECL instance_sunwell_plateau : public ScriptedInstance
|
||||
{
|
||||
instance_sunwell_plateau(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_sunwell_plateau(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint32 Encounters[ENCOUNTERS];
|
||||
|
||||
|
||||
@@ -34,42 +34,19 @@ EndContentData */
|
||||
# npc_millhouse_manastorm
|
||||
#####*/
|
||||
|
||||
#define SAY_INTRO_1 "Where in Bonzo's brass buttons am I? And who are-- yaaghh, that's one mother of a headache!"
|
||||
#define SOUND_INTRO_1 11171
|
||||
#define SAY_INTRO_2 "\"Lowly\"? I don't care who you are friend, no one refers to the mighty Millhouse Manastorm as \"Lowly\"! I have no idea what goes on here, but I will gladly join your fight against this impudent imbecile! Prepare to defend yourself, cretin!"
|
||||
#define SOUND_INTRO_2 11172
|
||||
|
||||
#define SAY_WATER "I just need to get some things ready first. You guys go ahead and get started. I need to summon up some water..."
|
||||
#define SOUND_WATER 11173
|
||||
|
||||
#define SAY_BUFFS "Fantastic! Next, some protective spells. Yes! Now we're cookin'"
|
||||
#define SOUND_BUFFS 11174
|
||||
|
||||
#define SAY_DRINK "And of course i'll need some mana. You guys are gonna love this, just wait."
|
||||
#define SOUND_DRINK 11175
|
||||
|
||||
#define SAY_READY "Aaalllriiiight!! Who ordered up an extra large can of whoop-ass?"
|
||||
#define SOUND_READY 11176
|
||||
|
||||
#define SAY_KILL_1 "I didn't even break a sweat on that one."
|
||||
#define SOUND_KILL_1 11177
|
||||
#define SAY_KILL_2 "You guys, feel free to jump in anytime."
|
||||
#define SOUND_KILL_2 11178
|
||||
|
||||
#define SAY_PYRO "I'm gonna light you up, sweet cheeks!"
|
||||
#define SOUND_PYRO 11179
|
||||
|
||||
#define SAY_ICEBLOCK "Ice, ice, baby!"
|
||||
#define SOUND_ICEBLOCK 11180
|
||||
|
||||
#define SAY_LOWHP "Heal me! Oh, for the love of all that is holy, HEAL me! I'm dying!"
|
||||
#define SOUND_LOWHP 11181
|
||||
|
||||
#define SAY_DEATH "You'll be hearing from my lawyer..."
|
||||
#define SOUND_DEATH 11182
|
||||
|
||||
#define SAY_COMPLETE "Who's bad? Who's bad? That's right: we bad!"
|
||||
#define SOUND_COMPLETE 11183
|
||||
#define SAY_INTRO_1 -1552010
|
||||
#define SAY_INTRO_2 -1552011
|
||||
#define SAY_WATER -1552012
|
||||
#define SAY_BUFFS -1552013
|
||||
#define SAY_DRINK -1552014
|
||||
#define SAY_READY -1552015
|
||||
#define SAY_KILL_1 -1552016
|
||||
#define SAY_KILL_2 -1552017
|
||||
#define SAY_PYRO -1552018
|
||||
#define SAY_ICEBLOCK -1552019
|
||||
#define SAY_LOWHP -1552020
|
||||
#define SAY_DEATH -1552021
|
||||
#define SAY_COMPLETE -1552022
|
||||
|
||||
#define SPELL_CONJURE_WATER 36879
|
||||
#define SPELL_ARCANE_INTELLECT 36880
|
||||
@@ -117,8 +94,7 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI
|
||||
|
||||
if( pInstance->GetData(TYPE_HARBINGERSKYRISS) == DONE )
|
||||
{
|
||||
DoYell(SAY_COMPLETE,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_COMPLETE);
|
||||
DoScriptText(SAY_COMPLETE, m_creature);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -150,21 +126,14 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL_1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL_2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_KILL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit *victim)
|
||||
{
|
||||
DoYell(SAY_DEATH,LANG_UNIVERSAL,0);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
/*for questId 10886 (heroic mode only)
|
||||
if( pInstance && pInstance->GetData(TYPE_HARBINGERSKYRISS) != DONE )
|
||||
@@ -182,36 +151,30 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI
|
||||
switch( Phase )
|
||||
{
|
||||
case 1:
|
||||
DoYell(SAY_INTRO_1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_INTRO_1);
|
||||
DoScriptText(SAY_INTRO_1, m_creature);
|
||||
EventProgress_Timer = 18000;
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_INTRO_2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_INTRO_2);
|
||||
DoScriptText(SAY_INTRO_2, m_creature);
|
||||
EventProgress_Timer = 18000;
|
||||
break;
|
||||
case 3:
|
||||
DoYell(SAY_WATER,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_WATER);
|
||||
DoScriptText(SAY_WATER, m_creature);
|
||||
DoCast(m_creature,SPELL_CONJURE_WATER);
|
||||
EventProgress_Timer = 7000;
|
||||
break;
|
||||
case 4:
|
||||
DoYell(SAY_BUFFS,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_BUFFS);
|
||||
DoScriptText(SAY_BUFFS, m_creature);
|
||||
DoCast(m_creature,SPELL_ICE_ARMOR);
|
||||
EventProgress_Timer = 7000;
|
||||
break;
|
||||
case 5:
|
||||
DoYell(SAY_DRINK,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DRINK);
|
||||
DoScriptText(SAY_DRINK, m_creature);
|
||||
DoCast(m_creature,SPELL_ARCANE_INTELLECT);
|
||||
EventProgress_Timer = 7000;
|
||||
break;
|
||||
case 6:
|
||||
DoYell(SAY_READY,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_READY);
|
||||
DoScriptText(SAY_READY, m_creature);
|
||||
EventProgress_Timer = 6000;
|
||||
break;
|
||||
case 7:
|
||||
@@ -230,8 +193,7 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI
|
||||
|
||||
if( !LowHp && ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 20) )
|
||||
{
|
||||
DoYell(SAY_LOWHP,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_LOWHP);
|
||||
DoScriptText(SAY_LOWHP, m_creature);
|
||||
LowHp = true;
|
||||
}
|
||||
|
||||
@@ -240,8 +202,7 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI
|
||||
if( m_creature->IsNonMeleeSpellCasted(false) )
|
||||
return;
|
||||
|
||||
DoYell(SAY_PYRO,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_PYRO);
|
||||
DoScriptText(SAY_PYRO, m_creature);
|
||||
|
||||
DoCast(m_creature->getVictim(),SPELL_PYROBLAST);
|
||||
Pyroblast_Timer = 40000;
|
||||
@@ -266,28 +227,14 @@ CreatureAI* GetAI_npc_millhouse_manastorm(Creature *_Creature)
|
||||
# npc_warden_mellichar
|
||||
#####*/
|
||||
|
||||
#define YELL_INTRO1 "I knew the prince would be angry but, I... I have not been myself. I had to let them out! The great one speaks to me, you see. Wait--outsiders. Kael'thas did not send you! Good... I'll just tell the prince you released the prisoners!"
|
||||
#define SOUND_INTRO1 11222
|
||||
|
||||
#define YELL_INTRO2 "The naaru kept some of the most dangerous beings in existence here in these cells. Let me introduce you to another...."
|
||||
#define SOUND_INTRO2 11223
|
||||
|
||||
#define YELL_RELEASE1 "Yes, yes... another! Your will is mine!"
|
||||
#define SOUND_RELEASE1 11224
|
||||
|
||||
#define YELL_RELEASE2A "Behold another terrifying creature of incomprehensible power!"
|
||||
#define SOUND_RELEASE2A 11225
|
||||
#define YELL_RELEASE2B "What is this? A lowly gnome? I will do better, O'great one."
|
||||
#define SOUND_RELEASE2B 11226
|
||||
|
||||
#define YELL_RELEASE3 "Anarchy! Bedlam! Oh, you are so wise! Yes, I see it now, of course!"
|
||||
#define SOUND_RELEASE3 11227
|
||||
|
||||
#define YELL_RELEASE4 "One final cell remains. Yes, O'great one, right away!"
|
||||
#define SOUND_RELEASE4 11228
|
||||
|
||||
#define YELL_WELCOME "Welcome, O'great one. I am your humble servant."
|
||||
#define SOUND_WELCOME 11229
|
||||
#define YELL_INTRO1 -1552023
|
||||
#define YELL_INTRO2 -1552024
|
||||
#define YELL_RELEASE1 -1552025
|
||||
#define YELL_RELEASE2A -1552026
|
||||
#define YELL_RELEASE2B -1552027
|
||||
#define YELL_RELEASE3 -1552028
|
||||
#define YELL_RELEASE4 -1552029
|
||||
#define YELL_WELCOME -1552030
|
||||
|
||||
//phase 2(acid mobs)
|
||||
#define ENTRY_TRICKSTER 20905
|
||||
@@ -366,19 +313,19 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
DoYell(YELL_INTRO1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_INTRO1);
|
||||
//possibly wrong spell OR should also cast second spell to make bubble appear (visual for this spell appear to be the correct)
|
||||
DoScriptText(YELL_INTRO1, m_creature);
|
||||
DoCast(m_creature,SPELL_BUBBLE_VISUAL);
|
||||
|
||||
if( pInstance )
|
||||
{
|
||||
pInstance->SetData(TYPE_HARBINGERSKYRISS,IN_PROGRESS);
|
||||
if (GameObject* Sphere = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_SPHERE_SHIELD)))
|
||||
Sphere->SetGoState(1);
|
||||
IsRunning = true;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 CanProgress()
|
||||
bool CanProgress()
|
||||
{
|
||||
if( pInstance )
|
||||
{
|
||||
@@ -467,8 +414,7 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
|
||||
m_creature->SummonCreature(ENTRY_MILLHOUSE,413.292,-148.378,42.56,6.27,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000);
|
||||
break;
|
||||
case 4:
|
||||
DoYell(YELL_RELEASE2B,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RELEASE2B);
|
||||
DoScriptText(YELL_RELEASE2B, m_creature);
|
||||
break;
|
||||
case 5:
|
||||
switch( rand()%2 )
|
||||
@@ -486,8 +432,7 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
|
||||
break;
|
||||
case 7:
|
||||
m_creature->SummonCreature(ENTRY_SKYRISS,445.763,-191.639,44.64,1.60,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000);
|
||||
DoYell(YELL_WELCOME,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_WELCOME);
|
||||
DoScriptText(YELL_WELCOME, m_creature);
|
||||
break;
|
||||
}
|
||||
CanSpawn = false;
|
||||
@@ -498,20 +443,17 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
|
||||
switch( Phase )
|
||||
{
|
||||
case 1:
|
||||
DoYell(YELL_INTRO2,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_INTRO2);
|
||||
DoScriptText(YELL_INTRO2, m_creature);
|
||||
EventProgress_Timer = 10000;
|
||||
++Phase;
|
||||
break;
|
||||
case 2:
|
||||
DoYell(YELL_RELEASE1,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RELEASE1);
|
||||
DoScriptText(YELL_RELEASE1, m_creature);
|
||||
DoPrepareForPhase();
|
||||
EventProgress_Timer = 7000;
|
||||
break;
|
||||
case 3:
|
||||
DoYell(YELL_RELEASE2A,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RELEASE2A);
|
||||
DoScriptText(YELL_RELEASE2A, m_creature);
|
||||
DoPrepareForPhase();
|
||||
EventProgress_Timer = 10000;
|
||||
break;
|
||||
@@ -520,14 +462,12 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI
|
||||
EventProgress_Timer = 15000;
|
||||
break;
|
||||
case 5:
|
||||
DoYell(YELL_RELEASE3,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RELEASE3);
|
||||
DoScriptText(YELL_RELEASE3, m_creature);
|
||||
DoPrepareForPhase();
|
||||
EventProgress_Timer = 15000;
|
||||
break;
|
||||
case 6:
|
||||
DoYell(YELL_RELEASE4,LANG_UNIVERSAL,NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_RELEASE4);
|
||||
DoScriptText(YELL_RELEASE4, m_creature);
|
||||
DoPrepareForPhase();
|
||||
EventProgress_Timer = 15000;
|
||||
break;
|
||||
|
||||
+28
-67
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_Harbinger_Skyriss
|
||||
SD%Complete: 45
|
||||
SDComment: CombatAI not fully implemented. Timers will need adjustments. Need better method to "kill" the warden. Need more docs on how event fully work. Reset all event and force start over if fail at one point?
|
||||
SDComment: CombatAI not fully implemented. Timers will need adjustments. Need more docs on how event fully work. Reset all event and force start over if fail at one point?
|
||||
SDCategory: Tempest Keep, The Arcatraz
|
||||
EndScriptData */
|
||||
|
||||
@@ -29,32 +29,16 @@ EndContentData */
|
||||
#include "precompiled.h"
|
||||
#include "def_arcatraz.h"
|
||||
|
||||
#define SAY_INTRO "It is a small matter to control the mind of the weak... for I bear allegiance to powers untouched by time, unmoved by fate. No force on this world or beyond harbors the strength to bend our knee... not even the mighty Legion!"
|
||||
#define SOUND_INTRO 11122
|
||||
|
||||
#define SAY_AGGRO "Bear witness to the agent of your demise!"
|
||||
#define SOUND_AGGRO 11123
|
||||
|
||||
#define SAY_KILL_1 "Your fate is written!"
|
||||
#define SOUND_KILL_1 11124
|
||||
#define SAY_KILL_2 "The chaos I have sown here is but a taste...."
|
||||
#define SOUND_KILL_2 11125
|
||||
|
||||
#define SAY_MIND_1 "You will do my bidding, weakling."
|
||||
#define SOUND_MIND_1 11127
|
||||
#define SAY_MIND_2 "Your will is no longer your own."
|
||||
#define SOUND_MIND_2 11128
|
||||
|
||||
#define SAY_FEAR_1 "Flee in terror!"
|
||||
#define SOUND_FEAR_1 11129
|
||||
#define SAY_FEAR_2 "I will show you horrors undreamed of!"
|
||||
#define SOUND_FEAR_2 11130
|
||||
|
||||
#define SAY_IMAGE "We span the universe, as countless as the stars!"
|
||||
#define SOUND_IMAGE 11131
|
||||
|
||||
#define SAY_DEATH "I am merely one of... infinite multitudes."
|
||||
#define SOUND_DEATH 11126
|
||||
#define SAY_INTRO -1552000
|
||||
#define SAY_AGGRO -1552001
|
||||
#define SAY_KILL_1 -1552002
|
||||
#define SAY_KILL_2 -1552003
|
||||
#define SAY_MIND_1 -1552004
|
||||
#define SAY_MIND_2 -1552005
|
||||
#define SAY_FEAR_1 -1552006
|
||||
#define SAY_FEAR_2 -1552007
|
||||
#define SAY_IMAGE -1552008
|
||||
#define SAY_DEATH -1552009
|
||||
|
||||
#define SPELL_FEAR 39415
|
||||
|
||||
@@ -75,6 +59,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
Intro = false;
|
||||
Reset();
|
||||
}
|
||||
|
||||
@@ -96,11 +81,6 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
{
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||
|
||||
if( Intro )
|
||||
Intro = true;
|
||||
else
|
||||
Intro = false;
|
||||
|
||||
IsImage33 = false;
|
||||
IsImage66 = false;
|
||||
|
||||
@@ -114,7 +94,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if(Intro)
|
||||
if(!Intro)
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
}
|
||||
|
||||
@@ -131,27 +111,21 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_DEATH);
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
if( pInstance )
|
||||
pInstance->SetData(TYPE_HARBINGERSKYRISS,DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
/*if( victim->GetEntry() == 21436 )
|
||||
return;*/
|
||||
//won't yell killing pet/other unit
|
||||
if( victim->GetEntry() == 21436 )
|
||||
return;
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_KILL_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_KILL_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_KILL_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_KILL_2, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,8 +139,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
if( m_creature->IsNonMeleeSpellCasted(false) )
|
||||
m_creature->InterruptNonMeleeSpells(false);
|
||||
|
||||
DoYell(SAY_IMAGE, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_IMAGE);
|
||||
DoScriptText(SAY_IMAGE, m_creature);
|
||||
|
||||
if( val == 66 )
|
||||
DoCast(m_creature, SPELL_66_ILLUSION);
|
||||
@@ -186,14 +159,14 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
switch( Intro_Phase )
|
||||
{
|
||||
case 1:
|
||||
DoYell(SAY_INTRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_INTRO);
|
||||
DoScriptText(SAY_INTRO, m_creature);
|
||||
if (GameObject* Sphere = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_SPHERE_SHIELD)))
|
||||
Sphere->SetGoState(0);
|
||||
++Intro_Phase;
|
||||
Intro_Timer = 25000;
|
||||
break;
|
||||
case 2:
|
||||
DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_AGGRO);
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
if( Unit *mellic = Unit::GetUnit(*m_creature,pInstance->GetData64(DATA_MELLICHAR)) )
|
||||
{
|
||||
//should have a better way to do this. possibly spell exist.
|
||||
@@ -242,14 +215,8 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_FEAR_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_FEAR_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_FEAR_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_FEAR_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_FEAR_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_FEAR_2, m_creature); break;
|
||||
}
|
||||
|
||||
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1) )
|
||||
@@ -267,14 +234,8 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI
|
||||
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0:
|
||||
DoYell(SAY_MIND_1, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_MIND_1);
|
||||
break;
|
||||
case 1:
|
||||
DoYell(SAY_MIND_2, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature,SOUND_MIND_2);
|
||||
break;
|
||||
case 0: DoScriptText(SAY_MIND_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_MIND_2, m_creature); break;
|
||||
}
|
||||
|
||||
if( Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1) )
|
||||
|
||||
@@ -16,4 +16,5 @@
|
||||
#define TYPE_WARDEN_5 9
|
||||
#define DATA_MELLICHAR 10
|
||||
#define TYPE_SHIELD_OPEN 11
|
||||
#define DATA_SPHERE_SHIELD 12
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user