diff options
author | Blaymoira <none@none> | 2008-12-13 19:56:53 +0100 |
---|---|---|
committer | Blaymoira <none@none> | 2008-12-13 19:56:53 +0100 |
commit | ed7a4d9831b20e424deeb90d7c2c0dc053467841 (patch) | |
tree | aad00be181d1ca8da40e35a05171670b4032ce56 /src | |
parent | 8b4f5b629091965adf4d565329429071bc519e4c (diff) |
*Merged Scriptdev2 783
--HG--
branch : trunk
Diffstat (limited to 'src')
129 files changed, 4894 insertions, 4622 deletions
diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am index d14b772a0d7..716eaae72d8 100644 --- a/src/bindings/scripts/Makefile.am +++ b/src/bindings/scripts/Makefile.am @@ -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 \ diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index a4f54c0579c..414793c3898 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.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(); diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj index e4bca427281..0f009b85e21 100644 --- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj +++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj @@ -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"/> - <Tool - Name="VCMIDLTool"/> + TargetMachine="1" + /> <Tool - Name="VCPreBuildEventTool"/> + Name="VCALinkTool" + /> <Tool - Name="VCPreLinkEventTool"/> + Name="VCManifestTool" + /> <Tool - Name="VCResourceCompilerTool"/> + Name="VCXDCMakeTool" + /> <Tool - Name="VCWebServiceProxyGeneratorTool"/> + Name="VCBscMakeTool" + /> <Tool - Name="VCXMLDataGeneratorTool"/> + Name="VCFxCopTool" + /> <Tool - Name="VCWebDeploymentTool"/> + Name="VCAppVerifierTool" + /> <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="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> <Tool - Name="VCCustomBuildTool"/> + 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" @@ -526,10 +597,6 @@ > </File> <File - RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp" - > - </File> - <File RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp" > </File> @@ -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,16 +1220,16 @@ <Filter Name="Uldaman" > - <File + <File RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" + RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" + RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" > </File> <File @@ -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> @@ -1701,10 +1768,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> @@ -1713,6 +1776,10 @@ > </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" > </File> diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index 9aad13027db..e439c7820a7 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -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,14 +99,11 @@ Name="VCAppVerifierTool" /> <Tool - Name="VCWebDeploymentTool" - /> - <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration - Name="Debug|x64" + Name="Release|Win32" OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)" IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)" ConfigurationType="2" @@ -125,16 +125,15 @@ /> <Tool Name="VCMIDLTool" - TargetEnvironment="3" /> <Tool Name="VCCLCompilerTool" - Optimization="0" + AdditionalOptions="/MP" AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers" - PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT" + RuntimeLibrary="2" + EnableEnhancedInstructionSet="1" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="precompiled.h" WarningLevel="3" @@ -154,13 +153,16 @@ Name="VCLinkerTool" AdditionalDependencies="TrinityCore.lib zthread.lib" OutputFile="$(OutDir)/TrinityScript.dll" - LinkIncremental="2" + LinkIncremental="1" AdditionalLibraryDirectories="..\..\..\..\win\VC80\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC80\trinitycore__$(PlatformName)_$(ConfigurationName)" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb" + GenerateDebugInformation="false" SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(OutDir)/TrinityScript.lib" - TargetMachine="17" + TargetMachine="1" /> <Tool Name="VCALinkTool" @@ -181,14 +183,11 @@ Name="VCAppVerifierTool" /> <Tool - Name="VCWebDeploymentTool" - /> - <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration - Name="Release|Win32" + Name="Debug|x64" OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)" IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)" ConfigurationType="2" @@ -210,15 +209,16 @@ /> <Tool Name="VCMIDLTool" + TargetEnvironment="3" /> <Tool Name="VCCLCompilerTool" - AdditionalOptions="/MP" + Optimization="0" AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT" - RuntimeLibrary="2" - EnableEnhancedInstructionSet="1" - FloatingPointModel="2" + PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" UsePrecompiledHeader="2" PrecompiledHeaderThrough="precompiled.h" WarningLevel="3" @@ -238,14 +238,13 @@ Name="VCLinkerTool" AdditionalDependencies="TrinityCore.lib zthread.lib" OutputFile="$(OutDir)/TrinityScript.dll" - LinkIncremental="1" + LinkIncremental="2" AdditionalLibraryDirectories="..\..\..\..\win\VC80\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC80\trinitycore__$(PlatformName)_$(ConfigurationName)" - GenerateDebugInformation="false" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb" SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" ImportLibrary="$(OutDir)/TrinityScript.lib" - TargetMachine="1" + TargetMachine="17" /> <Tool Name="VCALinkTool" @@ -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" @@ -771,10 +774,6 @@ > </File> <File - RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp" - > - </File> - <File RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp" > </File> @@ -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,16 +1397,16 @@ <Filter Name="Uldaman" > - <File + <File RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" + RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" + RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" > </File> <File @@ -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> @@ -1946,10 +1945,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> @@ -1958,6 +1953,10 @@ > </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" > </File> @@ -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" diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index d8d707b1b2a..84c23853909 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -98,9 +98,12 @@ <Tool Name="VCAppVerifierTool" /> + <Tool + Name="VCPostBuildEventTool" + /> </Configuration> <Configuration - Name="Debug|x64" + Name="Release|Win32" OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)" IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)" ConfigurationType="2" @@ -122,16 +125,16 @@ /> <Tool Name="VCMIDLTool" - TargetEnvironment="3" /> <Tool Name="VCCLCompilerTool" - Optimization="0" + AdditionalOptions="/MP" AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers" - PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT" + MinimalRebuild="false" + RuntimeLibrary="2" + EnableEnhancedInstructionSet="1" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="precompiled.h" WarningLevel="3" @@ -151,15 +154,16 @@ Name="VCLinkerTool" AdditionalDependencies="trinitycore.lib zthread.lib" OutputFile="$(OutDir)/TrinityScript.dll" - LinkIncremental="2" + LinkIncremental="1" AdditionalLibraryDirectories="..\..\..\..\win\VC90\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC90\trinitycore__$(PlatformName)_$(ConfigurationName)" - GenerateDebugInformation="true" - ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb" + GenerateDebugInformation="false" SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" RandomizedBaseAddress="1" DataExecutionPrevention="0" ImportLibrary="$(OutDir)/TrinityScript.lib" - TargetMachine="17" + TargetMachine="1" /> <Tool Name="VCALinkTool" @@ -179,9 +183,12 @@ <Tool Name="VCAppVerifierTool" /> + <Tool + Name="VCPostBuildEventTool" + /> </Configuration> <Configuration - Name="Release|Win32" + Name="Debug|x64" OutputDirectory="..\..\..\..\bin\$(PlatformName)_$(ConfigurationName)" IntermediateDirectory=".\ScriptDev2__$(PlatformName)_$(ConfigurationName)" ConfigurationType="2" @@ -203,16 +210,16 @@ /> <Tool Name="VCMIDLTool" + TargetEnvironment="3" /> <Tool Name="VCCLCompilerTool" - AdditionalOptions="/MP" + Optimization="0" AdditionalIncludeDirectories="..\..\..\..\dep\include\;..\..\..\shared\;..\..\..\framework\;..\..\..\game\;..\include\;..\..\..\..\dep\ACE_wrappers" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCRIPT" - MinimalRebuild="false" - RuntimeLibrary="2" - EnableEnhancedInstructionSet="1" - FloatingPointModel="2" + PreprocessorDefinitions="WIN32;_DEBUG;MANGOS_DEBUG;_WINDOWS;_USRDLL;SCRIPT" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" UsePrecompiledHeader="2" PrecompiledHeaderThrough="precompiled.h" WarningLevel="3" @@ -232,16 +239,15 @@ Name="VCLinkerTool" AdditionalDependencies="trinitycore.lib zthread.lib" OutputFile="$(OutDir)/TrinityScript.dll" - LinkIncremental="1" + LinkIncremental="2" AdditionalLibraryDirectories="..\..\..\..\win\VC90\zthread__$(PlatformName)_$(ConfigurationName);..\..\..\..\win\VC90\trinitycore__$(PlatformName)_$(ConfigurationName)" - GenerateDebugInformation="false" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/MaNGOSScript.pdb" SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" RandomizedBaseAddress="1" DataExecutionPrevention="0" ImportLibrary="$(OutDir)/TrinityScript.lib" - TargetMachine="1" + TargetMachine="17" /> <Tool Name="VCALinkTool" @@ -500,6 +506,10 @@ <Filter Name="Ashenvale Forest" > + <File + RelativePath="..\scripts\zone\ashenvale_forest\ashenvale.cpp" + > + </File> </Filter> <Filter Name="Azshara" @@ -757,10 +767,6 @@ > </File> <File - RelativePath="..\scripts\zone\scarlet_monastery\boss_high_inquisitor_whitemane.cpp" - > - </File> - <File RelativePath="..\scripts\zone\scarlet_monastery\boss_houndmaster_loksey.cpp" > </File> @@ -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,16 +1390,16 @@ <Filter Name="Uldaman" > - <File + <File RelativePath="..\scripts\zone\uldaman\boss_archaedas.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" + RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" > - </File> + </File> <File - RelativePath="..\scripts\zone\uldaman\boss_ironaya.cpp" + RelativePath="..\scripts\zone\uldaman\instance_uldaman.cpp" > </File> <File @@ -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> @@ -1944,6 +1946,10 @@ > </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" > </File> @@ -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" diff --git a/src/bindings/scripts/include/sc_instance.h b/src/bindings/scripts/include/sc_instance.h index cb6374b0415..8ecd982f5cb 100644 --- a/src/bindings/scripts/include/sc_instance.h +++ b/src/bindings/scripts/include/sc_instance.h @@ -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) {} diff --git a/src/bindings/scripts/scripts/guard/guard_ai.cpp b/src/bindings/scripts/scripts/guard/guard_ai.cpp index d1aa58847f7..4fc3f3a8037 100644 --- a/src/bindings/scripts/scripts/guard/guard_ai.cpp +++ b/src/bindings/scripts/scripts/guard/guard_ai.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/guard/guards.cpp b/src/bindings/scripts/scripts/guard/guards.cpp index a96ded0ac70..62da5e923ed 100644 --- a/src/bindings/scripts/scripts/guard/guards.cpp +++ b/src/bindings/scripts/scripts/guard/guards.cpp @@ -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 *******************************************************/ diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp index 4c34c45370f..88505c44caf 100644 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp +++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp @@ -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()) diff --git a/src/bindings/scripts/scripts/zone/ashenvale_forest/ashenvale.cpp b/src/bindings/scripts/scripts/zone/ashenvale_forest/ashenvale.cpp new file mode 100644 index 00000000000..c988054cfa9 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/ashenvale_forest/ashenvale.cpp @@ -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(); +}
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp index 26b05e04def..f2f11344692 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp index 4ae6ad5c7a4..2558bb890af 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp index ff5afc179e2..af44fd70b6a 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/azshara/boss_azuregos.cpp b/src/bindings/scripts/scripts/zone/azshara/boss_azuregos.cpp index f688892d709..5cf6a5c7f2a 100644 --- a/src/bindings/scripts/scripts/zone/azshara/boss_azuregos.cpp +++ b/src/bindings/scripts/scripts/zone/azshara/boss_azuregos.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp index 03e26504228..9b8b098ac5f 100644 --- a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp @@ -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> /*###### @@ -306,6 +308,127 @@ CreatureAI* GetAI_npc_injured_draenei(Creature *_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; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp index 3f56e3cd59b..921bcb0cde4 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp index ee8a2c8348e..42d5242114a 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp index e718b948b05..204cf626a7c 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp @@ -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(); diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp index 3cd73df1bc7..833e8eb985c 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp index f0ac118f66d..6231496f2d6 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp index d212ec10f44..cfcc5b6f092 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp @@ -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(); } diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp index f2fe6f64f2f..ade95cbf3f8 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp b/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp index 42197029a89..3cc1d16187d 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp index 0ff92762389..13d50d96ba0 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp @@ -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. diff --git a/src/bindings/scripts/scripts/zone/blackwing_lair/boss_flamegor.cpp b/src/bindings/scripts/scripts/zone/blackwing_lair/boss_flamegor.cpp index fbc8f4fa51a..d19bb265cc0 100644 --- a/src/bindings/scripts/scripts/zone/blackwing_lair/boss_flamegor.cpp +++ b/src/bindings/scripts/scripts/zone/blackwing_lair/boss_flamegor.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/blackwing_lair/instance_blackwing_lair.cpp b/src/bindings/scripts/scripts/zone/blackwing_lair/instance_blackwing_lair.cpp index 7bdd3250442..0384e40a651 100644 --- a/src/bindings/scripts/scripts/zone/blackwing_lair/instance_blackwing_lair.cpp +++ b/src/bindings/scripts/scripts/zone/blackwing_lair/instance_blackwing_lair.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp index ab208aafba9..84b4858e234 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp index 51f147badc2..1b122df21f8 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal.cpp @@ -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(); } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp index 2f92a1e6cd4..cbb8ce53b91 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp @@ -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; - - 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; + { + 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); + + m_creature->SetVisibility(VISIBILITY_OFF); + }else RetreatTimer -= diff; + } if(!EventBegun) return; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h index 3765e26d602..b89290cd875 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h @@ -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 diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp index 66b9a7bfcc3..4aae6d35638 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp index 76d96775056..fdd753b6dca 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h index 8a230919bbc..b8dbc693da5 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/def_old_hillsbrad.h @@ -13,4 +13,5 @@ #define TYPE_THRALL_PART4 6 #define DATA_THRALL 7 #define DATA_TARETHA 8 +#define WORLD_STATE_OH 2436 #endif diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp index 38a20c8adaf..f4b77074e95 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/instance_old_hillsbrad.cpp @@ -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; } } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index 596d327bc42..8e48eaa3ca5 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -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 ) - { - Unit* player = ((Creature*)Unit::GetUnit((*m_creature), PlayerGUID)); - if( player && player->GetTypeId() == TYPEID_PLAYER ) - ((Player*)player)->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; - } - } + if (!PlayerGUID) + break; + + //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); + } + + //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); - - 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; + _Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000); + + 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(); } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp index 509eadc2006..b2bcadffff0 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp @@ -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] = +{ + {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 { - boss_the_lurker_belowAI(Creature *c) : ScriptedAI(c) {Reset();} + NOROTATE = 0, + CLOCKWISE = 1, + COUNTERCLOCKWISE = 2, +}; - void Reset() - { - +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; + } } - void MoveInLineOfSight(Unit *who) - { + ScriptedInstance* pInstance; - } + bool Spawned; + uint32 RotTimer; + uint8 RotType; + double SpoutAngle; + uint32 SpoutAnimTimer; + bool Submerged; - void Aggro(Unit *who) - { - - } + uint32 WaterboltTimer; + uint32 SpoutTimer; + uint32 WhirlTimer;//after avery spout + uint32 PhaseTimer; + uint32 GeyserTimer; - void UpdateAI(const uint32 diff) - { + 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) { diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp index cb09a94044f..39cf01cdd57 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp @@ -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); } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp index 6f839359d0a..928fc788fd1 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp @@ -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); } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp index dc082244846..b6884e56538 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp index 8205ad42261..22004783d89 100644 --- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp +++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp index 20fb7a00532..a5806f67cae 100644 --- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp +++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp @@ -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); } diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp index 3d058060722..c76f22ec547 100644 --- a/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp +++ b/src/bindings/scripts/scripts/zone/gruuls_lair/instance_gruuls_lair.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp index bee90392fe3..f0e2f1fd0bd 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp index d272ac81cb1..9ecf3a2ca01 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp @@ -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 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 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_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();} - - void WaypointReached(uint32 i) - { - Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); - - if (!player) - return; - - switch (i) - { - - case 0: - DoSay(SAY1, LANG_UNIVERSAL, player); - // Change faction, so mobs can attack - m_creature->setFaction(1610); - break; - - 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); - } + npc_wounded_blood_elfAI(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_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); + } + + void Aggro(Unit* who) + { + if (IsBeingEscorted) + DoScriptText(SAY_ELF_AGGRO, m_creature); + } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void JustDied(Unit* killer) + { + if (!IsBeingEscorted) + return; + + 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 + +CreatureAI* GetAI_npc_wounded_blood_elf(Creature *_Creature) { - if (quest->GetQuestId() == QUEST_THE_ROAD_TO_FALCON_WATCH) - { - ((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID()); - } - return true; + npc_wounded_blood_elfAI* welfAI = new npc_wounded_blood_elfAI(_Creature); + + 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; } - -CreatureAI* GetAI_npc_wounded_blood_elf(Creature *_Creature) + +bool QuestAccept_npc_wounded_blood_elf(Player* player, Creature* creature, Quest const* quest) { - npc_wounded_blood_elfAI* thisAI = 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; + 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(); }
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_curator.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_curator.cpp index 3c83b618604..87fccc87e67 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_curator.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_curator.cpp @@ -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(); diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_maiden_of_virtue.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_maiden_of_virtue.cpp index b4075e72b73..e3d7c6546c0 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_maiden_of_virtue.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_maiden_of_virtue.cpp @@ -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(); diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp index 1331e59c2f2..35a74ca21aa 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp @@ -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); } } }; diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp index ce8f26ff0e5..646937c33a1 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp @@ -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); diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_netherspite.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_netherspite.cpp index f3787814af9..9e9ebe50b55 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_netherspite.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_netherspite.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp index 1b9ccd570d8..294159f196e 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp index 71325d21f22..29a3ffc78ef 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp @@ -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; } } }; diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp index 00a8cd46281..c3014bc3f97 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp @@ -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(); } diff --git a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp index 2509445f3d0..a9c559c60f3 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp @@ -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) { diff --git a/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h b/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h index 938c0131b9c..df39785f555 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h +++ b/src/bindings/scripts/scripts/zone/karazhan/def_karazhan.h @@ -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 diff --git a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp index 29e07fe254f..10146e0e761 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp index 404014565e6..bec23619569 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp index 0bb7be32d99..258a88fe096 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp index afae183a4ec..0f6884cb7e1 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp index 83174dd5a4c..b5b6f5bb02e 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp @@ -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() ) diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp index 4f073cb884d..1e9f8da08f1 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/instance_magisters_terrace.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/instance_magisters_terrace.cpp index 70d12865158..949fbb07a01 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/instance_magisters_terrace.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/instance_magisters_terrace.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_baron_geddon.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_baron_geddon.cpp index 75cf6cb0a45..eea54e93bbf 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_baron_geddon.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_baron_geddon.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_garr.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_garr.cpp index 830af78c430..2c5d1bef10f 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_garr.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_garr.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp index ebefd0185fc..2e5997aafb1 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_magmadar.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_magmadar.cpp index d08f393fbee..f156756df58 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_magmadar.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_magmadar.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp index 43be23046ea..7fc7515542f 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp index 38149e336c3..e3e9f53f6e1 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_ragnaros.cpp @@ -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; } diff --git a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp index efba77f41f0..cd13967e5ec 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp @@ -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() diff --git a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp index eb73f8bfb3a..3b4895f29b1 100644 --- a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp +++ b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_buru.cpp b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_buru.cpp index 295b4aec1c3..f82095178b2 100644 --- a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_buru.cpp +++ b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_buru.cpp @@ -22,3 +22,5 @@ SDCategory: Ruins of Ahn'Qiraj EndScriptData */ #include "precompiled.h" + + #define EMOTE_TARGET -1509002
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_moam.cpp b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_moam.cpp index 12e58066456..c966149a702 100644 --- a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_moam.cpp +++ b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_moam.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_ossirian.cpp b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_ossirian.cpp index a86b080a3fe..4460aee87e8 100644 --- a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_ossirian.cpp +++ b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_ossirian.cpp @@ -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
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_rajaxx.cpp b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_rajaxx.cpp index 4376fa515df..55ff9978ae9 100644 --- a/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_rajaxx.cpp +++ b/src/bindings/scripts/scripts/zone/ruins_of_ahnqiraj/boss_rajaxx.cpp @@ -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
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp index 494def37c11..c6259d33ac9 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp @@ -16,175 +16,159 @@ /* 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 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 SPELL_FRENZY 8269 + +#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); + DoScriptText(SAY_AGGRO, m_creature); + DoCast(m_creature,SPELL_RUSHINGCHARGE); + } - //Activate Berserker Stance - DoCast(m_creature,SPELL_BERSERKERSTANCE); + void KilledUnit(Unit *victim) + { + DoScriptText(SAY_KILL, m_creature); + } - //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; - } - } + 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; + DoMeleeAttackIfReady(); + } +}; - //Rend_Timer - if (Rend_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_REND); - Rend_Timer = 25000; - }else Rend_Timer -= diff; +CreatureAI* GetAI_boss_herod(Creature *_Creature) +{ + return new boss_herodAI (_Creature); +} - //ThunderClap_Timer - if (ThunderClap_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_THUNDERCLAP); - ThunderClap_Timer = 20000; - }else ThunderClap_Timer -= diff; +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} +}; - //Slam_Timer - if (Slam_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_SLAM); - Slam_Timer = 20000; - }else Slam_Timer -= diff; +uint32 Wait[12][1]= +{ + {0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{0},{600000} +}; - //Fireball11_Timer - if (Fireball11_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_FIREBALL11); - Fireball11_Timer = 30000; - }else Fireball11_Timer -= diff; +struct TRINITY_DLL_DECL mob_scarlet_traineeAI : public npc_escortAI +{ + mob_scarlet_traineeAI(Creature *c) : npc_escortAI(c) {Reset();} - //ConeOfCold5_Timer - if (ConeOfCold5_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_CONEOFCOLD5); - ConeOfCold5_Timer = 40000; - }else ConeOfCold5_Timer -= diff; + uint32 Start_Timer; - DoMeleeAttackIfReady(); - } + 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_boss_herod(Creature *_Creature) +CreatureAI* GetAI_mob_scarlet_trainee(Creature* _Creature) { - return new boss_herodAI (_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() @@ -192,6 +176,11 @@ 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(); } diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp index a230629b871..cb1826bdbde 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_high_inquisitor_fairbanks.cpp @@ -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(); } diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp new file mode 100644 index 00000000000..67a25af87db --- /dev/null +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_mograine_and_whitemane.cpp @@ -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(); +} diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/def_scarlet_monastery.h b/src/bindings/scripts/scripts/zone/scarlet_monastery/def_scarlet_monastery.h index fc0991df091..e765eca59d9 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/def_scarlet_monastery.h +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/def_scarlet_monastery.h @@ -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
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/instance_scarlet_monastery.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/instance_scarlet_monastery.cpp index a510ea06fab..86051831fb5 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/instance_scarlet_monastery.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/instance_scarlet_monastery.cpp @@ -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) diff --git a/src/bindings/scripts/scripts/zone/scholomance/instance_scholomance.cpp b/src/bindings/scripts/scripts/zone/scholomance/instance_scholomance.cpp index 036a34cd8fa..5a4628eb4cb 100644 --- a/src/bindings/scripts/scripts/zone/scholomance/instance_scholomance.cpp +++ b/src/bindings/scripts/scripts/zone/scholomance/instance_scholomance.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp index fb1bfe380c8..a1b204913e3 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp index d297ccbcdeb..1126fbee975 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp @@ -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()); diff --git a/src/bindings/scripts/scripts/zone/silithus/silithus.cpp b/src/bindings/scripts/scripts/zone/silithus/silithus.cpp index bf868318342..6b6f2a45870 100644 --- a/src/bindings/scripts/scripts/zone/silithus/silithus.cpp +++ b/src/bindings/scripts/scripts/zone/silithus/silithus.cpp @@ -17,17 +17,83 @@ /* 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; diff --git a/src/bindings/scripts/scripts/zone/silverpine_forest/silverpine_forest.cpp b/src/bindings/scripts/scripts/zone/silverpine_forest/silverpine_forest.cpp index b511ccbba4e..50d2ee4b331 100644 --- a/src/bindings/scripts/scripts/zone/silverpine_forest/silverpine_forest.cpp +++ b/src/bindings/scripts/scripts/zone/silverpine_forest/silverpine_forest.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp index aac9c590c97..1f3b7acd96a 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_baron_rivendare.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_baroness_anastari.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_baroness_anastari.cpp index 8c88353878c..97ea6cdac5a 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_baroness_anastari.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_baroness_anastari.cpp @@ -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); diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp index daa8da39a67..e73b8469d56 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp @@ -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(); } }; diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_maleki_the_pallid.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_maleki_the_pallid.cpp index d3d60121a87..cd7e99ac300 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_maleki_the_pallid.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_maleki_the_pallid.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_nerubenkan.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_nerubenkan.cpp index b56e643bdb2..197ab3d8e3d 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_nerubenkan.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_nerubenkan.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp index b2965f09edf..da979373f79 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_ramstein_the_gorger.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/stratholme/def_stratholme.h b/src/bindings/scripts/scripts/zone/stratholme/def_stratholme.h index 27c181a77f5..810ffdf39b7 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/def_stratholme.h +++ b/src/bindings/scripts/scripts/zone/stratholme/def_stratholme.h @@ -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 diff --git a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp index 74181d6a15e..4ff5c0cbaec 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp @@ -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();}; + + uint32 Encounter[ENCOUNTERS]; + + 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); + } + } - bool IsSilverHandDead[5]; + 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) + 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; + } } }; diff --git a/src/bindings/scripts/scripts/zone/stratholme/stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/stratholme.cpp index 2a38abe9311..139c0ddea75 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/stratholme.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/stratholme.cpp @@ -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; - } - - void Aggro(Unit* who) - { + Tagger = 0; + Die_Timer = 5000; + Tagged = false; } - 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; - } - - void Aggro(Unit* who) - { + Tagged = false; } - 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->RegisterSelf(); - - newscript = new Script; - newscript->Name="mob_restless_soul"; - newscript->GetAI = GetAI_mob_restless_soul; + newscript->Name = "go_gauntlet_gate"; + newscript->pGOHello = &GOHello_go_gauntlet_gate; 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->Name = "mob_freed_soul"; + newscript->GetAI = &GetAI_mob_freed_soul; newscript->RegisterSelf(); newscript = new Script; - newscript->Name="mob_mindless_skeleton"; - newscript->GetAI = GetAI_mob_mindless_skeleton; + newscript->Name = "mob_restless_soul"; + newscript->GetAI = &GetAI_mob_restless_soul; newscript->RegisterSelf(); newscript = new Script; - newscript->Name="mob_thuzadin_acolyte"; - newscript->GetAI = GetAI_mob_thuzadin_acolyte; + newscript->Name = "mobs_spectral_ghostly_citizen"; + newscript->GetAI = &GetAI_mobs_spectral_ghostly_citizen; + newscript->pReceiveEmote = &ReciveEmote_mobs_spectral_ghostly_citizen; newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp index 24ce8dc4a91..b809716c2b9 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp @@ -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_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_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_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(); } }; diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp index f63f9b5b548..2f213a52afd 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp @@ -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 - -#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 +//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 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; diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp index 98b0bd443b1..13870423d36 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/instance_sunwell_plateau.cpp @@ -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]; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp index 8afd498f699..44cc198e963 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp @@ -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; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp index 754c316313f..d5ac594f6d7 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp @@ -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) ) diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/def_arcatraz.h b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/def_arcatraz.h index e175194e936..34daa29a26e 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/def_arcatraz.h +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/def_arcatraz.h @@ -16,4 +16,5 @@ #define TYPE_WARDEN_5 9 #define DATA_MELLICHAR 10 #define TYPE_SHIELD_OPEN 11 +#define DATA_SPHERE_SHIELD 12 #endif diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/instance_arcatraz.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/instance_arcatraz.cpp index 857928936e8..dd9446f08d6 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/instance_arcatraz.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/instance_arcatraz.cpp @@ -34,9 +34,11 @@ EndScriptData */ #define POD_GAMMA 183962 //pod fourth boss wave #define POD_OMEGA 183965 //pod fifth boss wave #define WARDENS_SHIELD 184802 // warden shield +#define SEAL_SPHERE 184802 //shield 'protecting' mellichar #define MELLICHAR 20904 //skyriss will kill this unit + /* Arcatraz encounters: 1 - Zereketh the Unbound event 2 - Dalliah the Doomsayer event @@ -46,7 +48,7 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance { - instance_arcatraz(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_arcatraz(Map *map) : ScriptedInstance(map) {Initialize();}; uint32 Encounter[ENCOUNTERS]; @@ -59,7 +61,8 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance GameObject *Pod_Omega; GameObject *Wardens_Shield; - uint64 Mellichar; + uint64 GoSphereGUID; + uint64 MellicharGUID; void Initialize() { @@ -72,7 +75,8 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance Pod_Omega = NULL; Wardens_Shield = NULL; - Mellichar = 0; + GoSphereGUID = 0; + MellicharGUID = 0; for(uint8 i = 0; i < ENCOUNTERS; i++) Encounter[i] = NOT_STARTED; @@ -81,7 +85,8 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance bool IsEncounterInProgress() const { for(uint8 i = 0; i < ENCOUNTERS; i++) - if(Encounter[i]) return true; + if(Encounter[i]) + return true; return false; } @@ -92,23 +97,20 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance { case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: Containment_Core_Security_Field_Alpha = go; break; case CONTAINMENT_CORE_SECURITY_FIELD_BETA: Containment_Core_Security_Field_Beta = go; break; + case SEAL_SPHERE: GoSphereGUID = go->GetGUID(); break; case POD_ALPHA: Pod_Alpha = go; break; case POD_BETA: Pod_Beta = go; break; case POD_DELTA: Pod_Delta = go; break; case POD_GAMMA: Pod_Gamma = go; break; case POD_OMEGA: Pod_Omega = go; break; - case WARDENS_SHIELD: Wardens_Shield = go; break; + //case WARDENS_SHIELD: Wardens_Shield = go; break; } } void OnCreatureCreate(Creature *creature, uint32 creature_entry) { - switch(creature_entry) - { - case MELLICHAR: - Mellichar = creature->GetGUID(); - break; - } + if (creature->GetEntry() == MELLICHAR) + MellicharGUID = creature->GetGUID(); } void SetData(uint32 type, uint32 data) @@ -188,9 +190,9 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance } } - uint32 GetData(uint32 data) + uint32 GetData(uint32 type) { - switch(data) + switch(type) { case TYPE_HARBINGERSKYRISS: return Encounter[3]; @@ -208,12 +210,14 @@ struct TRINITY_DLL_DECL instance_arcatraz : public ScriptedInstance return 0; } - uint64 GetData64(uint32 identifier) + uint64 GetData64(uint32 data) { - switch(identifier) + switch(data) { case DATA_MELLICHAR: - return Mellichar; + return MellicharGUID; + case DATA_SPHERE_SHIELD: + return GoSphereGUID; } return 0; } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_high_botanist_freywinn.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_high_botanist_freywinn.cpp index 334fdf07b98..a59bd649044 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_high_botanist_freywinn.cpp @@ -23,21 +23,12 @@ EndScriptData */ #include "precompiled.h" -#define SAY_AGGRO "What are you doing? These specimens are very delicate!" -#define SOUND_AGGRO 11144 - -#define SAY_KILL_1 "Your life cycle is now concluded!" -#define SOUND_KILL_1 11145 -#define SAY_KILL_2 "You will feed the worms." -#define SOUND_KILL_2 11146 - -#define SAY_TREE_1 "Endorel aluminor!" -#define SOUND_TREE_1 11147 -#define SAY_TREE_2 "Nature bends to my will!" -#define SOUND_TREE_2 11148 - -#define SAY_DEATH "The specimens...must be preserved." -#define SOUND_DEATH 11149 +#define SAY_AGGRO -1553000 +#define SAY_KILL_1 -1553001 +#define SAY_KILL_2 -1553002 +#define SAY_TREE_1 -1553003 +#define SAY_TREE_2 -1553004 +#define SAY_DEATH -1553005 #define SPELL_TRANQUILITY 34550 #define SPELL_TREE_FORM 34551 @@ -75,8 +66,7 @@ struct TRINITY_DLL_DECL boss_high_botanist_freywinnAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); + DoScriptText(SAY_AGGRO, m_creature); } void JustSummoned(Creature *summoned) @@ -100,17 +90,16 @@ struct TRINITY_DLL_DECL boss_high_botanist_freywinnAI : 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* Killer) + { + DoScriptText(SAY_DEATH, m_creature); + } + void UpdateAI(const uint32 diff) { if( !m_creature->SelectHostilTarget() || !m_creature->getVictim() ) @@ -120,14 +109,8 @@ struct TRINITY_DLL_DECL boss_high_botanist_freywinnAI : public ScriptedAI { switch(rand()%2) { - case 0: - DoYell(SAY_TREE_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_TREE_1); - break; - case 1: - DoYell(SAY_TREE_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_TREE_2); - break; + case 0: DoScriptText(SAY_TREE_1, m_creature); break; + case 1: DoScriptText(SAY_TREE_2, m_creature); break; } if( m_creature->IsNonMeleeSpellCasted(false) ) diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp index 09a237f53cf..af2e4488b3c 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp @@ -16,13 +16,15 @@ /* ScriptData SDName: Boss_Laj -SD%Complete: 95 -SDComment: Immunities _may_ be applied by spells, but this has _not_ been confirmed to be proper way. Most spells require database support. +SD%Complete: 90 +SDComment: Immunities are wrong, must be adjusted to use resistance from creature_templates. Most spells require database support. SDCategory: Tempest Keep, The Botanica EndScriptData */ #include "precompiled.h" +#define EMOTE_SUMMON -1553006 + #define SPELL_ALLERGIC_REACTION 34697 #define SPELL_TELEPORT_SELF 34673 @@ -35,8 +37,6 @@ EndScriptData */ #define SPELL_SUMMON_LASHER_4 34688 #define SPELL_SUMMON_FLAYER_3 34690 -#define EMOTE_SUMMON "emits a strange noise." - #define MODEL_DEFAULT 13109 #define MODEL_ARCANE 14213 #define MODEL_FIRE 13110 @@ -153,7 +153,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI { if( Summon_Timer < diff ) { - DoTextEmote(EMOTE_SUMMON,NULL); + DoScriptText(EMOTE_SUMMON, m_creature); DoSummons(); Summon_Timer = 2500; }else Summon_Timer -= diff; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp index f0dc111e896..5d60d49a2e3 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp @@ -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 @@ -54,7 +54,6 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI void UpdateAI(const uint32 diff) { - //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; @@ -67,6 +66,13 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI # boss_warp_splinter #####*/ +#define SAY_AGGRO -1553007 +#define SAY_SLAY_1 -1553008 +#define SAY_SLAY_2 -1553009 +#define SAY_SUMMON_1 -1553010 +#define SAY_SUMMON_2 -1553011 +#define SAY_DEATH -1553012 + #define WAR_STOMP 34716 #define SUMMON_TREANTS 34727 // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon) #define ARCANE_VOLLEY 36705 //37078, 34785 //must additional script them (because Splinter eats them after 20 sec ^) @@ -74,22 +80,6 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI #define CREATURE_TREANT 19949 -#define SAY_COMBAT_START "Who disturbs this sanctuary?" -#define SOUND_COMBAT_START 11230 - -#define SAY_SLAY_1 "You must die! But wait: this does not-- No, no... you must die!" -#define SOUND_SLAY_1 11231 -#define SAY_SLAY_2 "What am I doing? Why do I..." -#define SOUND_SLAY_2 11232 - -#define SAY_SUMMON_1 "Children, come to me!" -#define SOUND_SUMMON_1 11233 -#define SAY_SUMMON_2 "Maybe this is not-- No, we fight! Come to my aid." -#define SOUND_SUMMON_2 11234 - -#define SAY_DEATH "So... confused. Do not... belong here!" -#define SOUND_DEATH 11235 - #define TREANT_SPAWN_DIST 50 //50 yards from Warp Splinter's spawn point float treant_pos[6][3] = @@ -121,12 +111,8 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI float Treant_Spawn_Pos_X; float Treant_Spawn_Pos_Y; - bool InCombat; - void Reset() { - InCombat = false; - War_Stomp_Timer = 25000 + rand()%15000; Summon_Treants_Timer = 45000; Arcane_Volley_Timer = 8000 + rand()%12000; @@ -141,32 +127,21 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_COMBAT_START,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_COMBAT_START); - InCombat = true; + DoScriptText(SAY_AGGRO, m_creature); } - // On Killed Unit void KilledUnit(Unit* victim) { switch(rand()%2) { - case 0: - DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_1); - break; - case 1: - DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_2); - break; + case 0: DoScriptText(SAY_SLAY_1, m_creature); break; + case 1: DoScriptText(SAY_SLAY_2, m_creature); break; } } - // On Death void JustDied(Unit* Killer) { - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); } void SummonTreants() @@ -192,14 +167,8 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI } switch(rand()%2) { - case 0: - DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SUMMON_1); - break; - case 1: - DoYell(SAY_SUMMON_2,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SUMMON_2); - break; + case 0: DoScriptText(SAY_SUMMON_1, m_creature); break; + case 1: DoScriptText(SAY_SUMMON_2, m_creature); break; } } @@ -227,50 +196,36 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI void UpdateAI(const uint32 diff) { - //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; //Check for War Stomp if(War_Stomp_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),WAR_STOMP); - - //Cast again on time War_Stomp_Timer = 25000 + rand()%15000; - } - else War_Stomp_Timer -= diff; + }else War_Stomp_Timer -= diff; //Check for Arcane Volley if(Arcane_Volley_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),ARCANE_VOLLEY); - - //Cast again on time Arcane_Volley_Timer = 20000 + rand()%15000; - } - else Arcane_Volley_Timer -= diff; + }else Arcane_Volley_Timer -= diff; //Check for Summon Treants if(Summon_Treants_Timer < diff) { SummonTreants(); - - //Cast again on time Summon_Treants_Timer = 45000; - } - else Summon_Treants_Timer -= diff; + }else Summon_Treants_Timer -= diff; // I check if there is a Treant in Warp Splinter's LOS, so he can eat them if( CheckTreantLOS_Timer < diff) { EatTreant(); - CheckTreantLOS_Timer = 1000; - } - else CheckTreantLOS_Timer -= diff; + }else CheckTreantLOS_Timer -= diff; DoMeleeAttackIfReady(); } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp index 9e93eac4693..94b8651d897 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp @@ -15,7 +15,7 @@ */ /* ScriptData -SDName: boss_astromancer +SDName: Boss_Astromancer SD%Complete: 75 SDComment: SDCategory: Tempest Keep, The Eye @@ -24,6 +24,16 @@ EndScriptData */ #include "precompiled.h" #include "def_the_eye.h" +#define SAY_AGGRO -1550007 +#define SAY_SUMMON1 -1550008 +#define SAY_SUMMON2 -1550009 +#define SAY_KILL1 -1550010 +#define SAY_KILL2 -1550011 +#define SAY_KILL3 -1550012 +#define SAY_DEATH -1550013 +#define SAY_VOIDA -1550014 +#define SAY_VOIDB -1550015 + #define SPELL_ARCANE_MISSILES 33031 #define SPELL_MARK_OF_THE_ASTROMANCER 33045 #define MARK_OF_SOLARIAN 33023 @@ -31,27 +41,6 @@ EndScriptData */ #define SPELL_FEAR 29321 #define SPELL_VOID_BOLT 39329 -#define SAY_PHASE1 "Tal anu'men no Sin'dorei!" -#define SOUND_PHASE1 11134 -#define SAY_PHASE2 "I will crush your delusions of grandeur!" -#define SOUND_PHASE2 11140 -#define SAY_PHASE21 "Ha ha ha! You are hopelessly outmatched!" -#define SOUND_PHASE21 11139 - -#define SAY_VOID "Enough of this! Now I call upon the fury of the cosmos itself." -//#define SOUND_VOID Not found :( -#define SAY_VOID1 "I become ONE... with the VOID!" -//#define SOUND_VOID1 Not found :( - -#define SAY_KILL1 "Your soul belongs to the Abyss!" -#define SOUND_KILL1 11136 -#define SAY_KILL2 "By the blood of the Highborne!" -#define SOUND_KILL2 11137 -#define SAY_KILL3 "For the Sunwell!" -#define SOUND_KILL3 11138 -#define SAY_DEATH "The warmth of the sun... awaits." -#define SOUND_DEATH 11135 - #define CENTER_X 432.909f #define CENTER_Y -373.424f #define CENTER_Z 17.9608f @@ -139,8 +128,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI void StartEvent() { - DoYell(SAY_PHASE1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE1); + DoScriptText(SAY_AGGRO, m_creature); if(pInstance) pInstance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS); @@ -150,18 +138,9 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI { switch(rand()%3) { - case 0: - DoYell(SAY_KILL1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_KILL1); - break; - case 1: - DoYell(SAY_KILL2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_KILL2); - break; - case 2: - DoYell(SAY_KILL3, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_KILL3); - break; + case 0: DoScriptText(SAY_KILL1, m_creature); break; + case 1: DoScriptText(SAY_KILL2, m_creature); break; + case 2: DoScriptText(SAY_KILL3, m_creature); break; } } @@ -169,8 +148,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI { m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN); - DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE); @@ -186,9 +164,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI Creature* Summoned = m_creature->SummonCreature(entry, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); if(Summoned) { - Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); - if(target) - Summoned->AI()->AttackStart(target); + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + Summoned->AI()->AttackStart(target); } } @@ -223,18 +200,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI { AppearDelay = false; if (Phase == 2) - { - switch (rand()%2) - { - case 0: - DoYell(SAY_PHASE2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE2); - break; - case 1: - DoYell(SAY_PHASE21, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE21); - break; - } + { m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetVisibility(VISIBILITY_OFF); } @@ -305,9 +271,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI if (MarkOfTheAstromancer_Timer < diff) { //A debuff that lasts for 5 seconds, cast several times each phase on a random raid member, but not the main tank - Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1); - - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1)) { DoCast(target, SPELL_MARK_OF_THE_ASTROMANCER); @@ -381,6 +345,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI for (int i=0; i<=2; i++) for (int j=1; j<=4; j++) SummonMinion(SOLARIUM_AGENT, Portals[i][0], Portals[i][1], Portals[i][2]); + + DoScriptText(SAY_SUMMON1, m_creature); Phase2_Timer = 10000; } else Phase2_Timer -= diff; } @@ -403,8 +369,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetVisibility(VISIBILITY_ON); - DoYell(SAY_PHASE1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE1); + DoScriptText(SAY_SUMMON2, m_creature); AppearDelay = true; Phase3_Timer = 15000; }else Phase3_Timer -= diff; @@ -434,16 +399,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI //To make sure she wont be invisible or not selecatble m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetVisibility(VISIBILITY_ON); - switch(rand()%2) - { - case 0: - DoYell(SAY_VOID, LANG_UNIVERSAL, NULL); - break; - case 1: - DoYell(SAY_VOID1, LANG_UNIVERSAL, NULL); - break; - } - + DoScriptText(SAY_VOIDA, m_creature); + DoScriptText(SAY_VOIDB, m_creature); m_creature->SetArmor(WV_ARMOR); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_VOIDWALKER); m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize*2.5f); diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp index bf1ed32c937..7f649b30495 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp @@ -25,6 +25,44 @@ EndScriptData */ #include "def_the_eye.h" #include "WorldPacket.h" + //kael'thas Speech +#define SAY_INTRO -1550016 +#define SAY_INTRO_CAPERNIAN -1550017 +#define SAY_INTRO_TELONICUS -1550018 +#define SAY_INTRO_THALADRED -1550019 +#define SAY_INTRO_SANGUINAR -1550020 +#define SAY_PHASE2_WEAPON -1550021 +#define SAY_PHASE3_ADVANCE -1550022 +#define SAY_PHASE4_INTRO2 -1550023 +#define SAY_PHASE5_NUTS -1550024 +#define SAY_SLAY1 -1550025 +#define SAY_SLAY2 -1550026 +#define SAY_SLAY3 -1550027 +#define SAY_MINDCONTROL1 -1550028 +#define SAY_MINDCONTROL2 -1550029 +#define SAY_GRAVITYLAPSE1 -1550030 +#define SAY_GRAVITYLAPSE2 -1550031 +#define SAY_SUMMON_PHOENIX1 -1550032 +#define SAY_SUMMON_PHOENIX2 -1550033 +#define SAY_DEATH -1550034 + +//Thaladred the Darkener speech +#define SAY_THALADRED_AGGRO -1550035 +#define SAY_THALADRED_DEATH -1550036 +#define EMOTE_THALADRED_GAZE -1550037 + +//Lord Sanguinar speech +#define SAY_SANGUINAR_AGGRO -1550038 +#define SAY_SANGUINAR_DEATH -1550039 + +//Grand Astromancer Capernian speech +#define SAY_CAPERNIAN_AGGRO -1550040 +#define SAY_CAPERNIAN_DEATH -1550041 + +//Master Engineer Telonicus speech +#define SAY_TELONICUS_AGGRO -1550042 +#define SAY_TELONICUS_DEATH -1550043 + //Phase 2 spells (Not used) #define SPELL_SUMMON_WEAPONS 36976 #define SPELL_SUMMON_WEAPONA 36958 @@ -36,6 +74,7 @@ EndScriptData */ #define SPELL_SUMMON_WEAPONG 36964 #define SPELL_RES_VISUAL 24171 #define SPELL_WEAPON_SPAWN 41236 + //Phase 4 spells #define SPELL_FIREBALL 22088 //wrong but works with CastCustomSpell #define SPELL_PYROBLAST 36819 @@ -46,6 +85,7 @@ EndScriptData */ #define SPELL_SHOCK_BARRIER 36815 #define SPELL_PHOENIX_ANIMATION 36723 #define SPELL_MIND_CONTROL 32830 + //Phase 5 spells #define SPELL_EXPLODE 36092 #define SPELL_FULLPOWER 36187 @@ -53,103 +93,31 @@ EndScriptData */ #define SPELL_GRAVITY_LAPSE 34480 #define SPELL_GRAVITY_LAPSE_AURA 39432 #define SPELL_NETHER_BEAM 35873 + //Thaladred the Darkener spells #define SPELL_PSYCHIC_BLOW 10689 #define SPELL_SILENCE 30225 + //Lord Sanguinar spells #define SPELL_BELLOWING_ROAR 40636 + //Grand Astromancer Capernian spells #define CAPERNIAN_DISTANCE 20 //she casts away from the target #define SPELL_CAPERNIAN_FIREBALL 36971 #define SPELL_CONFLAGRATION 37018 #define SPELL_ARCANE_EXPLOSION 36970 + //Master Engineer Telonicus spells #define SPELL_BOMB 37036 #define SPELL_REMOTE_TOY 37027 + //Nether Vapor spell #define SPELL_NETHER_VAPOR 35859 -//Phoenix spell -#define SPELL_BURN 36721 - -//kael'thas Speech -#define SAY_INTRO "Energy. Power. My people are addicted to it... a dependence made manifest after the Sunwell was destroyed. Welcome... to the future. A pity you are too late to stop it. No one can stop me now! Selama ashal'anore!" -#define SOUND_INTRO 11256 - -#define SAY_ASTROMANCER_CAPERNIAN "Capernian will see to it that your stay here is a short one." -#define SOUND_ASTROMANCER_CAPERNIAN 11257 - -#define SAY_ENGINEER_TELONICUS "Well done, you have proven worthy to test your skills against my master engineer, Telonicus." -#define SOUND_ENGINEER_TELONICUS 11258 - -#define SAY_THALADRED_THE_DARKENER "Let us see how your nerves hold up against the Darkener, Thaladred" -#define SOUND_THALADRED_THE_DARKENER 11259 - -#define SAY_LORD_SANGUINAR "You have persevered against some of my best advisors... but none can withstand the might of the Blood Hammer. Behold, Lord Sanguinar!" -#define SOUND_LORD_SANGUINAR 11260 - -#define SAY_PHASE2 "As you see, I have many weapons in my arsenal...." -#define SOUND_PHASE2 11261 - -#define SAY_PHASE3 "Perhaps I underestimated you. It would be unfair to make you fight all four advisors at once, but... fair treatment was never shown to my people. I'm just returning the favor." -#define SOUND_PHASE3 11262 - -#define SAY_PHASE4 "Alas, sometimes one must take matters into one's own hands. Balamore shanal!" -#define SOUND_PHASE4 11263 - -#define SAY_PHASE5 "I have not come this far to be stopped! The future I have planned will not be jeopardized! Now you will taste true power!!" -#define SOUND_PHASE5 11273 -#define SAY_SLAY1 "You will not prevail." -#define SOUND_SLAY1 11270 - -#define SAY_SLAY2 "You gambled...and lost." -#define SOUND_SLAY2 11271 - -#define SAY_MINDCONTROL1 "Obey me." -#define SOUND_MINDCONTROL1 11268 - -#define SAY_MINDCONTROL2 "Bow to my will." -#define SOUND_MINDCONTROL2 11269 - -#define SAY_GRAVITYLAPSE1 "Let us see how you fare when your world is turned upside down." -#define SOUND_GRAVITYLAPSE1 11264 - -#define SAY_GRAVITYLAPSE2 "Having trouble staying grounded?" -#define SOUND_GRAVITYLAPSE2 11265 - -#define SAY_SUMMON_PHOENIX1 "Anara'nel belore!" -#define SOUND_SUMMON_PHOENIX1 11267 - -#define SAY_SUMMON_PHOENIX2 "By the power of the sun!" -#define SOUND_SUMMON_PHOENIX2 11266 - -#define SAY_DEATH "For...Quel...thalas!" -#define SOUND_DEATH 11274 - -//Thaladred the Darkener speech -#define SAY_THALADRED_AGGRO "Prepare yourselves!" -#define SOUND_THALADRED_AGGRO 11203 -#define SAY_THALADRED_DEATH "Forgive me, my prince! I have... failed." -#define SOUND_THALADRED_DEATH 11204 -#define EMOTE_THALADRED_GAZE "sets his gaze on $N!" - -//Lord Sanguinar speech -#define SAY_SANGUINAR_AGGRO "Blood for blood!" -#define SOUND_SANGUINAR_AGGRO 11152 -#define SAY_SANGUINAR_DEATH "NO! I ...will... not..." -#define SOUND_SANGUINAR_DEATH 11153 - -//Grand Astromancer Capernian speech -#define SAY_CAPERNIAN_AGGRO "The sin'dore reign supreme!" -#define SOUND_CAPERNIAN_AGGRO 11117 -#define SAY_CAPERNIAN_DEATH "This is not over!" -#define SOUND_CAPERNIAN_DEATH 11118 - -//Master Engineer Telonicus speech -#define SAY_TELONICUS_AGGRO "Anar'alah belore!" -#define SOUND_TELONICUS_AGGRO 11157 -#define SAY_TELONICUS_DEATH "More perils... await" -#define SOUND_TELONICUS_DEATH 11158 +//Phoenix spell +#define SPELL_BURN 36720 +#define SPELL_EMBER_BLAST 34341 +#define SPELL_REBIRTH 41587 //Creature IDs #define PHOENIX 21362 @@ -159,9 +127,6 @@ EndScriptData */ #define PHOENIX_MODEL 19682 #define PHOENIX_EGG_MODEL 20245 -//#define PI 3.141592 -#define TEMP_MC_WHISPER "[SD2 Debug] You would be mind controlled here!" - //weapon id + position float KaelthasWeapons[7][5] = { @@ -283,21 +248,23 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI void UpdateAI(const uint32 diff) { if (DelayRes_Timer) + { if (DelayRes_Timer <= diff) - { - DelayRes_Timer = 0; - FakeDeath = false; - - Unit* Target = Unit::GetUnit((*m_creature), DelayRes_Target); - if (!Target)Target = m_creature->getVictim(); - DoResetThreat(); - AttackStart(Target); - m_creature->GetMotionMaster()->Clear(); - m_creature->GetMotionMaster()->MoveChase(Target); - m_creature->AddThreat(Target, 0.0f); - }else DelayRes_Timer -= diff; - } - + { + DelayRes_Timer = 0; + FakeDeath = false; + + Unit* Target = Unit::GetUnit((*m_creature), DelayRes_Target); + if (!Target) + Target = m_creature->getVictim(); + DoResetThreat(); + AttackStart(Target); + m_creature->GetMotionMaster()->Clear(); + m_creature->GetMotionMaster()->MoveChase(Target); + m_creature->AddThreat(Target, 0.0f); + }else DelayRes_Timer -= diff; + } + } }; //Kael'thas AI @@ -395,8 +362,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI error_log("SD2: Kael'Thas One or more advisors missing, Skipping Phases 1-3"); DoYell("SD2: Kael'Thas One or more advisors missing, Skipping Phases 1-3", LANG_UNIVERSAL, NULL); - DoYell(SAY_PHASE4, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE4); + DoScriptText(SAY_PHASE4_INTRO2, m_creature); Phase = 4; pInstance->SetData(DATA_KAELTHASEVENT, 4); @@ -407,15 +373,13 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Unit *target = NULL; target = SelectUnit(SELECT_TARGET_RANDOM, 0); if(target) - { AttackStart(target); } - }else + else { PrepareAdvisors(); - DoYell(SAY_INTRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_INTRO); + DoScriptText(SAY_INTRO, m_creature); pInstance->SetData(DATA_KAELTHASEVENT, IN_PROGRESS); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -428,16 +392,11 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI void KilledUnit() { - switch(rand()%2) + 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 0: DoScriptText(SAY_SLAY1, m_creature); break; + case 1: DoScriptText(SAY_SLAY2, m_creature); break; + case 2: DoScriptText(SAY_SLAY3, m_creature); break; } } @@ -446,8 +405,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_KAELTHASEVENT, DONE); @@ -510,8 +468,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI case 0: if(Phase_Timer < diff) { - DoYell(SAY_THALADRED_THE_DARKENER, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_THALADRED_THE_DARKENER); + DoScriptText(SAY_INTRO_THALADRED, m_creature); //start advisor within 7 seconds Phase_Timer = 7000; @@ -545,8 +502,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[0])); if(Advisor && (Advisor->GetUInt32Value(UNIT_FIELD_BYTES_1) == PLAYER_STATE_DEAD)) { - DoYell(SAY_LORD_SANGUINAR, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_LORD_SANGUINAR); + DoScriptText(SAY_INTRO_SANGUINAR, m_creature); //start advisor within 12.5 seconds Phase_Timer = 12500; @@ -580,8 +536,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[1])); if(Advisor && (Advisor->GetUInt32Value(UNIT_FIELD_BYTES_1) == PLAYER_STATE_DEAD)) { - DoYell(SAY_ASTROMANCER_CAPERNIAN, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_ASTROMANCER_CAPERNIAN); + DoScriptText(SAY_INTRO_CAPERNIAN, m_creature); //start advisor within 7 seconds Phase_Timer = 7000; @@ -615,8 +570,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Advisor = (Creature*)(Unit::GetUnit((*m_creature), AdvisorGuid[2])); if(Advisor && (Advisor->GetUInt32Value(UNIT_FIELD_BYTES_1) == PLAYER_STATE_DEAD)) { - DoYell(SAY_ENGINEER_TELONICUS, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_ENGINEER_TELONICUS); + DoScriptText(SAY_INTRO_TELONICUS, m_creature); //start advisor within 8.4 seconds Phase_Timer = 8400; @@ -655,8 +609,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Phase = 2; pInstance->SetData(DATA_KAELTHASEVENT, 2); - DoYell(SAY_PHASE2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE2); + DoScriptText(SAY_PHASE2_WEAPON, m_creature); PhaseSubphase = 0; Phase_Timer = 3500; DoCast(m_creature, SPELL_SUMMON_WEAPONS); @@ -702,8 +655,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI if (PhaseSubphase == 2) if (Phase_Timer < diff) { - DoYell(SAY_PHASE3, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE3); + DoScriptText(SAY_PHASE3_ADVANCE, m_creature); pInstance->SetData(DATA_KAELTHASEVENT, 3); Phase = 3; PhaseSubphase = 0; @@ -732,8 +684,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI if(Phase_Timer < diff) { - DoYell(SAY_PHASE4, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE4); + DoScriptText(SAY_PHASE4_INTRO2, m_creature); Phase = 4; pInstance->SetData(DATA_KAELTHASEVENT, 4); @@ -741,9 +692,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - Unit *target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM, 0); - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) { AttackStart(target); } @@ -796,8 +745,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI if (FlameStrike_Timer < diff) { - Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(pUnit, SPELL_FLAME_STRIKE); + if (Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pUnit, SPELL_FLAME_STRIKE); FlameStrike_Timer = 30000; }FlameStrike_Timer -= diff; @@ -830,14 +779,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI switch(rand()%2) { - case 0: - DoYell(SAY_SUMMON_PHOENIX1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SUMMON_PHOENIX1); - break; - case 1: - DoYell(SAY_SUMMON_PHOENIX2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SUMMON_PHOENIX2); - break; + case 0: DoScriptText(SAY_SUMMON_PHOENIX1, m_creature); break; + case 1: DoScriptText(SAY_SUMMON_PHOENIX2, m_creature); break; } Phoenix_Timer = 60000; @@ -852,8 +795,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI Phase = 5; Phase_Timer = 10000; - DoYell(SAY_PHASE5, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_PHASE5); + DoScriptText(SAY_PHASE5_NUTS, m_creature); m_creature->StopMoving(); m_creature->GetMotionMaster()->Clear(); @@ -903,9 +845,6 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); Phase = 6; AttackStart(m_creature->getVictim()); - m_creature->GetMotionMaster()->Clear(); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); - }else Phase_Timer -= diff; } @@ -945,15 +884,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI case 1: switch(rand()%2) { - case 0: - DoYell(SAY_GRAVITYLAPSE1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_GRAVITYLAPSE1); - break; - - case 1: - DoYell(SAY_GRAVITYLAPSE2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_GRAVITYLAPSE2); - break; + case 0: DoScriptText(SAY_GRAVITYLAPSE1, m_creature); break; + case 1: DoScriptText(SAY_GRAVITYLAPSE2, m_creature); break; } // 2) At that point he will put a Gravity Lapse debuff on everyone @@ -1009,8 +941,6 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI GravityLapse_Timer = 60000; GravityLapse_Phase = 0; AttackStart(m_creature->getVictim()); - m_creature->GetMotionMaster()->Clear(); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); DoResetThreat(); break; } @@ -1029,8 +959,8 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI //NetherBeam_Timer if(NetherBeam_Timer < diff) { - Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0); - DoCast(pUnit, SPELL_NETHER_BEAM); + if (Unit* pUnit = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pUnit, SPELL_NETHER_BEAM); NetherBeam_Timer = 4000; }else NetherBeam_Timer -= diff; @@ -1064,9 +994,8 @@ struct TRINITY_DLL_DECL boss_thaladred_the_darkenerAI : public advisorbase_ai void JustDied(Unit* pKiller) { - DoPlaySoundToSet(m_creature, SOUND_THALADRED_DEATH); - DoYell(SAY_THALADRED_DEATH, LANG_UNIVERSAL, NULL); - } + DoScriptText(SAY_THALADRED_DEATH, m_creature); + } void Aggro(Unit *who) { @@ -1076,8 +1005,7 @@ struct TRINITY_DLL_DECL boss_thaladred_the_darkenerAI : public advisorbase_ai if (!who || FakeDeath) return; - DoYell(SAY_THALADRED_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_THALADRED_AGGRO); + DoScriptText(SAY_THALADRED_AGGRO, m_creature); m_creature->AddThreat(who, 5000000.0f); } @@ -1096,13 +1024,11 @@ struct TRINITY_DLL_DECL boss_thaladred_the_darkenerAI : public advisorbase_ai //Gaze_Timer if(Gaze_Timer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM, 0); - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) { DoResetThreat(); m_creature->AddThreat(target, 5000000.0f); - DoTextEmote(EMOTE_THALADRED_GAZE, target); + DoScriptText(EMOTE_THALADRED_GAZE, m_creature, target); Gaze_Timer = 8500; } }else Gaze_Timer -= diff; @@ -1140,8 +1066,7 @@ struct TRINITY_DLL_DECL boss_lord_sanguinarAI : public advisorbase_ai void JustDied(Unit* Killer) { - DoPlaySoundToSet(m_creature, SOUND_SANGUINAR_DEATH); - DoYell(SAY_SANGUINAR_DEATH, LANG_UNIVERSAL, NULL); + DoScriptText(SAY_SANGUINAR_DEATH, m_creature); } void Aggro(Unit *who) @@ -1152,8 +1077,7 @@ struct TRINITY_DLL_DECL boss_lord_sanguinarAI : public advisorbase_ai if (!who || FakeDeath) return; - DoYell(SAY_SANGUINAR_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SANGUINAR_AGGRO); + DoScriptText(SAY_SANGUINAR_AGGRO, m_creature); } void UpdateAI(const uint32 diff) @@ -1203,8 +1127,7 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_ void JustDied(Unit* pKiller) { - DoPlaySoundToSet(m_creature, SOUND_CAPERNIAN_DEATH); - DoYell(SAY_CAPERNIAN_DEATH, LANG_UNIVERSAL, NULL); + DoScriptText(SAY_CAPERNIAN_DEATH, m_creature); } void AttackStart(Unit* who) @@ -1251,13 +1174,14 @@ struct TRINITY_DLL_DECL boss_grand_astromancer_capernianAI : public advisorbase_ //Yell_Timer if(!Yell) + { if(Yell_Timer < diff) - { - DoYell(SAY_CAPERNIAN_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_CAPERNIAN_AGGRO); + { + DoScriptText(SAY_CAPERNIAN_AGGRO, m_creature); - Yell = true; - }else Yell_Timer -= diff; + Yell = true; + }else Yell_Timer -= diff; + } //Fireball_Timer if(Fireball_Timer < diff) @@ -1326,8 +1250,7 @@ struct TRINITY_DLL_DECL boss_master_engineer_telonicusAI : public advisorbase_ai void JustDied(Unit* pKiller) { - DoPlaySoundToSet(m_creature, SOUND_TELONICUS_DEATH); - DoYell(SAY_TELONICUS_DEATH, LANG_UNIVERSAL, NULL); + DoScriptText(SAY_TELONICUS_DEATH, m_creature); } void Aggro(Unit *who) @@ -1338,8 +1261,7 @@ struct TRINITY_DLL_DECL boss_master_engineer_telonicusAI : public advisorbase_ai if (!who || FakeDeath) return; - DoYell(SAY_TELONICUS_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_TELONICUS_AGGRO); + DoScriptText(SAY_TELONICUS_AGGRO, m_creature); } void UpdateAI(const uint32 diff) @@ -1364,10 +1286,7 @@ struct TRINITY_DLL_DECL boss_master_engineer_telonicusAI : public advisorbase_ai //RemoteToy_Timer if(RemoteToy_Timer < diff) { - Unit *target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM, 0); - - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_REMOTE_TOY); RemoteToy_Timer = 10000+rand()%5000; @@ -1428,92 +1347,95 @@ struct TRINITY_DLL_DECL mob_kael_flamestrikeAI : public ScriptedAI }; //Phoenix AI -struct TRINITY_DLL_DECL mob_phoenixAI : public ScriptedAI +struct TRINITY_DLL_DECL mob_phoenix_tkAI : public ScriptedAI { - mob_phoenixAI(Creature *c) : ScriptedAI(c) {Reset();} + mob_phoenix_tkAI(Creature *c) : ScriptedAI(c) {Reset();} - uint32 Burn_Timer; - uint32 Hatch_Timer; - uint32 EggVis_Timer; - bool IsEgg; + uint32 Cycle_Timer; void Reset() { - Burn_Timer = 1000; - Hatch_Timer = 15000; - EggVis_Timer = 0; - IsEgg = false; - m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, PHOENIX_MODEL); - } - - void Hatch() - { - IsEgg = false; - m_creature->SetHealth(m_creature->GetMaxHealth()); - m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, PHOENIX_MODEL); - Burn_Timer = 1000; - Hatch_Timer = 15000; - EggVis_Timer = 0; - AttackStart(m_creature->getVictim()); + Cycle_Timer = 2000; + m_creature->CastSpell(m_creature,SPELL_BURN,true); } - void DamageTaken(Unit* pKiller, uint32 &damage) - { - if (damage < m_creature->GetHealth()) - return; - - //Bird cannot die, only egg - if (!IsEgg) - { - //prevent death - damage = 0; - IsEgg = true; - - m_creature->GetMotionMaster()->Clear(); - m_creature->GetMotionMaster()->MoveIdle(); - m_creature->SetHealth(m_creature->GetMaxHealth()); - EggVis_Timer = 1000; - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,PLAYER_STATE_DEAD); - } - } + void Aggro(Unit *who) { } - void Aggro(Unit *who) - { - } + void JustDied(Unit* killer) + { + //is this spell in use anylonger? + //m_creature->CastSpell(m_creature,SPELL_EMBER_BLAST,true); + m_creature->SummonCreature(PHOENIX_EGG,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,16000); + } void UpdateAI(const uint32 diff) { - //Check if we have a current target - if (!IsEgg) - { - //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; - if (Burn_Timer < diff) - { - DoCast(m_creature->getVictim(), SPELL_BURN); - Burn_Timer = 1000; - }else Burn_Timer -= diff; + if (Cycle_Timer < diff) + { + //spell Burn should possible do this, but it doesn't, so do this for now. + uint32 dmg = urand(4500,5500); + if (m_creature->GetHealth() > dmg) + m_creature->SetHealth(uint32(m_creature->GetHealth()-dmg)); + Cycle_Timer = 2000; + }else Cycle_Timer -= diff; DoMeleeAttackIfReady(); } - else - { - if (EggVis_Timer) - if (EggVis_Timer <= diff) - { - m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, PHOENIX_EGG_MODEL); - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - EggVis_Timer = 0; - }else EggVis_Timer -= diff; - - if (Hatch_Timer < diff) - { - Hatch(); - }else Hatch_Timer -= diff; - } - } +}; + +//Phoenix Egg AI +struct TRINITY_DLL_DECL mob_phoenix_egg_tkAI : public ScriptedAI +{ + mob_phoenix_egg_tkAI(Creature *c) : ScriptedAI(c) {Reset();} + + uint32 Rebirth_Timer; + + void Reset() + { + Rebirth_Timer = 15000; + } + + //ignore any + void MoveInLineOfSight(Unit* who) { return; } + + void AttackStart(Unit* who) + { + if (m_creature->Attack(who, false)) + { + m_creature->SetInCombatWith(who); + who->SetInCombatWith(m_creature); + + if (!InCombat) + { + InCombat = true; + Aggro(who); + } + DoStartNoMovement(who); + } + } + + void Aggro(Unit *who) { } + + void JustSummoned(Creature* summoned) + { + summoned->AddThreat(m_creature->getVictim(), 0.0f); + summoned->CastSpell(summoned,SPELL_REBIRTH,false); + } + + void UpdateAI(const uint32 diff) + { + if (!Rebirth_Timer) + return; + + if (Rebirth_Timer <= diff) + { + m_creature->SummonCreature(PHOENIX,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(),m_creature->GetOrientation(),TEMPSUMMON_CORPSE_DESPAWN,5000); + Rebirth_Timer = 0; + }else Rebirth_Timer -= diff; + } }; CreatureAI* GetAI_boss_kaelthas(Creature *_Creature) @@ -1546,46 +1468,55 @@ CreatureAI* GetAI_mob_kael_flamestrike(Creature *_Creature) return new mob_kael_flamestrikeAI (_Creature); } -CreatureAI* GetAI_mob_phoenix(Creature *_Creature) +CreatureAI* GetAI_mob_phoenix_tk(Creature *_Creature) { - return new mob_phoenixAI (_Creature); + return new mob_phoenix_tkAI (_Creature); } +CreatureAI* GetAI_mob_phoenix_egg_tk(Creature *_Creature) +{ + return new mob_phoenix_egg_tkAI (_Creature); +} void AddSC_boss_kaelthas() { Script *newscript; newscript = new Script; newscript->Name="boss_kaelthas"; - newscript->GetAI = GetAI_boss_kaelthas; + newscript->GetAI = &GetAI_boss_kaelthas; newscript->RegisterSelf(); newscript = new Script; newscript->Name="boss_thaladred_the_darkener"; - newscript->GetAI = GetAI_boss_thaladred_the_darkener; + newscript->GetAI = &GetAI_boss_thaladred_the_darkener; newscript->RegisterSelf(); newscript = new Script; newscript->Name="boss_lord_sanguinar"; - newscript->GetAI = GetAI_boss_lord_sanguinar; + newscript->GetAI = &GetAI_boss_lord_sanguinar; newscript->RegisterSelf(); newscript = new Script; newscript->Name="boss_grand_astromancer_capernian"; - newscript->GetAI = GetAI_boss_grand_astromancer_capernian; + newscript->GetAI = &GetAI_boss_grand_astromancer_capernian; newscript->RegisterSelf(); newscript = new Script; newscript->Name="boss_master_engineer_telonicus"; - newscript->GetAI = GetAI_boss_master_engineer_telonicus; + newscript->GetAI = &GetAI_boss_master_engineer_telonicus; newscript->RegisterSelf(); newscript = new Script; newscript->Name= "mob_kael_flamestrike"; - newscript->GetAI = GetAI_mob_kael_flamestrike; + newscript->GetAI = &GetAI_mob_kael_flamestrike; newscript->RegisterSelf(); newscript = new Script; - newscript->Name="mob_phoenix"; - newscript->GetAI = GetAI_mob_phoenix; + newscript->Name="mob_phoenix_tk"; + newscript->GetAI = &GetAI_mob_phoenix_tk; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "mob_phoenix_egg_tk"; + newscript->GetAI = &GetAI_mob_phoenix_egg_tk; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp index de6335e79e3..23214410c57 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp @@ -16,35 +16,27 @@ /* ScriptData SDName: Boss_Void_Reaver -SD%Complete: 100 -SDComment: +SD%Complete: 90 +SDComment: Should reset if raid are out of room. SDCategory: Tempest Keep, The Eye EndScriptData */ #include "precompiled.h" #include "def_the_eye.h" +#define SAY_AGGRO -1550000 +#define SAY_SLAY1 -1550001 +#define SAY_SLAY2 -1550002 +#define SAY_SLAY3 -1550003 +#define SAY_DEATH -1550004 +#define SAY_POUNDING1 -1550005 +#define SAY_POUNDING2 -1550006 + #define SPELL_POUNDING 34162 #define SPELL_ARCANE_ORB 34172 #define SPELL_KNOCK_AWAY 25778 #define SPELL_BERSERK 27680 -#define SAY_AGGRO "Alert, you are marked for extermination!" -#define SAY_SLAY1 "Extermination, successful." -#define SAY_SLAY2 "Imbecile life form, no longer functional." -#define SAY_SLAY3 "Threat neutralized." -#define SAY_DEATH "Systems... shutting... down..." -#define SAY_POUNDING1 "Alternative measure commencing..." -#define SAY_POUNDING2 "Calculating force parameters..." - -#define SOUND_AGGRO 11213 -#define SOUND_SLAY1 11215 -#define SOUND_SLAY2 11216 -#define SOUND_SLAY3 11217 -#define SOUND_DEATH 11214 -#define SOUND_POUNDING1 11218 -#define SOUND_POUNDING2 11219 - struct TRINITY_DLL_DECL boss_void_reaverAI : public ScriptedAI { boss_void_reaverAI(Creature *c) : ScriptedAI(c) @@ -65,12 +57,12 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : public ScriptedAI m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); m_creature->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); - Pounding_Timer = 12000; + Pounding_Timer = 15000; ArcaneOrb_Timer = 3000; KnockAway_Timer = 30000; Berserk_Timer = 600000; - if(pInstance) + if (pInstance && m_creature->isAlive()) pInstance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED); } @@ -78,25 +70,15 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : 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 *victim) { - DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_VOIDREAVEREVENT, DONE); @@ -104,8 +86,7 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : 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_VOIDREAVEREVENT, IN_PROGRESS); @@ -123,22 +104,16 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : public ScriptedAI switch(rand()%2) { - case 0: - DoPlaySoundToSet(m_creature, SOUND_POUNDING1); - DoYell(SAY_POUNDING1, LANG_UNIVERSAL, NULL); - break; - case 1: - DoPlaySoundToSet(m_creature, SOUND_POUNDING2); - DoYell(SAY_POUNDING2, LANG_UNIVERSAL, NULL); - break; + case 0: DoScriptText(SAY_POUNDING1, m_creature); break; + case 1: DoScriptText(SAY_POUNDING2, m_creature); break; } - Pounding_Timer = 12000; + Pounding_Timer = 15000; //cast time(3000) + cooldown time(12000) }else Pounding_Timer -= diff; // Arcane Orb if(ArcaneOrb_Timer < diff) { - Unit *target; + Unit *target = NULL; std::list<HostilReference *> t_list = m_creature->getThreatManager().getThreatList(); std::vector<Unit *> target_list; for(std::list<HostilReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) @@ -153,7 +128,7 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : public ScriptedAI target = *(target_list.begin()+rand()%target_list.size()); if (target) - m_creature->CastSpell(target, SPELL_ARCANE_ORB, true); + DoCast(target, SPELL_ARCANE_ORB); ArcaneOrb_Timer = 3000; }else ArcaneOrb_Timer -= diff; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/instance_the_eye.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/instance_the_eye.cpp index 1fa1030a991..4d5a554b436 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/instance_the_eye.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/instance_the_eye.cpp @@ -35,7 +35,7 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_the_eye : public ScriptedInstance { - instance_the_eye(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_the_eye(Map *map) : ScriptedInstance(map) {Initialize();}; uint64 ThaladredTheDarkener; uint64 LordSanguinar; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp index 04f540fdcde..2e27edbf2d8 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp @@ -15,10 +15,23 @@ */ /* ScriptData -SDName: Boss Gatewatcher Gyrokill +SDName: Boss_Gatewatcher_Gyrokill SD%Complete: 0 SDComment: Place Holder SDCategory: Tempest Keep, The Mechanar EndScriptData */ #include "precompiled.h" + +#define SAY_AGGRO -1554000 +#define SAY_SAW_ATTACK1 -1554001 +#define SAY_SAW_ATTACK2 -1554002 +#define SAY_SLAY1 -1554003 +#define SAY_SLAY2 -1554004 +#define SAY_DEATH -1554005 + +#define SPELL_STREAM_OF_MACHINE_FLUID 35311 +#define SPELL_SAW_BLADE 35318 +#define H_SPELL_SAW_BLADE 39192 +#define SPELL_SHADOW_POWER 35322 +#define H_SPELL_SHADOW_POWER 39193
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp index dfc5d70bb42..28fa78e289d 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp @@ -15,40 +15,43 @@ */ /* ScriptData -SDName: Boss Gatewatcher Ironhand -SD%Complete: 100 +SDName: Boss_Gatewatcher_Ironhand +SD%Complete: 75 SDComment: SDCategory: Tempest Keep, The Mechanar EndScriptData */ #include "precompiled.h" +#define SAY_AGGRO_1 -1554006 +#define SAY_HAMMER_1 -1554007 +#define SAY_HAMMER_2 -1554008 +#define SAY_SLAY_1 -1554009 +#define SAY_SLAY_2 -1554010 +#define SAY_DEATH_1 -1554011 +#define EMOTE_HAMMER -1554012 + // Spells to be casted -#define SPELL_SHADOW_POWER 35322 -#define SPELL_JACKHAMMER 35326 -#define SPELL_STREAM_OF_MACHINE_FLUID 35311 - -#define SAY_SPELL_JACKHAMMER_1 "With the precise angle and velocity... " -#define SOUND_SPELL_JACKHAMMER_1 11112 -#define SAY_SPELL_JACKHAMMER_2 "Low tech yet quiet effective!" -#define SOUND_SPELL_JACKHAMMER_2 11113 -// On Aggro -#define SAY_AGGRO_1 "You have approximately five seconds to live." -#define SOUND_SAY_AGGRO_1 11109 - -//On Kill Unit -#define SAY_SLAY_1 "A foregone conclusion." -#define SOUND_SLAY_1 11110 -#define SAY_SLAY_2 "The processing will continue a schedule!" -#define SOUND_SLAY_2 11111 -// On Death -#define SAY_DEATH_1 "My calculations did not... " -#define SOUND_DEATH_1 11114 +#define SPELL_SHADOW_POWER 35322 +#define H_SPELL_SHADOW_POWER 39193 +#define SPELL_HAMMER_PUNCH 35326 +#define SPELL_JACKHAMMER 35327 +#define H_SPELL_JACKHAMMER 39194 +#define SPELL_STREAM_OF_MACHINE_FLUID 35311 // Gatewatcher Iron-Hand AI struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI { - boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) { Reset(); } +boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) +{ + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + HeroicMode = m_creature->GetMap()->IsHeroic(); + Reset(); +} + + ScriptedInstance *pInstance; + + bool HeroicMode; uint32 Shadow_Power_Timer; uint32 Jackhammer_Timer; @@ -63,9 +66,9 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI } void Aggro(Unit *who) { + DoScriptText(SAY_AGGRO_1, m_creature); } - // On Killed Unit void KilledUnit(Unit* victim) { if (rand()%2) @@ -73,24 +76,20 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI switch(rand()%2) { - case 0: - DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_1); - break; - - case 1: - DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_2); - break; + case 0: DoScriptText(SAY_SLAY_1, m_creature); break; + case 1: DoScriptText(SAY_SLAY_2, m_creature); break; } } - // On Death void JustDied(Unit* Killer) { - DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH_1); - } + DoScriptText(SAY_DEATH_1, m_creature); + + if (!pInstance) + return; + + //TODO: Add door check/open code + } void UpdateAI(const uint32 diff) { @@ -98,53 +97,41 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; - //Check for Shadow Power + //Shadow Power if(Shadow_Power_Timer < diff) { - //time to cast - DoCast(m_creature,SPELL_SHADOW_POWER); - - //Cast again on time + DoCast(m_creature,HeroicMode ? H_SPELL_SHADOW_POWER : SPELL_SHADOW_POWER); Shadow_Power_Timer = 20000 + rand()%8000; }else Shadow_Power_Timer -= diff; - //Check for Jack Hammer + //Jack Hammer if(Jackhammer_Timer < diff) { - //time to cast - DoCast(m_creature->getVictim(),SPELL_JACKHAMMER); + //TODO: expect cast this about 5 times in a row (?), announce it by emote only once + DoScriptText(EMOTE_HAMMER, m_creature); + DoCast(m_creature->getVictim(),HeroicMode ? H_SPELL_JACKHAMMER : SPELL_JACKHAMMER); - if (rand()%2) + //chance to yell, but not same time as emote (after spell in fact casted) + if (rand()%2) return; switch(rand()%2) { - case 0: - DoYell(SAY_SPELL_JACKHAMMER_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_1); - break; - - case 1: - DoYell(SAY_SPELL_JACKHAMMER_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_2); - break; + case 0: DoScriptText(SAY_HAMMER_1, m_creature); break; + case 1: DoScriptText(SAY_HAMMER_2, m_creature); break; } - //Cast again on time Jackhammer_Timer = 30000; }else Jackhammer_Timer -= diff; - //Check for Stream of Machine Fluid + //Stream of Machine Fluid if(Stream_of_Machine_Fluid_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),SPELL_STREAM_OF_MACHINE_FLUID); - - //Cast again on time Stream_of_Machine_Fluid_Timer = 35000 + rand()%15000; }else Stream_of_Machine_Fluid_Timer -= diff; DoMeleeAttackIfReady(); - } + } }; CreatureAI* GetAI_boss_gatewatcher_iron_hand(Creature *_Creature) { diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp index d077f5b8c0c..96e98b34abe 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp @@ -15,19 +15,24 @@ */ /* ScriptData -SDName: Boss Nethermancer Sepethrea -SD%Complete: 100 -SDComment: +SDName: Boss_Nethermancer_Sepethrea +SD%Complete: 90 +SDComment: Need adjustments to initial summons SDCategory: Tempest Keep, The Mechanar EndScriptData */ #include "precompiled.h" #include "def_mechanar.h" -// Spells to be casted +#define SAY_AGGRO -1554013 +#define SAY_SUMMON -1554014 +#define SAY_DRAGONS_BREATH_1 -1554015 +#define SAY_DRAGONS_BREATH_2 -1554016 +#define SAY_SLAY1 -1554017 +#define SAY_SLAY2 -1554018 +#define SAY_DEATH -1554019 + #define SPELL_SUMMON_RAGIN_FLAMES 35275 -#define SPELL_INFERNO 35268 -#define SPELL_FIRE_TAIL 35278 #define SPELL_FROST_ATTACK 35263 #define SPELL_ARCANE_BLAST 35314 @@ -35,25 +40,18 @@ EndScriptData */ #define SPELL_KNOCKBACK 37317 #define SPELL_SOLARBURN 35267 -#define SAY_SPELL_DRAGONS_BREATH_1 "Think you can take the heat?" -#define SOUND_SPELL_DRAGONS_BREATH_1 11189 -#define SAY_SPELL_DRAGONS_BREATH_2 "Anar'endal dracon!" -#define SOUND_SPELL_DRAGONS_BREATH_2 11190 -// On Aggro -#define SAY_AGGRO "Don't value your life very much, do you?" -#define SOUND_SAY_AGGRO 11186 - -//On Kill Unit -#define SAY_SLAY "And don't come back!" -#define SOUND_SLAY 11187 - -// On Death -#define SAY_DEATH "Anu... bala belore...alon." -#define SOUND_DEATH 11192 - struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI { - boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) {Reset();} +boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) +{ + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + HeroicMode = m_creature->GetMap()->IsHeroic(); + Reset(); +} + + ScriptedInstance *pInstance; + + bool HeroicMode; uint32 frost_attack_Timer; uint32 arcane_blast_Timer; @@ -72,25 +70,29 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI void Aggro(Unit *who) { - for(int i = 0; i < 1;i++) //Summon two Guards - { - DoCast(m_creature->getVictim(),SPELL_SUMMON_RAGIN_FLAMES); - } + DoScriptText(SAY_AGGRO, m_creature); + + //Summon two guards, three in heroic + uint8 am = (HeroicMode ? 1 : 2); + for(int i = 0; i < am; i++) + { + DoCast(who,SPELL_SUMMON_RAGIN_FLAMES); + } + DoScriptText(SAY_SUMMON, m_creature); } - // On Killed Unit void KilledUnit(Unit* victim) { - DoYell(SAY_SLAY, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY); - } + switch(rand()%2) + { + case 0: DoScriptText(SAY_SLAY1, m_creature); break; + case 1: DoScriptText(SAY_SLAY2, m_creature); break; + } + } - // On Death void JustDied(Unit* Killer) { - DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); - ScriptedInstance *pInstance = ((ScriptedInstance*)m_creature->GetInstanceData()); + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_SEPETHREA_DEATH, 0); } @@ -102,78 +104,49 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; - //Check for Frost Attack + //Frost Attack if(frost_attack_Timer < diff) - { - //time to cast + { DoCast(m_creature->getVictim(),SPELL_FROST_ATTACK); - - //Cast again on time frost_attack_Timer = 7000 + rand()%30000; }else frost_attack_Timer -= diff; - //Check for Arcane Blast + //Arcane Blast if(arcane_blast_Timer < diff) { - //time to cast - DoCast(m_creature->getVictim(),SPELL_ARCANE_BLAST); - - //Cast again on time + DoCast(m_creature->getVictim(), SPELL_ARCANE_BLAST); arcane_blast_Timer = 15000; }else arcane_blast_Timer -= diff; - //Check for Dragons Breath + //Dragons Breath if(dragons_breath_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),SPELL_DRAGONS_BREATH); - { - if (rand()%2) return; switch(rand()%2) { - case 0: - DoYell(SAY_SPELL_DRAGONS_BREATH_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_1); - break; - - case 1: - DoYell(SAY_SPELL_DRAGONS_BREATH_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_2); - break; + case 0: DoScriptText(SAY_DRAGONS_BREATH_1, m_creature); break; + case 1: DoScriptText(SAY_DRAGONS_BREATH_2, m_creature); break; } } - //Cast again on time dragons_breath_Timer = 12000 + rand()%10000; - }else dragons_breath_Timer -= diff; - //Check for Knockback + //Knockback if(knockback_Timer < diff) { - - //time to cast DoCast(m_creature->getVictim(),SPELL_KNOCKBACK); - - //Cast again on time knockback_Timer = 15000 + rand()%10000; - }else knockback_Timer -= diff; - //Check for Solarburn + //Solarburn if(solarburn_Timer < diff) - { - - //time to cast DoCast(m_creature->getVictim(),SPELL_SOLARBURN); - - //Cast again on time solarburn_Timer = 30000; - }else solarburn_Timer -= diff; DoMeleeAttackIfReady(); @@ -185,16 +158,24 @@ CreatureAI* GetAI_boss_nethermancer_sepethrea(Creature *_Creature) { return new boss_nethermancer_sepethreaAI (_Creature); } + +#define SPELL_INFERNO 35268 +#define H_SPELL_INFERNO 39346 +#define SPELL_FIRE_TAIL 35278 + struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI { mob_ragin_flamesAI(Creature *c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); + HeroicMode = m_creature->GetMap()->IsHeroic(); } ScriptedInstance *pInstance; + bool HeroicMode; + uint32 inferno_Timer; uint32 flame_timer; uint32 Check_Timer; @@ -217,26 +198,20 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI void UpdateAI(const uint32 diff) { - Unit* target = NULL; - if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; if (!onlyonce) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - - m_creature->GetMotionMaster()->MoveChase(target); + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + m_creature->GetMotionMaster()->MoveChase(target); onlyonce = true; } if(inferno_Timer < diff) { - DoCast(m_creature->getVictim(),SPELL_INFERNO); - + DoCast(m_creature->getVictim(),HeroicMode ? H_SPELL_INFERNO : SPELL_INFERNO); m_creature->TauntApply(m_creature->getVictim()); - inferno_Timer = 10000; }else inferno_Timer -= diff; @@ -244,7 +219,6 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI { DoCast(m_creature,SPELL_FIRE_TAIL); flame_timer = 500; - }else flame_timer -=diff; //Check_Timer diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp index 842da61d9bf..dadd39ac397 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp @@ -23,45 +23,31 @@ EndScriptData */ #include "precompiled.h" +#define SAY_AGGRO -1554020 +#define SAY_DOMINATION_1 -1554021 +#define SAY_DOMINATION_2 -1554022 +#define SAY_SUMMON -1554023 +#define SAY_ENRAGE -1554024 +#define SAY_SLAY_1 -1554025 +#define SAY_SLAY_2 -1554026 +#define SAY_DEATH -1554027 + // Spells to be casted -#define SPELL_SUMMON_NETHER_WRAITH 35287 //Spell not working. Summon is working but Pets dont attack and wrong HP. #define SPELL_MANA_TAP 36021 #define SPELL_ARCANE_TORRENT 36022 #define SPELL_DOMINATION 35280 -#define H_SPELL_ARCANE_EXPLOSION 34791 //Spell not right. -#define SPELL_ENRAGE 36992 +#define H_SPELL_ARCANE_EXPLOSION 15453 +#define SPELL_FRENZY 36992 + +#define SPELL_SUMMON_NETHER_WRAITH_1 35285 //Spells work, but not implemented +#define SPELL_SUMMON_NETHER_WRAITH_2 35286 +#define SPELL_SUMMON_NETHER_WRAITH_3 35287 +#define SPELL_SUMMON_NETHER_WRAITH_4 35288 // Add Spells #define SPELL_DETONATION 35058 #define SPELL_ARCANE_MISSILES 35034 -// On Domination -#define SAY_SPELL_DOMINATION_1 "I'm looking for a team player... " -#define SOUND_SPELL_DOMINATION_1 11197 -#define SAY_SPELL_DOMINATION_2 "You work for me now!" -#define SOUND_SPELL_DOMINATION_2 11198 - -// On Summon -#define SAY_SUMMON_1 "Time to supplement my work force." -#define SOUND_SAY_SUMMON_1 11196 - -// On Enrage -#define SAY_ENRAGE_1 "A minor inconvenience." -#define SOUND_SAY_ENRAGE_1 11199 - -// On Aggro -#define SAY_AGGRO_1 "We are on a strict timetable. You will not interfere!" -#define SOUND_SAY_AGGRO_1 11193 - -//On Kill Unit -#define SAY_SLAY_1 "Looks like you lose" -#define SOUND_SLAY_1 11195 - -// On Death -#define SAY_DEATH_1 "The project will... continue." -#define SOUND_DEATH_1 11200 - - struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI { boss_pathaleon_the_calculatorAI(Creature *c) : ScriptedAI(c) @@ -79,7 +65,6 @@ struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI bool Enraged; uint32 Counter; - Creature* Wraith; void Reset() { @@ -96,24 +81,21 @@ struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI } void Aggro(Unit *who) { - DoYell(SAY_AGGRO_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SAY_AGGRO_1); + DoScriptText(SAY_AGGRO, m_creature); } - // On Killed Unit void KilledUnit(Unit* victim) { + switch(rand()%2) + { + case 0: DoScriptText(SAY_SLAY_1, m_creature); break; + case 1: DoScriptText(SAY_SLAY_2, m_creature); break; + } + } - DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_1); - - } - - // On Death void JustDied(Unit* Killer) { - DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH_1); + DoScriptText(SAY_DEATH, m_creature); } void UpdateAI(const uint32 diff) @@ -124,84 +106,59 @@ struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI if(Summon_Timer < diff) { - - Unit* target = NULL; - for(int i = 0; i < 3;i++) { - target = SelectUnit(SELECT_TARGET_RANDOM,0); - Wraith = m_creature->SummonCreature(21062,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - if (target) - Wraith->AI()->AttackStart(target); + Unit* target = NULL; + target = SelectUnit(SELECT_TARGET_RANDOM,0); + Creature* Wraith = m_creature->SummonCreature(21062,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); + if (target && Wraith) + Wraith->AI()->AttackStart(target); } - - DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SAY_SUMMON_1); - - Summon_Timer = 30000 + rand()%15000; + DoScriptText(SAY_SUMMON, m_creature); + Summon_Timer = 30000 + rand()%15000; }else Summon_Timer -= diff; if(ManaTap_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),SPELL_MANA_TAP); - - //Cast again on time ManaTap_Timer = 14000 + rand()%8000; }else ManaTap_Timer -= diff; if(ArcaneTorrent_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),SPELL_ARCANE_TORRENT); - - //Cast again on time ArcaneTorrent_Timer = 12000 + rand()%6000; }else ArcaneTorrent_Timer -= diff; if(Domination_Timer < diff) - { - //time to cast - switch(rand()%2) - { - case 0: - DoYell(SAY_SPELL_DOMINATION_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_1); - break; - - case 1: - DoYell(SAY_SPELL_DOMINATION_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_2); - break; - } + { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) + { + switch(rand()%2) + { + case 0: DoScriptText(SAY_DOMINATION_1, m_creature); break; + case 1: DoScriptText(SAY_DOMINATION_2, m_creature); break; + } - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (target) DoCast(target,SPELL_DOMINATION); - - //Cast again on time - Domination_Timer = 25000 + rand()%5000; - }else Domination_Timer -= diff; + DoCast(target,SPELL_DOMINATION); + } + Domination_Timer = 25000 + rand()%5000; + }else Domination_Timer -= diff; //Only casting if Heroic Mode is used if (HeroicMode) { if(ArcaneExplosion_Timer < diff) { - //time to cast DoCast(m_creature->getVictim(),H_SPELL_ARCANE_EXPLOSION); - - //Cast again on time ArcaneExplosion_Timer = 10000 + rand()%4000; }else ArcaneExplosion_Timer -= diff; } if (!Enraged && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 21) { - - DoCast(m_creature, SPELL_ENRAGE); - DoYell(SAY_ENRAGE_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SAY_ENRAGE_1); + DoCast(m_creature, SPELL_FRENZY); + DoScriptText(SAY_ENRAGE, m_creature); Enraged = true; } @@ -240,34 +197,25 @@ struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI void UpdateAI(const uint32 diff) { - Unit* target = NULL; - if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; if(ArcaneMissiles_Timer < diff) { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) + DoCast(target,SPELL_ARCANE_MISSILES); + else + DoCast(m_creature->getVictim(),SPELL_ARCANE_MISSILES); - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (!target) - target = m_creature->getVictim(); - if (target) - { - DoCast(target,SPELL_ARCANE_MISSILES); - } - - ArcaneMissiles_Timer = 5000 + rand()%5000; - }else ArcaneMissiles_Timer -=diff; + ArcaneMissiles_Timer = 5000 + rand()%5000; + }else ArcaneMissiles_Timer -=diff; if (!Detonation) { if(Detonation_Timer < diff) { - //time to cast DoCast(m_creature,SPELL_DETONATION); - Detonation = true; - + Detonation = true; }else Detonation_Timer -= diff; } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h index 2f657d85453..5bbfe79ffb4 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h @@ -1,6 +1,6 @@ -#ifndef DEF_MECHANAR_H
-#define DEF_MECHANAR_H
-
-#define DATA_SEPETHREA_DEATH 1
-#define DATA_SEPETHREAISDEAD 2
-#endif
+#ifndef DEF_MECHANAR_H +#define DEF_MECHANAR_H + +#define DATA_SEPETHREA_DEATH 1 +#define DATA_SEPETHREAISDEAD 2 +#endif diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp index d25b9d05470..0eac285beaf 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp @@ -26,7 +26,7 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_mechanar : public ScriptedInstance { - instance_mechanar(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_mechanar(Map *map) : ScriptedInstance(map) {Initialize();}; bool IsBossDied[1]; diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp index c1124116401..b5f8a496c07 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp @@ -24,18 +24,14 @@ EndScriptData */ #include "precompiled.h" #include "def_temple_of_ahnqiraj.h" +//Text emote +#define EMOTE_WEAKENED -1531011 + #define PI 3.14 //****** Out of Combat ****** //Random Wispers - No txt only sound -#define RND_WISPER_1 8580 //Death is close -#define RND_WISPER_2 8581 //You are already dead -#define RND_WISPER_3 8582 //Your courage will fail -#define RND_WISPER_4 8583 //Your friends will abandon you -#define RND_WISPER_5 8584 //You will betray your friends -#define RND_WISPER_6 8585 //You will die -#define RND_WISPER_7 8586 //You are weak -#define RND_WISPER_8 8587 //Your heart will explode +#define RANDOM_SOUND_WHISPER 8663 //***** Phase 1 ******** @@ -88,9 +84,6 @@ EndScriptData */ #define MOB_FLESH_TENTACLE 15802 #define MOB_GIANT_PORTAL 15910 -//Text emote -#define EMOTE_WEAKENED "is weakened!" - //Stomach Teleport positions #define STOMACH_X -8562.0f #define STOMACH_Y 2037.0f @@ -582,18 +575,8 @@ struct TRINITY_DLL_DECL cthunAI : public Scripted_NoMovementAI { if (Player* i_pl = i->getSource()) { - //Play random sound to the zone - switch (rand()%8) - { - case 0: i_pl->SendPlaySound(RND_WISPER_1, true); break; - case 1: i_pl->SendPlaySound(RND_WISPER_2, true); break; - case 2: i_pl->SendPlaySound(RND_WISPER_3, true); break; - case 3: i_pl->SendPlaySound(RND_WISPER_4, true); break; - case 4: i_pl->SendPlaySound(RND_WISPER_5, true); break; - case 5: i_pl->SendPlaySound(RND_WISPER_6, true); break; - case 6: i_pl->SendPlaySound(RND_WISPER_7, true); break; - case 7: i_pl->SendPlaySound(RND_WISPER_8, true); break; - } + //Play random sound to the zone + i_pl->SendPlaySound(RANDOM_SOUND_WHISPER, true); } } @@ -679,7 +662,7 @@ struct TRINITY_DLL_DECL cthunAI : public Scripted_NoMovementAI { pInst->SetData(DATA_CTHUN_PHASE, 4); - DoTextEmote(EMOTE_WEAKENED, NULL); + DoScriptText(EMOTE_WEAKENED, m_creature); PhaseTimer = 45000; DoCast(m_creature, SPELL_RED_COLORATION, true); diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp index c9a732493f7..e32cbb0180b 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp @@ -15,14 +15,18 @@ */ /* ScriptData -SDName: boss_sartura -SD%Complete: 99 +SDName: Boss_Sartura +SD%Complete: 95 SDComment: SDCategory: Temple of Ahn'Qiraj EndScriptData */ #include "precompiled.h" +#define SAY_AGGRO -1531008 +#define SAY_SLAY -1531009 +#define SAY_DEATH -1531010 + #define SPELL_WHIRLWIND 26083 #define SPELL_ENRAGE 28747 //Not sure if right ID. #define SPELL_ENRAGEHARD 28798 @@ -66,8 +70,19 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI void Aggro(Unit *who) { + DoScriptText(SAY_AGGRO, m_creature); } + void JustDied(Unit* Killer) + { + DoScriptText(SAY_DEATH, m_creature); + } + + void KilledUnit(Unit* victim) + { + DoScriptText(SAY_SLAY, m_creature); + } + void UpdateAI(const uint32 diff) { //Return since we have no target diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp index 69af7e1db80..de971371234 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp @@ -25,20 +25,20 @@ EndScriptData */ #include "def_temple_of_ahnqiraj.h" #include "Group.h" +#define SAY_AGGRO1 -1531000 +#define SAY_AGGRO2 -1531001 +#define SAY_AGGRO3 -1531002 +#define SAY_SLAY1 -1531003 +#define SAY_SLAY2 -1531004 +#define SAY_SLAY3 -1531005 +#define SAY_SPLIT -1531006 +#define SAY_DEATH -1531007 + #define SPELL_ARCANE_EXPLOSION 25679 #define SPELL_EARTH_SHOCK 26194 #define SPELL_TRUE_FULFILLMENT4 26526 #define SPELL_BLINK 28391 -#define SOUND_AGGRO1 8615 //8615 Are you so eager to die? I would be happy to accomodate you. -#define SOUND_AGGRO2 8616 //8616 Cower mortals! The age of darkness is at hand. -#define SOUND_AGGRO3 8621 //8621 Tremble! The end is upon you. -#define SOUND_SLAY1 8617 //8617 Let your death serve as an example! -#define SOUND_SLAY2 8619 //8619 Spineless wretchers you will drown in rivers of blood! -#define SOUND_SLAY3 8620 //8620 The screams of the dying will fill the air. A symphony of terror is about to begin! -#define SOUND_SPLIT 8618 //8618 Prepare for the return of the ancient ones! -#define SOUND_DEATH 8622 //8622 You only delay... the inevetable - class ov_mycoordinates { public: @@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI { boss_skeramAI(Creature *c) : ScriptedAI(c) { - pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; + pInstance = ((ScriptedInstance*)c->GetInstanceData()); IsImage = false; Reset(); } @@ -98,22 +98,16 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI { switch(rand()%3) { - case 0: - DoPlaySoundToSet(m_creature,SOUND_SLAY1); - break; - case 1: - DoPlaySoundToSet(m_creature,SOUND_SLAY2); - break; - case 2: - 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) { if (!IsImage) - DoPlaySoundToSet(m_creature,SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); } void Aggro(Unit *who) @@ -122,15 +116,9 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI return; switch(rand()%3) { - case 0: - DoPlaySoundToSet(m_creature,SOUND_AGGRO1); - break; - case 1: - DoPlaySoundToSet(m_creature,SOUND_AGGRO2); - break; - case 2: - 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; } } @@ -193,8 +181,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI int procent = (int) (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() +0.5); //Summoning 2 Images and teleporting to a random position on 75% health - if ( (!Images75 && !IsImage) && - (procent <= 75 && procent > 70) ) + if ( (!Images75 && !IsImage) && (procent <= 75 && procent > 70) ) DoSplit(75); //Summoning 2 Images and teleporting to a random position on 50% health @@ -203,8 +190,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI DoSplit(50); //Summoning 2 Images and teleporting to a random position on 25% health - if ( (!Images25 && !IsImage) && - (procent <= 25 && procent > 20) ) + if ( (!Images25 && !IsImage) && (procent <= 25 && procent > 20) ) DoSplit(25); //Invisible_Timer @@ -226,9 +212,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI void DoSplit(int atPercent /* 75 50 25 */) { - DoPlaySoundToSet(m_creature,SOUND_SPLIT); - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); + DoScriptText(SAY_SPLIT, m_creature); ov_mycoordinates *place1 = new ov_mycoordinates(-8340.782227,2083.814453,125.648788,0); ov_mycoordinates *place2 = new ov_mycoordinates(-8341.546875,2118.504639,133.058151,0); @@ -239,20 +223,26 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI switch(rand()%3) { case 0: - bossc=place1;i1=place2;i2=place3; + bossc=place1; + i1=place2; + i2=place3; break; case 1: - bossc=place2;i1=place1;i2=place3; + bossc=place2; + i1=place1; + i2=place3; break; case 2: - bossc=place3;i1=place1;i2=place2; + bossc=place3; + i1=place1; + i2=place2; break; } for (int tryi = 0; tryi < 41; tryi ++) { Unit *targetpl = SelectUnit(SELECT_TARGET_RANDOM, 0); - if (targetpl->isType(TYPEMASK_PLAYER)) + if (targetpl->GetTypeId() == TYPEID_PLAYER) { Group *grp = ((Player *)targetpl)->GetGroup(); if (grp) @@ -282,14 +272,18 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI case 25: Images25 = true; break; } + Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); + Image1 = m_creature->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); Image1->SetMaxHealth(m_creature->GetMaxHealth() / 5); Image1->SetHealth(m_creature->GetHealth() / 5); + if (target) Image1->AI()->AttackStart(target); Image2 = m_creature->SummonCreature(15263,i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); Image2->SetMaxHealth(m_creature->GetMaxHealth() / 5); Image2->SetHealth(m_creature->GetHealth() / 5); + if (target) Image2->AI()->AttackStart(target); ((boss_skeramAI*)Image1->AI())->IsImage = true; diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp index 84713b190cf..e4496f129d9 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/instance_temple_of_ahnqiraj.cpp @@ -26,7 +26,7 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_temple_of_ahnqiraj : public ScriptedInstance { - instance_temple_of_ahnqiraj(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_temple_of_ahnqiraj(Map *map) : ScriptedInstance(map) {Initialize();}; //If Vem is dead... bool IsBossDied[3]; diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp index 3dbfd55bf63..19235677831 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp @@ -107,7 +107,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI BerserkTimer = 600000; CheckTimer = 1000; - m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true); + DoCast(m_creature, SPELL_DUAL_WIELD, true); Phase = PHASE_NONE; EnterPhase(PHASE_LYNX); @@ -143,13 +143,17 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI EnterPhase(PHASE_HUMAN); } + void AttackStart(Unit *who) + { + if(Phase != PHASE_MERGE) ScriptedAI::AttackStart(who); + } + void EnterPhase(PhaseHalazzi NextPhase) { switch(NextPhase) { case PHASE_LYNX: case PHASE_ENRAGE: - m_creature->SetReactState(REACT_AGGRESSIVE); if(Phase == PHASE_MERGE) { m_creature->CastSpell(m_creature, SPELL_TRANSFORM_MERGE, true); @@ -189,10 +193,8 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI Lynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); Lynx->GetMotionMaster()->Clear(); Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); - ((Creature*)Lynx)->SetReactState(REACT_PASSIVE); m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); - m_creature->SetReactState(REACT_PASSIVE); TransformCount++; }break; default: @@ -201,7 +203,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI Phase = NextPhase; } - void UpdateAI(const uint32 diff) + void UpdateAI(const uint32 diff) { if(!m_creature->SelectHostilTarget() && !m_creature->getVictim()) return; @@ -279,10 +281,11 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI { if(CheckTimer < diff) { - if(Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID)) + Unit *Lynx = Unit::GetUnit(*m_creature, LynxGUID); + if(Lynx) { - //Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); - //m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); + Lynx->GetMotionMaster()->MoveFollow(m_creature, 0, 0); + m_creature->GetMotionMaster()->MoveFollow(Lynx, 0, 0); if(m_creature->IsWithinDistInMap(Lynx, 6.0f)) { if(TransformCount < 3) @@ -345,6 +348,12 @@ struct TRINITY_DLL_DECL boss_spiritlynxAI : public ScriptedAI damage = 0; } + void AttackStart(Unit *who) + { + if(!m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + ScriptedAI::AttackStart(who); + } + void Aggro(Unit *who) {/*DoZoneInCombat();*/} void UpdateAI(const uint32 diff) diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp index 7b0feb4e265..c9111ec275a 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp @@ -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 @@ -25,6 +25,17 @@ EndScriptData */ #include "def_zulaman.h" #include "GridNotifiers.h" +#define SAY_AGGRO -1568000 +#define SAY_FIRE_BOMBS -1568001 +#define SAY_SUMMON_HATCHER -1568002 +#define SAY_ALL_EGGS -1568003 +#define SAY_BERSERK -1568004 +#define SAY_SLAY_1 -1568005 +#define SAY_SLAY_2 -1568006 +#define SAY_DEATH -1568007 +#define SAY_EVENT_STRANGERS -1568008 +#define SAY_EVENT_FRIENDS -1568009 + // Jan'alai // --Spell #define SPELL_FLAME_BREATH 43140 @@ -40,31 +51,6 @@ EndScriptData */ #define SPELL_FIRE_BOMB_DUMMY 42629 // bomb visual #define SPELL_FIRE_BOMB_DAMAGE 42630 -// -- SAYs -#define SOUND_AGGRO 12031 -#define SAY_AGGRO "Spirits of da wind be your doom!" -#define SOUND_FIRE_BOMBS 12032 -#define SAY_FIRE_BOMBS "I burn ya now!" -#define SOUND_SUMMON_HATCHER 12033 -#define SAY_SUMMON_HATCHER "Where ma hatcha? Get to work on dem templist!" -#define SOUND_ALL_EGGS 12034 -#define SAY_ALL_EGGS "I show you strength... in numbers." -#define SOUND_BERSERK 12035 -#define SAY_BERSERK "You done run outta time!" - -#define SOUND_SLAY_1 12036 -#define SAY_SLAY_1 "It all be over now, mon!" -#define SOUND_SLAY_2 12037 -#define SAY_SLAY_2 "Tazaga-choo!" - -#define SOUND_DEATH 12038 -#define SAY_DEATH "Zul'jin... got a surprise for you..." - -#define SOUND_AGGRO_1 12039 //NOT USED need more information -#define SAY_AGGRO_1 "Come, strangers. The spirit of the dragonhawk hot be hungry for worthy souls." //NOT USED need more information(random say before aggro?) -#define SOUND_AGGRO_2 12040 //NOT USED need more information -#define SAY_AGGRO_2 "Come, friends. Your bodies gonna feed ma HatchNum, and your souls are going to feed me with power!" //NOT USED need more information(random say before aggro?) - // --Summons #define MOB_AMANI_HATCHER 23818 #define MOB_HATCHLING 23598 // 42493 @@ -171,8 +157,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : 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(DATA_JANALAIEVENT, DONE); @@ -182,14 +167,8 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI { switch(rand()%2) { - case 0: - DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_1); - break; - case 1: - DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_1); - break; + case 0: DoScriptText(SAY_SLAY_1, m_creature); break; + case 1: DoScriptText(SAY_SLAY_2, m_creature); break; } } @@ -198,8 +177,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI if(pInstance) pInstance->SetData(DATA_JANALAIEVENT, IN_PROGRESS); - DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); + DoScriptText(SAY_AGGRO, m_creature); // DoZoneInCombat(); } @@ -226,9 +204,9 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI for(uint8 j = 0; j < WallNum; j++) { if(WallNum == 3) - wall = m_creature->SummonTrigger(FireWallCoords[i][0],FireWallCoords[i][1]+5*(j-1),FireWallCoords[i][2],FireWallCoords[i][3],15000); + wall = m_creature->SummonCreature(MOB_FIRE_BOMB, FireWallCoords[i][0],FireWallCoords[i][1]+5*(j-1),FireWallCoords[i][2],FireWallCoords[i][3],TEMPSUMMON_TIMED_DESPAWN,15000); else - wall = m_creature->SummonTrigger(FireWallCoords[i][0]-2+4*j,FireWallCoords[i][1],FireWallCoords[i][2],FireWallCoords[i][3],15000); + wall = m_creature->SummonCreature(MOB_FIRE_BOMB, FireWallCoords[i][0]-2+4*j,FireWallCoords[i][1],FireWallCoords[i][2],FireWallCoords[i][3],TEMPSUMMON_TIMED_DESPAWN,15000); if(wall) wall->CastSpell(wall, SPELL_FIRE_WALL, true); } } @@ -375,8 +353,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI } else { - DoYell(SAY_BERSERK, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_BERSERK); + DoScriptText(SAY_BERSERK, m_creature); m_creature->CastSpell(m_creature, SPELL_BERSERK, true); EnrageTimer = 300000; } @@ -384,8 +361,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI if(BombTimer < diff) { - DoYell(SAY_FIRE_BOMBS, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_FIRE_BOMBS); + DoScriptText(SAY_FIRE_BOMBS, m_creature); m_creature->AttackStop(); m_creature->GetMotionMaster()->Clear(); @@ -419,6 +395,8 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI { if(100 * m_creature->GetHealth() < 35 * m_creature->GetMaxHealth()) { + DoScriptText(SAY_ALL_EGGS, m_creature); + m_creature->AttackStop(); m_creature->GetMotionMaster()->Clear(); m_creature->Relocate(JanalainPos[0][0],JanalainPos[0][1],JanalainPos[0][2],0); @@ -432,8 +410,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI { if(HatchAllEggs(0)) { - DoYell(SAY_SUMMON_HATCHER, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SUMMON_HATCHER); + DoScriptText(SAY_SUMMON_HATCHER, m_creature); m_creature->SummonCreature(MOB_AMANI_HATCHER,hatcherway[0][0][0],hatcherway[0][0][1],hatcherway[0][0][2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); m_creature->SummonCreature(MOB_AMANI_HATCHER,hatcherway[1][0][0],hatcherway[1][0][1],hatcherway[1][0][2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); HatcherTimer = 90000; @@ -683,9 +660,14 @@ CreatureAI* GetAI_mob_hatchlingAI(Creature *_Creature) return new mob_hatchlingAI(_Creature); } -struct TRINITY_DLL_DECL mob_eggAI : public NullCreatureAI +struct TRINITY_DLL_DECL mob_eggAI : public ScriptedAI { - mob_eggAI(Creature *c) : NullCreatureAI(c){} + mob_eggAI(Creature *c) : ScriptedAI(c){} + void Reset() {} + void Aggro(Unit* who) {} + void AttackStart(Unit* who) {} + void MoveInLineOfSight(Unit* who) {} + void UpdateAI(const uint32 diff) {} void SpellHit(Unit *caster, const SpellEntry *spell) { diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp index 8d779c300ff..f93876e56a8 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp @@ -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 diff --git a/src/bindings/scripts/scripts/zone/zulaman/instance_zulaman.cpp b/src/bindings/scripts/scripts/zone/zulaman/instance_zulaman.cpp index bb847169e78..916c7f31936 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/instance_zulaman.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/instance_zulaman.cpp @@ -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 @@ -51,7 +51,7 @@ static SHostageInfo HostageInfo[] = struct TRINITY_DLL_DECL instance_zulaman : public ScriptedInstance { - instance_zulaman(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_zulaman(Map *map) : ScriptedInstance(map) {Initialize();}; uint64 HarkorsSatchelGUID; uint64 TanzarsTrunkGUID; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp index 0d08f35c6a1..6e04f770002 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp @@ -24,23 +24,27 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309011 +#define SAY_FEAST_PANTHER -1309012 +#define SAY_DEATH -1309013 + #define SPELL_SHADOWWORDPAIN 23952 #define SPELL_GOUGE 24698 #define SPELL_MARK 24210 #define SPELL_CLEAVE 26350 //Perhaps not right. Not a red aura... #define SPELL_PANTHER_TRANSFORM 24190 -#define SAY_TRANSFORM "Bethekk, your priestess calls upon your might!" -#define SAY_DEATH "At last I am free of the soul flayer..." - -#define SOUND_TRANSFORM 8416 -#define SOUND_DEATH 8412 - struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI { - boss_arlokkAI(Creature *c) : ScriptedAI(c) {Reset();} + boss_arlokkAI(Creature *c) : ScriptedAI(c) + { + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + Reset(); + } - uint32 ShadowWordPain_Timer; + ScriptedInstance *pInstance; + + uint32 ShadowWordPain_Timer; uint32 Gouge_Timer; uint32 Mark_Timer; uint32 Cleave_Timer; @@ -77,15 +81,14 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI void Aggro(Unit *who) { + DoScriptText(SAY_AGGRO, m_creature); } void JustDied(Unit* Killer) { - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15218); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? ((ScriptedInstance*)m_creature->GetInstanceData()) : NULL; if(pInstance) pInstance->SetData(DATA_ARLOKK_DEATH, 0); @@ -93,7 +96,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) + if (!m_creature->getVictim() && !m_creature->SelectHostilTarget()) return; if( m_creature->getVictim() && m_creature->isAlive()) @@ -120,16 +123,17 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI Panther = m_creature->SummonCreature(15101,-11532.79980,-1649.6734,41.4800,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if(markedTarget && Panther ) - { Panther ->AI()->AttackStart(markedTarget); } - else - { Panther ->AI()->AttackStart(target); } + { + DoScriptText(SAY_FEAST_PANTHER, m_creature, markedTarget); + Panther ->AI()->AttackStart(markedTarget); + }else Panther ->AI()->AttackStart(target); Panther = m_creature->SummonCreature(15101,-11532.9970,-1606.4840,41.2979,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if(markedTarget && Panther ) - { Panther ->AI()->AttackStart(markedTarget); } + Panther ->AI()->AttackStart(markedTarget); else - { Panther ->AI()->AttackStart(target); } + Panther ->AI()->AttackStart(target); Counter++; Summon_Timer = 5000; @@ -157,12 +161,6 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - if (!PhaseTwo) - { - DoYell(SAY_TRANSFORM,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_TRANSFORM); - } - const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp index 93db797e25f..cd830b88a85 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp @@ -24,6 +24,11 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309020 +#define SAY_FLEEING -1309021 +#define SAY_MINION_DESTROY -1309022 //where does it belong? +#define SAY_PROTECT_ALTAR -1309023 //where does it belong? + #define SPELL_BLOODSIPHON 24322 #define SPELL_CORRUPTEDBLOOD 24328 #define SPELL_CAUSEINSANITY 24327 //Not working disabled. @@ -37,11 +42,6 @@ EndScriptData */ #define SPELL_ASPECT_OF_THEKAL 24689 #define SPELL_ASPECT_OF_ARLOKK 24690 -#define SAY_AGGRO "PRIDE HERALDS THE END OF YOUR WORLD. COME, MORTALS! FACE THE WRATH OF THE SOULFLAYER!" -#define SOUND_AGGRO 8414 - -#define SAY_SLAY "Fleeing will do you no good, mortals!" - struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI { boss_hakkarAI(Creature *c) : ScriptedAI(c) @@ -50,6 +50,8 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI Reset(); } + ScriptedInstance *pInstance; + uint32 BloodSiphon_Timer; uint32 CorruptedBlood_Timer; uint32 CauseInsanity_Timer; @@ -68,8 +70,6 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI uint32 AspectOfThekal_Timer; uint32 AspectOfArlokk_Timer; - ScriptedInstance *pInstance; - bool Enraged; void Reset() @@ -97,13 +97,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI 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) { - //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; @@ -122,26 +120,21 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI }else CorruptedBlood_Timer -= diff; //CauseInsanity_Timer - // if (CauseInsanity_Timer < diff) - // { - // - // Unit* target = NULL; - // target = SelectUnit(SELECT_TARGET_RANDOM,0); - - // DoCast(target,SPELL_CAUSEINSANITY); + /*if (CauseInsanity_Timer < diff) + { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(target,SPELL_CAUSEINSANITY); - // CauseInsanity_Timer = 35000 + rand()%8000; - // }else CauseInsanity_Timer -= diff; + CauseInsanity_Timer = 35000 + rand()%8000; + }else CauseInsanity_Timer -= diff;*/ //WillOfHakkar_Timer if (WillOfHakkar_Timer < diff) { + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(target,SPELL_WILLOFHAKKAR); - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - - DoCast(target,SPELL_WILLOFHAKKAR); - WillOfHakkar_Timer = 25000 + rand()%10000; + WillOfHakkar_Timer = 25000 + rand()%10000; }else WillOfHakkar_Timer -= diff; if (!Enraged && Enrage_Timer < diff) diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp index ce63d6f1587..1cb2c438e27 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp @@ -24,6 +24,10 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309002 +#define SAY_RAIN_FIRE -1309003 +#define SAY_DEATH -1309004 + #define SPELL_CHARGE 22911 #define SPELL_SONICBURST 23918 #define SPELL_SCREECH 6605 @@ -37,15 +41,15 @@ EndScriptData */ #define SPELL_BOMB 40332 //Wrong ID but Magmadars bomb is not working... -#define SAY_AGGRO "Lord Hireek grant me wings of vengance!" -#define SAY_DEATH "Hireek - Finnaly death. Curse you Hakkar! Curse you!" - -#define SOUND_AGGRO 8417 -#define SOUND_DEATH 8422 - struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI { - boss_jeklikAI(Creature *c) : ScriptedAI(c) {Reset();} + boss_jeklikAI(Creature *c) : ScriptedAI(c) + { + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + Reset(); + } + + ScriptedInstance *pInstance; uint32 Charge_Timer; uint32 SonicBurst_Timer; @@ -76,25 +80,22 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); + DoScriptText(SAY_AGGRO, m_creature); DoCast(m_creature,SPELL_BAT_FORM); } void JustDied(Unit* Killer) { - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_DEATH); + DoScriptText(SAY_DEATH, m_creature); - ScriptedInstance *pInstance = ((ScriptedInstance*)m_creature->GetInstanceData()); if(pInstance) pInstance->SetData(DATA_JEKLIK_DEATH, 0); } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) - return; + if (!m_creature->getVictim() && !m_creature->SelectHostilTarget()) + return; if( m_creature->getVictim() && m_creature->isAlive()) { @@ -102,8 +103,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI { if (Charge_Timer < diff) { - Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) { DoCast(target,SPELL_CHARGE); @@ -133,21 +133,21 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI Creature* Bat = NULL; Bat = m_creature->SummonCreature(11368,-12291.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if (target && Bat ) Bat ->AI()->AttackStart(target); Bat = m_creature->SummonCreature(11368,-12289.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if(target && Bat ) Bat ->AI()->AttackStart(target); Bat = m_creature->SummonCreature(11368,-12293.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if(target && Bat ) Bat ->AI()->AttackStart(target); Bat = m_creature->SummonCreature(11368,-12291.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if(target && Bat ) Bat ->AI()->AttackStart(target); Bat = m_creature->SummonCreature(11368,-12289.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if(target && Bat ) Bat ->AI()->AttackStart(target); Bat = m_creature->SummonCreature(11368,-12293.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Bat ) { Bat ->AI()->AttackStart(target); } + if(target && Bat ) Bat ->AI()->AttackStart(target); SpawnBats_Timer = 60000; }else SpawnBats_Timer -= diff; @@ -158,8 +158,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI { if(PhaseTwo && ShadowWordPain_Timer < diff) { - Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) { DoCast(target, SPELL_SHADOW_WORD_PAIN); ShadowWordPain_Timer = 12000 + rand()%6000; @@ -198,7 +197,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI } SpawnFlyingBats_Timer = 10000 + rand()%5000; - }SpawnFlyingBats_Timer -=diff; + }else SpawnFlyingBats_Timer -=diff; } else { @@ -245,8 +244,7 @@ struct TRINITY_DLL_DECL mob_batriderAI : public ScriptedAI //Bomb_Timer if(Bomb_Timer < diff) { - Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); - if(target) + if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) { DoCast(target, SPELL_BOMB); Bomb_Timer = 5000; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp index f133cc6bceb..409aece3a3f 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp @@ -24,6 +24,8 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309014 + #define SPELL_BRAINWASHTOTEM 24262 #define SPELL_POWERFULLHEALINGWARD 24309 //We will not use this spell. We will summon a totem by script cause the spell totems will not cast. #define SPELL_HEX 24053 @@ -37,10 +39,6 @@ EndScriptData */ #define SPELL_SHADOWSHOCK 19460 #define SPELL_INVISIBLE 24699 -#define SAY_AGGRO "Welcome to da great show friends! Step right up to die!" - -#define SOUND_AGGRO 8425 - struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI { boss_jindoAI(Creature *c) : ScriptedAI(c) @@ -48,6 +46,8 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; Reset(); } + + ScriptedInstance *pInstance; uint32 BrainWashTotem_Timer; uint32 HealingWard_Timer; @@ -59,8 +59,6 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI Creature *Skeletons; Creature *HealingWard; - ScriptedInstance *pInstance; - void Reset() { BrainWashTotem_Timer = 20000; @@ -72,8 +70,7 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI 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) @@ -110,13 +107,13 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI //Casting the delusion curse with a shade. So shade will attack the same target with the curse. if (Delusions_Timer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + { DoCast(target, SPELL_DELUSIONSOFJINDO); Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); Shade->AI()->AttackStart(target); + } Delusions_Timer = 4000 + rand()%8000; }else Delusions_Timer -= diff; @@ -165,7 +162,7 @@ struct TRINITY_DLL_DECL mob_healing_wardAI : public ScriptedAI { mob_healing_wardAI(Creature *c) : ScriptedAI(c) { - pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; + pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp index 8a9f7320764..d99e82f59dd 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp @@ -24,6 +24,12 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309015 +#define SAY_DING_KILL -1309016 +#define SAY_GRATS_JINDO -1309017 +#define SAY_WATCH -1309018 +#define SAY_WATCH_WHISPER -1309019 //is this text for real? easter egg? + #define SPELL_CHARGE 24315 #define SPELL_CLEAVE 20691 #define SPELL_FEAR 29321 @@ -36,12 +42,6 @@ EndScriptData */ //Ohgans Spells #define SPELL_SUNDERARMOR 24317 -#define SAY_AGGRO "I'll feed your souls to Hakkar himself!" -#define SOUND_AGGRO 8413 - -#define SAY_WATCH "I'm keeping my eye on you, $N!" -#define SAY_KILL "DING!" - struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI { boss_mandokirAI(Creature *c) : ScriptedAI(c) @@ -50,6 +50,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI Reset(); } + uint32 KillCount; uint32 Watch_Timer; uint32 TargetInRange; uint32 Cleave_Timer; @@ -72,6 +73,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI void Reset() { + KillCount = 0; Watch_Timer = 33000; Cleave_Timer = 7000; Whirlwind_Timer = 20000; @@ -98,16 +100,38 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI { if(victim->GetTypeId() == TYPEID_PLAYER) { - DoYell(SAY_KILL, LANG_UNIVERSAL, NULL); + ++KillCount; + + if (KillCount == 3) + { + DoScriptText(SAY_DING_KILL, m_creature); + + if (pInstance) + { + uint64 JindoGUID = pInstance->GetData64(DATA_JINDO); + if (JindoGUID) + { + if (Unit* jTemp = Unit::GetUnit(*m_creature,JindoGUID)) + { + if (jTemp->isAlive()) + DoScriptText(SAY_GRATS_JINDO, jTemp); + } + } + } DoCast(m_creature, SPELL_LEVEL_UP, true); - } - } + KillCount = 0; + } + } + } - void Aggro(Unit *who) {} + void Aggro(Unit *who) + { + DoScriptText(SAY_AGGRO, m_creature); + } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; if( m_creature->getVictim() && m_creature->isAlive()) @@ -152,10 +176,9 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI if ((Watch_Timer < 8000) && !someWatched) //8 sec(cast time + expire time) before the check for the watch effect mandokir will cast watch debuff on a random target { - Unit* p = SelectUnit(SELECT_TARGET_RANDOM,0); - if(p) + if (Unit* p = SelectUnit(SELECT_TARGET_RANDOM,0)) { - DoYell(SAY_WATCH, LANG_UNIVERSAL, p); + DoScriptText(SAY_WATCH, m_creature, p); DoCast(p, SPELL_WATCH); WatchTarget = p->GetGUID(); someWatched = true; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp index 5f276a6c3f8..6ea489d3008 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp @@ -24,6 +24,11 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309005 +#define SAY_TRANSFORM -1309006 +#define SAY_SPIDER_SPAWN -1309007 +#define SAY_DEATH -1309008 + #define SPELL_CHARGE 22911 #define SPELL_ASPECT_OF_MARLI 24686 // A stun spell #define SPELL_ENVOLWINGWEB 24110 @@ -33,15 +38,15 @@ EndScriptData */ //The Spider Spells #define SPELL_LEVELUP 24312 //Not right Spell. -#define SAY_AGGRO "Draw me to your web mistress Shadra. Unleash your venom!" -#define SOUND_AGGRO 8418 - -#define SAY_DEATH "ShadraDeath - Bless you mortal for this release. Hakkar controls me no longer..." -#define SOUND_DEATH 8423 - struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI { - boss_marliAI(Creature *c) : ScriptedAI(c) {Reset();} + boss_marliAI(Creature *c) : ScriptedAI(c) + { + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + Reset(); + } + + ScriptedInstance *pInstance; uint32 SpawnStartSpiders_Timer; uint32 PoisonVolley_Timer; @@ -74,22 +79,19 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); + DoScriptText(SAY_AGGRO, m_creature); } void JustDied(Unit* Killer) { - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_DEATH); - ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? ((ScriptedInstance*)m_creature->GetInstanceData()) : NULL; + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_MARLI_DEATH, 0); } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) + if (!m_creature->getVictim() && !m_creature->SelectHostilTarget()) return; if( m_creature->getVictim() && m_creature->isAlive()) @@ -108,34 +110,35 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI if (!Spawned && SpawnStartSpiders_Timer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); + DoScriptText(SAY_SPIDER_SPAWN, m_creature); + + Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Spider ) { Spider ->AI()->AttackStart(target); } + if(target && Spider ) Spider ->AI()->AttackStart(target); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Spider ) { Spider ->AI()->AttackStart(target); } + if(target && Spider ) Spider ->AI()->AttackStart(target); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Spider ) { Spider ->AI()->AttackStart(target); } + if(target && Spider ) Spider ->AI()->AttackStart(target); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Spider ) { Spider ->AI()->AttackStart(target); } + if(target && Spider ) Spider ->AI()->AttackStart(target); Spawned = true; }else SpawnStartSpiders_Timer -= diff; if (SpawnSpider_Timer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); + Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0); Spider = m_creature->SummonCreature(15041,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if(target && Spider ) { Spider ->AI()->AttackStart(target); } - + if (target && Spider ) + Spider ->AI()->AttackStart(target); SpawnSpider_Timer = 12000 + rand()%5000; }else SpawnSpider_Timer -= diff; if(!PhaseTwo && Transform_Timer < diff) { + DoScriptText(SAY_TRANSFORM, m_creature); DoCast(m_creature,SPELL_SPIDER_FORM); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp index 47f9588485d..8d369d2dce5 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp @@ -24,6 +24,9 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_AGGRO -1309009 +#define SAY_DEATH -1309010 + #define SPELL_MORTALCLEAVE 22859 #define SPELL_SILENCE 23207 #define SPELL_FRENZY 23342 @@ -47,17 +50,11 @@ EndScriptData */ #define SPELL_KICK 15614 #define SPELL_BLIND 21060 -#define SAY_AGGRO "Shirvallah fill me with your rage!" -#define SOUND_AGGRO 8419 - -#define SAY_DEATH "Hakkar binds me no more. Peace at last." -#define SOUND_DEATH 8424 - struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI { boss_thekalAI(Creature *c) : ScriptedAI(c) { - pInstance = (c->GetInstanceData()) ? ((ScriptedInstance*)c->GetInstanceData()) : NULL; + pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } @@ -98,27 +95,21 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); + DoScriptText(SAY_AGGRO, m_creature); } void JustDied(Unit* Killer) { - DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_DEATH); - ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? ((ScriptedInstance*)m_creature->GetInstanceData()) : NULL; + DoScriptText(SAY_DEATH, m_creature); if(pInstance) pInstance->SetData(DATA_THEKAL_DEATH, 0); } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) + if (!m_creature->getVictim() && !m_creature->SelectHostilTarget()) return; - if( m_creature->getVictim() && m_creature->isAlive()) - { - //Check_Timer for the death of LorKhan and Zath. if(!WasDead && Check_Timer < diff) { @@ -200,13 +191,13 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI { if (Charge_Timer < diff) { - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); - + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + { DoCast(target,SPELL_CHARGE); m_creature->SendMonsterMove(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, true,1); DoResetThreat(); AttackStart(target); + } Charge_Timer = 15000 + rand()%7000; }else Charge_Timer -= diff; @@ -237,7 +228,7 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI } DoMeleeAttackIfReady(); - } + } }; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp index 177d270a6ab..6191c6d7713 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp @@ -24,6 +24,9 @@ EndScriptData */ #include "precompiled.h" #include "def_zulgurub.h" +#define SAY_TRANSFORM -1309000 +#define SAY_DEATH -1309001 + #define SPELL_HOLY_FIRE 23860 #define SPELL_HOLY_WRATH 28883 //Not sure if this or 23979 #define SPELL_VENOMSPIT 23862 @@ -34,12 +37,15 @@ EndScriptData */ #define SPELL_BERSERK 23537 #define SPELL_DISPELL 23859 -#define SAY_AGGRO "Let the coils of hate unfurl!" -#define SOUND_AGGRO 8421 - struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI { - boss_venoxisAI(Creature *c) : ScriptedAI(c) {Reset();} + boss_venoxisAI(Creature *c) : ScriptedAI(c) + { + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + Reset(); + } + + ScriptedInstance *pInstance; uint32 HolyFire_Timer; uint32 HolyWrath_Timer; @@ -70,24 +76,20 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_AGGRO); } void JustDied(Unit* Killer) { - ScriptedInstance *pInstance = (m_creature->GetInstanceData()) ? ((ScriptedInstance*)m_creature->GetInstanceData()) : NULL; - if(pInstance) - pInstance->SetData(DATA_VENOXIS_DEATH, 0); + DoScriptText(SAY_DEATH, m_creature); + if(pInstance) + pInstance->SetData(DATA_VENOXIS_DEATH, 0); } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget()) + if (!m_creature->getVictim() && !m_creature->SelectHostilTarget()) return; - if( m_creature->getVictim() && m_creature->isAlive()) - { if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > 50)) { if (Dispell_Timer < diff) @@ -110,12 +112,10 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI if (HolyNova_Timer < diff) { - Unit* target = NULL; TargetInRange = 0; for(int i=0; i<10; i++) { - target = SelectUnit(SELECT_TARGET_TOPAGGRO,i); - if(target) + if (Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO,i)) if(m_creature->IsWithinMeleeRange(target)) TargetInRange++; } @@ -134,10 +134,9 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI if (HolyFire_Timer < diff && TargetInRange < 3) { - Unit* targetrandom = NULL; - targetrandom = SelectUnit(SELECT_TARGET_RANDOM,0); + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(target, SPELL_HOLY_FIRE); - DoCast(targetrandom, SPELL_HOLY_FIRE); HolyFire_Timer = 8000; }else HolyFire_Timer -= diff; } @@ -145,6 +144,7 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI { if(!PhaseTwo) { + DoScriptText(SAY_TRANSFORM, m_creature); m_creature->InterruptNonMeleeSpells(false); DoCast(m_creature,SPELL_SNAKE_FORM); m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.00f); @@ -164,10 +164,9 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI if (PhaseTwo && VenomSpit_Timer < diff) { - Unit* targetrandom = NULL; - targetrandom = SelectUnit(SELECT_TARGET_RANDOM,0); + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(target, SPELL_VENOMSPIT); - DoCast(targetrandom, SPELL_VENOMSPIT); VenomSpit_Timer = 15000 + rand()%5000; }else VenomSpit_Timer -= diff; @@ -182,7 +181,7 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI } } DoMeleeAttackIfReady(); - } + } }; CreatureAI* GetAI_boss_venoxis(Creature *_Creature) diff --git a/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp b/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp index 0e9a14a05b9..de6ffb4e5d0 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp @@ -26,7 +26,7 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_zulgurub : public ScriptedInstance { - instance_zulgurub(Map *Map) : ScriptedInstance(Map) {Initialize();}; + instance_zulgurub(Map *map) : ScriptedInstance(map) {Initialize();}; //If all High Priest bosses were killed. Lorkhan, Zath and Ohgan are added too. bool IsBossDied[9]; |