Deadmines: Clean up + Code relocation

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-10-27 13:11:33 +01:00
parent d583e8da72
commit aa0cd71e20
5 changed files with 211 additions and 186 deletions
+1
View File
@@ -56,6 +56,7 @@ SET(trinityscript_LIB_SRCS
scripts/eastern_kingdoms/blackwing_lair/instance_blackwing_lair.cpp
scripts/eastern_kingdoms/deadmines/deadmines.h
scripts/eastern_kingdoms/deadmines/deadmines.cpp
scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp
scripts/eastern_kingdoms/karazhan/boss_curator.cpp
scripts/eastern_kingdoms/karazhan/boss_maiden_of_virtue.cpp
scripts/eastern_kingdoms/karazhan/boss_midnight.cpp
@@ -25,171 +25,6 @@ EndScriptData */
#include "deadmines.h"
#include "Spell.h"
#define SOUND_CANNONFIRE 1400
#define SOUND_DESTROYDOOR 3079
#define SAY_MR_SMITE_ALARM1 "You there, check out that noise!"
#define SOUND_MR_SMITE_ALARM1 5775
#define SAY_MR_SMITE_ALARM2 "We're under attack! A vast, ye swabs! Repel the invaders!"
#define SOUND_MR_SMITE_ALARM2 5777
#define GO_IRONCLAD_DOOR 16397
#define GO_DEFIAS_CANNON 16398
#define GO_DOOR_LEVER 101833
#define CANNON_BLAST_TIMER 3000
#define PIRATES_DELAY_TIMER 1000
struct TRINITY_DLL_DECL instance_deadmines : public ScriptedInstance
{
instance_deadmines(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
GameObject* IronCladDoor;
GameObject* DefiasCannon;
GameObject* DoorLever;
Creature* DefiasPirate1;
Creature* DefiasPirate2;
Creature* DefiasCompanion;
uint32 State;
uint32 CannonBlast_Timer;
uint32 PiratesDelay_Timer;
void Initialize()
{
IronCladDoor = NULL;
DefiasCannon = NULL;
DoorLever = NULL;
State = CANNON_NOT_USED;
}
virtual void Update(uint32 diff)
{
if (!IronCladDoor || !DefiasCannon || !DoorLever)
return;
switch(State)
{
case CANNON_GUNPOWDER_USED:
CannonBlast_Timer = CANNON_BLAST_TIMER;
// it's a hack - Mr. Smite should do that but his too far away
IronCladDoor->SetName("Mr. Smite");
IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0);
DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM1);
State=CANNON_BLAST_INITIATED;
break;
case CANNON_BLAST_INITIATED:
PiratesDelay_Timer = PIRATES_DELAY_TIMER;
if (CannonBlast_Timer<diff)
{
SummonCreatures();
ShootCannon();
BlastOutDoor();
LeverStucked();
IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0);
DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM2);
State = PIRATES_ATTACK;
}else
CannonBlast_Timer-=diff;
break;
case PIRATES_ATTACK:
if (PiratesDelay_Timer<diff)
{
MoveCreaturesInside();
State = EVENT_DONE;
}else
PiratesDelay_Timer-=diff;
break;
}
}
void SummonCreatures()
{
DefiasPirate1 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() - 2,IronCladDoor->GetPositionY()-7,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
DefiasPirate2 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() + 3,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
DefiasCompanion = IronCladDoor->SummonCreature(3450,IronCladDoor->GetPositionX() + 2,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
}
void MoveCreaturesInside()
{
if (!DefiasPirate1 || !DefiasPirate2 || !DefiasCompanion)
return;
MoveCreatureInside(DefiasPirate1);
MoveCreatureInside(DefiasPirate2);
MoveCreatureInside(DefiasCompanion);
}
void MoveCreatureInside(Creature* pCreature)
{
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
pCreature->GetMotionMaster()->MovePoint(0, -102.7,-655.9, pCreature->GetPositionZ());
}
void ShootCannon()
{
DefiasCannon->SetGoState(GO_STATE_ACTIVE);
DoPlaySound(DefiasCannon, SOUND_CANNONFIRE);
}
void BlastOutDoor()
{
IronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR);
}
void LeverStucked()
{
DoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
}
void OnGameObjectCreate(GameObject* pGo, bool add)
{
switch(pGo->GetEntry())
{
case GO_IRONCLAD_DOOR:
IronCladDoor = pGo;
break;
case GO_DEFIAS_CANNON:
DefiasCannon = pGo;
break;
case GO_DOOR_LEVER:
DoorLever = pGo;
break;
}
}
void SetData(uint32 type, uint32 data)
{
if (type == EVENT_STATE)
{
if (DefiasCannon && IronCladDoor)
State=data;
}
}
uint32 GetData(uint32 type)
{
if (type == EVENT_STATE)
return State;
return 0;
}
void DoPlaySound(GameObject* unit, uint32 sound)
{
WorldPacket data(4);
data.SetOpcode(SMSG_PLAY_SOUND);
data << uint32(sound);
unit->SendMessageToSet(&data,false);
}
void DoPlaySoundCreature(Unit* unit, uint32 sound)
{
WorldPacket data(4);
data.SetOpcode(SMSG_PLAY_SOUND);
data << uint32(sound);
unit->SendMessageToSet(&data,false);
}
};
/*#####
# item_Defias_Gunpowder
#####*/
@@ -215,19 +50,9 @@ bool ItemUse_item_defias_gunpowder(Player* pPlayer, Item* _Item, SpellCastTarget
return true;
}
InstanceData* GetInstanceData_instance_deadmines(Map* pMap)
{
return new instance_deadmines(pMap);
}
void AddSC_instance_deadmines()
void AddSC_deadmines()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_deadmines";
newscript->GetInstanceData = &GetInstanceData_instance_deadmines;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "item_defias_gunpowder";
newscript->pItemUse = &ItemUse_item_defias_gunpowder;
@@ -3,12 +3,25 @@
#include "precompiled.h"
#define CANNON_NOT_USED 1
#define CANNON_GUNPOWDER_USED 2
#define CANNON_BLAST_INITIATED 3
#define PIRATES_ATTACK 4
#define EVENT_DONE 5
enum CannonState
{
CANNON_NOT_USED,
CANNON_GUNPOWDER_USED,
CANNON_BLAST_INITIATED,
PIRATES_ATTACK,
EVENT_DONE
};
#define EVENT_STATE 1
enum Data
{
EVENT_STATE
};
enum GameObjects
{
GO_IRONCLAD_DOOR = 16397,
GO_DEFIAS_CANNON = 16398,
GO_DOOR_LEVER = 101833
};
#endif
@@ -16,8 +16,192 @@
/* ScriptData
SDName: Instance_Deadmines
SD%Complete: 0
SDComment: Placeholder
SD%Complete: 100
SDComment:
SDCategory: Deadmines
EndScriptData */
#include "precompiled.h"
#include "deadmines.h"
enum Sounds
{
SOUND_CANNONFIRE = 1400,
SOUND_DESTROYDOOR = 3079,
SOUND_MR_SMITE_ALARM1 = 5775,
SOUND_MR_SMITE_ALARM2 = 5777
};
#define SAY_MR_SMITE_ALARM1 "You there, check out that noise!"
#define SAY_MR_SMITE_ALARM2 "We're under attack! A vast, ye swabs! Repel the invaders!"
enum Misc
{
DATA_CANNON_BLAST_TIMER = 3000,
DATA_PIRATES_DELAY_TIMER = 1000
};
struct TRINITY_DLL_DECL instance_deadmines : public ScriptedInstance
{
instance_deadmines(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
GameObject* IronCladDoor;
GameObject* DefiasCannon;
GameObject* DoorLever;
Creature* DefiasPirate1;
Creature* DefiasPirate2;
Creature* DefiasCompanion;
uint32 State;
uint32 CannonBlast_Timer;
uint32 PiratesDelay_Timer;
void Initialize()
{
IronCladDoor = NULL;
DefiasCannon = NULL;
DoorLever = NULL;
State = CANNON_NOT_USED;
}
virtual void Update(uint32 diff)
{
if (!IronCladDoor || !DefiasCannon || !DoorLever)
return;
switch(State)
{
case CANNON_GUNPOWDER_USED:
CannonBlast_Timer = DATA_CANNON_BLAST_TIMER;
// it's a hack - Mr. Smite should do that but his too far away
IronCladDoor->SetName("Mr. Smite");
IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, 0);
DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM1);
State=CANNON_BLAST_INITIATED;
break;
case CANNON_BLAST_INITIATED:
PiratesDelay_Timer = DATA_PIRATES_DELAY_TIMER;
if (CannonBlast_Timer<diff)
{
SummonCreatures();
ShootCannon();
BlastOutDoor();
LeverStucked();
IronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, 0);
DoPlaySound(IronCladDoor, SOUND_MR_SMITE_ALARM2);
State = PIRATES_ATTACK;
}else
CannonBlast_Timer-=diff;
break;
case PIRATES_ATTACK:
if (PiratesDelay_Timer<diff)
{
MoveCreaturesInside();
State = EVENT_DONE;
}else
PiratesDelay_Timer-=diff;
break;
}
}
void SummonCreatures()
{
DefiasPirate1 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() - 2,IronCladDoor->GetPositionY()-7,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
DefiasPirate2 = IronCladDoor->SummonCreature(657,IronCladDoor->GetPositionX() + 3,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
DefiasCompanion = IronCladDoor->SummonCreature(3450,IronCladDoor->GetPositionX() + 2,IronCladDoor->GetPositionY()-6,IronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
}
void MoveCreaturesInside()
{
if (!DefiasPirate1 || !DefiasPirate2 || !DefiasCompanion)
return;
MoveCreatureInside(DefiasPirate1);
MoveCreatureInside(DefiasPirate2);
MoveCreatureInside(DefiasCompanion);
}
void MoveCreatureInside(Creature* pCreature)
{
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
pCreature->GetMotionMaster()->MovePoint(0, -102.7,-655.9, pCreature->GetPositionZ());
}
void ShootCannon()
{
DefiasCannon->SetGoState(GO_STATE_ACTIVE);
DoPlaySound(DefiasCannon, SOUND_CANNONFIRE);
}
void BlastOutDoor()
{
IronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
DoPlaySound(IronCladDoor, SOUND_DESTROYDOOR);
}
void LeverStucked()
{
DoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
}
void OnGameObjectCreate(GameObject* pGo, bool add)
{
switch(pGo->GetEntry())
{
case GO_IRONCLAD_DOOR:
IronCladDoor = pGo;
break;
case GO_DEFIAS_CANNON:
DefiasCannon = pGo;
break;
case GO_DOOR_LEVER:
DoorLever = pGo;
break;
}
}
void SetData(uint32 type, uint32 data)
{
if (type == EVENT_STATE)
{
if (DefiasCannon && IronCladDoor)
State=data;
}
}
uint32 GetData(uint32 type)
{
if (type == EVENT_STATE)
return State;
return 0;
}
void DoPlaySound(GameObject* unit, uint32 sound)
{
WorldPacket data(4);
data.SetOpcode(SMSG_PLAY_SOUND);
data << uint32(sound);
unit->SendMessageToSet(&data,false);
}
void DoPlaySoundCreature(Unit* unit, uint32 sound)
{
WorldPacket data(4);
data.SetOpcode(SMSG_PLAY_SOUND);
data << uint32(sound);
unit->SendMessageToSet(&data,false);
}
};
InstanceData* GetInstanceData_instance_deadmines(Map* pMap)
{
return new instance_deadmines(pMap);
}
void AddSC_instance_deadmines()
{
Script *newscript;
newscript = new Script;
newscript->Name = "instance_deadmines";
newscript->GetInstanceData = &GetInstanceData_instance_deadmines;
newscript->RegisterSelf();
}
+4 -2
View File
@@ -59,7 +59,8 @@ extern void AddSC_boss_flamegor();
extern void AddSC_boss_chromaggus();
extern void AddSC_boss_nefarian();
extern void AddSC_boss_victor_nefarius();
extern void AddSC_instance_deadmines(); //Deadmines
extern void AddSC_deadmines(); //Deadmines
extern void AddSC_instance_deadmines();
extern void AddSC_boss_attumen(); //Karazhan
extern void AddSC_boss_curator();
extern void AddSC_boss_maiden_of_virtue();
@@ -501,7 +502,8 @@ void AddScripts()
AddSC_boss_chromaggus();
AddSC_boss_nefarian();
AddSC_boss_victor_nefarius();
AddSC_instance_deadmines(); //Deadmines
AddSC_deadmines(); //Deadmines
AddSC_instance_deadmines();
AddSC_boss_attumen(); //Karazhan
AddSC_boss_curator();
AddSC_boss_maiden_of_virtue();