ArcEmu: Icc/teleporter - ArcEmu

Jump to content

Toggle shoutbox Lastest Announcements

dfighter  : (07 December 2014 - 12:06 PM) Arcemu is in hibernation mode, please read http://arcemu.org/fo...showtopic=26903
dfighter  : (01 January 2013 - 05:56 PM) Arcemu wishes you all a happy new year!
Hasbro  : (12 September 2012 - 10:01 AM) Please excuse our outage from the web! Our web host had a major malfunction!
dfighter  : (01 September 2012 - 04:05 PM) Since the spam bots just don't want to stop, I've enabled admin verification when registering.
dfighter  : (23 January 2012 - 09:56 PM) Please note that from now on you will need to confirm your email on the wiki in order to edit it!
Hasbro  : (31 December 2011 - 12:50 PM) Happy New Years all!
Navid  : (26 December 2011 - 04:09 AM) Merry Christmas !!!!!! Happy holidays all :)
WAmadeus  : (24 December 2011 - 03:54 PM) Merry Christmas to all!
dfighter  : (24 December 2011 - 11:05 AM) The Arcemu team wishes y'all a Merry Christmukkah!
Hasbro  : (05 October 2011 - 12:53 PM) Looking for web designers for upcoming web related project. If you're interested in designing user interfaces contact me
dfighter  : (02 September 2011 - 03:47 PM) So who here wants vehicles in Arcemu? :P http://arcemu.org/fo...showtopic=25440
Hasbro  : (14 August 2011 - 03:25 PM) Join us on irc, grab an irc client and connect to irc.freenode.net join channel #arcemu /server irc.freenode.net:6667 /join #arcemu
jackpoz  : (03 August 2011 - 05:33 AM) to all Lua Engine (old one) users: please check http://arcemu.org/fo...showtopic=25274
Hasbro  : (20 May 2011 - 05:27 PM) Looking for people experienced with CMake configuration and setup! Contact me asap
Hasbro  : (15 May 2011 - 05:03 PM) ArcEmu is recruiting C++ programmers, contact Hasbro if interested.
paroxysm  : (03 May 2011 - 06:26 PM) Updated luabridge gossip example to describe the whole gossip creation process rather than just how to create menu. Gossip tutorial
paroxysm  : (23 April 2011 - 11:35 AM) Lua writers can refer to the Luabridge Tutorials section in the Wiki to learn how to write gossip code correctly.
Hasbro  : (20 April 2011 - 05:22 PM) Thank you for your continuous contribution of bug reports, we are working on them.
Hasbro  : (17 April 2011 - 03:20 AM) Please consider donating to support our bills. Donations can be sent using PayPal to donations@arcemu.org - Thank you for your support.
paroxysm  : (10 April 2011 - 12:43 AM) Refer to the Luabridge Tutorials section in the Wiki to learn the new syntax of luabridge.
Resize Shouts Area

Developing

Interesting in developing with us? Join us on IRC: irc.emulationnetwork.com:6667 #arcemu
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Icc/teleporter Similar Blizzlike

#1 User is offline   Tulba 

  • Member
  • Pip
  • Group: Members
  • Posts: 29
  • Joined: 21-November 11
  • Gender:Male
  • Location:Switzerland
  • Server OS:Windows

Posted 23 August 2014 - 01:51 PM

Hi,

I work on this ICC Script and I'am finish with the teleporter.
The Gossipscript check if the boss is death and adding the menu items.

If Lord Marrowgar was killed, the iceblocks and the door opens.

Maybe someone need it for further developement.

Raid_IceCrownCitadel.cpp
/*
 * ArcEmu MMORPG Server
 * Copyright (C) 2005-2007 Ascent Team <http://www.ascentemu.com/>
 * Copyright (C) 2008-2014 <http://www.ArcEmu.org/>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include "Setup.h"
#include "Raid_IceCrownCitadel.h"

////////////////////////////////////////////////////////
//ICC zone: 4812
//Prepared creature entry:
//
//#define CN_DEATHBRINGER_SAURFANG    37813
//#define CN_FESTERGUT                36626
//#define CN_ROTFACE                  36627
//#define CN_PROFESSOR_PUTRICIDE      36678
//#define CN_PRINCE_VALANAR           37970
//#define CN_BLOOD_QUEEN_LANATHEL     37955
//#define CN_SINDRAGOSA               36853
//#define CN_THE_LICHKING             36597
//
//ToDo: start boss scripts
////////////////////////////////////////////////////////
//Event: GunshipBattle
//
//Affects:
//Available teleports. If GunshipBattle done -> Teleportlocation 4 available.
//
//Devnotes:
//Far away from implementing this :(
///////////////////////////////////////////////////////


///////////////////////////////////////////////////////
//IceCrownCitadel Instance

class IceCrownCitadelScript : public MoonInstanceScript
{
	friend class ICCTeleporterAI; // Friendship forever ;-)

public:
	MOONSCRIPT_INSTANCE_FACTORY_FUNCTION(IceCrownCitadelScript, MoonInstanceScript);

	uint32 mMarrowgarGUID;
	uint32 mColdflameGUID;
	uint32 mDeathwhisperGUID;
	uint32 mDreamwalkerGUID;

	IceCrownCitadelScript(MapMgr* pMapMgr) : MoonInstanceScript(pMapMgr) 
	{
		//NPC states
		mMarrowgarGUID = 0;
		mColdflameGUID = 0;
		mDeathwhisperGUID = 0;
		mDreamwalkerGUID = 0;
		LadyDeathwisperElevatorGUID = 0;
		GunshipGUID = 0;
		EnemyGunshipGUID = 0;
		GunshipArmoryGUID = 0;
		DeathbringerSaurfangGUID = 0;
		DeathbringerSaurfangDoorGUID = 0;
		DeathbringerSaurfangEventGUID = 0;
		DeathbringersCacheGUID = 0;
		SaurfangTeleportGUID = 0;
		PlagueSigilGUID = 0;
		BloodwingSigilGUID = 0;
		FrostwingSigilGUID = 0;
		memset(PutricidePipeGUIDs, 0, 2 * sizeof(uint64));
		memset(PutricideGateGUIDs, 0, 2 * sizeof(uint64));
		PutricideCollisionGUID = 0;
		FestergutGUID = 0;
		RotfaceGUID = 0;
		ProfessorPutricideGUID = 0;
		PutricideTableGUID = 0;
		memset(BloodCouncilGUIDs, 0, 3 * sizeof(uint64));
		BloodCouncilControllerGUID = 0;
		BloodQueenLanaThelGUID = 0;
		CrokScourgebaneGUID = 0;
		memset(CrokCaptainGUIDs, 0, 4 * sizeof(uint64));
		SisterSvalnaGUID = 0;
		ValithriaDreamwalkerGUID = 0;
		ValithriaLichKingGUID = 0;
		ValithriaTriggerGUID = 0;
		SindragosaGUID = 0;
		SpinestalkerGUID = 0;
		RimefangGUID = 0;
		TheLichKingTeleportGUID = 0;
		TheLichKingGUID = 0;
		HighlordTirionFordringGUID = 0;
		TerenasMenethilGUID = 0;
		ArthasPlatformGUID = 0;
		ArthasPrecipiceGUID = 0;
		FrozenThroneEdgeGUID = 0;
		FrozenThroneWindGUID = 0;
		FrozenThroneWarningGUID = 0;
		BloodQuickeningMinutes = 0;
		KorKronGeneralGUID = 0;
		KorKronLieutnantGUID = 0;
		TurTunokGUID = 0;
		GeradoTheSuaveGUID = 0;
		UvulusBanefireGUID = 0;
		IkifirusTheVileGUID = 0;
		VolGukGUID = 0;
		HaraggTheUnseenGUID = 0;
		GarroshHellscreamGUID = 0;
		HighOverlordSaurfangGUID = 0;
		KorKronReaverGUID = 0;
		AllianceCommanderGUID = 0;
		SkybreakerLieutnantGUID = 0;
		AlanaMoonstrikeGUID = 0;
		TalanMoonstrikeGUID = 0;
		MalfusGrimfrostGUID = 0;
		YiliGUID = 0;
		JedebiaGUID = 0;
		NibyTheAlmightyGUID = 0;
		KingVarianWrymGUID = 0;
		MuradinBronzebardGUID = 0;
		SkybreakerMarineGUID = 0;
		//GO states
		mMarrowIceDoor1_GUID = 0;
		mMarrowIceDoor2_GUID = 0;
		mMarrowDoor_GUID = 0;

		// Set Team to 0
		InstanceTeam = 0;
	}

	// Get Playerteam for spawns (TODO: despawn horde or alli) 
	void OnPlayerEnter(Player* pPlayer)
	{
		if(!InstanceTeam)
			InstanceTeam = pPlayer->GetTeam();
	}

	void OnGameObjectPushToWorld(GameObject* pGameObject)
	{
		switch(pGameObject->GetEntry())
		{
			case GO_MARROWGAR_ICEWALL_1:
				mMarrowIceDoor1_GUID = pGameObject->GetGUID();
				break;
			case GO_MARROWGAR_ICEWALL_2:
				mMarrowIceDoor2_GUID = pGameObject->GetGUID();
				break;
			case GO_MARROWGAR_DOOR:
				mMarrowDoor_GUID = pGameObject->GetGUID();
				break;
		}
	}

	void OnCreaturePushToWorld(Creature* pCreature)
	{
		switch(pCreature->GetEntry())
		{
			// First set state
			case CN_LORD_MARROWGAR:
				{
					mMarrowgarGUID = pCreature->GetLowGUID();
					mEncounters.insert(EncounterMap::value_type(CN_LORD_MARROWGAR, BossData(0, mMarrowgarGUID)));

				}break;

			case CN_LADY_DEATHWHISPER:
				{
					mDeathwhisperGUID = pCreature->GetLowGUID();
					mEncounters.insert(EncounterMap::value_type(CN_LADY_DEATHWHISPER, BossData(0, mDeathwhisperGUID)));

				}break;

			case CN_VALITHRIA_DREAMWALKER:
				{
					mDreamwalkerGUID = pCreature->GetLowGUID();
					mEncounters.insert(EncounterMap::value_type(CN_VALITHRIA_DREAMWALKER, BossData(0, mDreamwalkerGUID)));

				}break;

			case CN_COLDFLAME:
				{
					mColdflameGUID = pCreature->GetLowGUID();
					mEncounters.insert(EncounterMap::value_type(CN_COLDFLAME, BossData(0, mColdflameGUID)));

				}break;

			// Check if team = 0 horde
			if(InstanceTeam = TEAM_HORDE)
			{
				case CN_KOR_KRON_GENERAL: 
					KorKronGeneralGUID = pCreature->GetLowGUID();
					break;
				case CN_KOR_KRON_LIEUTENANT:
					KorKronLieutnantGUID = pCreature->GetLowGUID();
					break;
				case CN_TORTUNOK: 
					TurTunokGUID = pCreature->GetLowGUID();
					break;
				case CN_GERARDO_THE_SUAVE: 
					GeradoTheSuaveGUID = pCreature->GetLowGUID();
					break;
				case CN_UVLUS_BANEFIRE: 
					UvulusBanefireGUID = pCreature->GetLowGUID();
					break;
				case CN_IKFIRUS_THE_VILE: 
					IkifirusTheVileGUID = pCreature->GetLowGUID();
					break;
				case CN_VOL_GUK: 
					VolGukGUID = pCreature->GetLowGUID();
					break;
				case CN_HARAGG_THE_UNSEEN: 
					HaraggTheUnseenGUID = pCreature->GetLowGUID();
					break;
				case CN_GARROSH_HELLSCREAM: 
					GarroshHellscreamGUID = pCreature->GetLowGUID();
					break;
				case CN_SE_HIGH_OVERLORD_SAURFANG: 
					HighOverlordSaurfangGUID = pCreature->GetLowGUID();
					break;
				case CN_SE_KOR_KRON_REAVER: 
					KorKronReaverGUID = pCreature->GetLowGUID();
					break;
			}else{
				case CN_ALLIANCE_COMMANDER: 
					AllianceCommanderGUID = pCreature->GetLowGUID();
					break;
				case CN_SKYBREAKER_LIEUTENANT: 
					SkybreakerLieutnantGUID = pCreature->GetLowGUID();
					break;
				case CN_ALANA_MOONSTRIKE: 
					AlanaMoonstrikeGUID = pCreature->GetLowGUID();
					break;
				case CN_TALAN_MOONSTRIKE: 
					TalanMoonstrikeGUID = pCreature->GetLowGUID();
					break;
				case CN_MALFUS_GRIMFROST: 
					MalfusGrimfrostGUID = pCreature->GetLowGUID();
					break;
				case CN_YILI: 
					YiliGUID = pCreature->GetLowGUID();
					break;
				case CN_JEDEBIA: 
					JedebiaGUID = pCreature->GetLowGUID();
					break;
				case CN_NIBY_THE_ALMIGHTY: 
					NibyTheAlmightyGUID = pCreature->GetLowGUID();
					break;
				case CN_KING_VARIAN_WRYNN: 
					KingVarianWrymGUID = pCreature->GetLowGUID();
					break;
				case CN_SE_MURADIN_BRONZEBEARD: 
					MuradinBronzebardGUID = pCreature->GetLowGUID();
					break;
				case CN_SE_SKYBREAKER_MARINE: 
					SkybreakerMarineGUID = pCreature->GetLowGUID();
					break;
			}
			default:
				break;
		}
	};

	void OnCreatureRemoveFromWorld(Creature* pCreature)
	{
		switch(pCreature->GetEntry())
		{
			if(InstanceTeam = TEAM_HORDE)
			{
				case CN_ALLIANCE_COMMANDER:
					AllianceCommanderGUID = 0;
					break;
				case CN_SKYBREAKER_LIEUTENANT:
					SkybreakerLieutnantGUID = 0;
					break;
				case CN_ALANA_MOONSTRIKE:
					AlanaMoonstrikeGUID = 0;
					break;
				case CN_TALAN_MOONSTRIKE:
					TalanMoonstrikeGUID = 0;
					break;
				case CN_MALFUS_GRIMFROST:
					MalfusGrimfrostGUID = 0;
					break;
				case CN_YILI:
					YiliGUID = 0;
					break;
				case CN_JEDEBIA:
					JedebiaGUID = 0;
					break;
				case CN_NIBY_THE_ALMIGHTY:
					NibyTheAlmightyGUID = 0;
					break;
				case CN_KING_VARIAN_WRYNN:
					KingVarianWrymGUID = 0;
					break;
				case CN_SE_MURADIN_BRONZEBEARD:
					MuradinBronzebardGUID = 0;
					break;
				case CN_SE_SKYBREAKER_MARINE:
					SkybreakerMarineGUID = 0;
					break;
			}else{
				case CN_KOR_KRON_GENERAL:
					KorKronGeneralGUID = 0;
					break;
				case CN_KOR_KRON_LIEUTENANT:
					KorKronLieutnantGUID = 0;
					break;
				case CN_TORTUNOK:
					TurTunokGUID = 0;
					break;
				case CN_GERARDO_THE_SUAVE:
					GeradoTheSuaveGUID = 0;
					break;
				case CN_UVLUS_BANEFIRE:
					UvulusBanefireGUID = 0;
					break;
				case CN_IKFIRUS_THE_VILE:
					IkifirusTheVileGUID = 0;
					break;
				case CN_VOL_GUK:
					VolGukGUID = 0;
					break;
				case CN_HARAGG_THE_UNSEEN:
					HaraggTheUnseenGUID = 0;
					break;
				case CN_GARROSH_HELLSCREAM:
					GarroshHellscreamGUID = 0;
					break;
				case CN_SE_HIGH_OVERLORD_SAURFANG:
					HighOverlordSaurfangGUID = 0;
					break;
				case CN_SE_KOR_KRON_REAVER:
					KorKronReaverGUID = 0;
					break;
			}
		}
	}

	void SetInstanceData(uint32 pType, uint32 pIndex, uint32 pData)
	{
		if(pType != Data_EncounterState || pIndex == 0)
			return;

		EncounterMap::iterator Iter = mEncounters.find(pIndex);
		if(Iter == mEncounters.end())
			return;

		(*Iter).second.mState = (EncounterState)pData;
	};

	uint32 GetInstanceData(uint32 pType, uint32 pIndex)
	{
		if(pType != Data_EncounterState || pIndex == 0)
			return 0;

		EncounterMap::iterator Iter = mEncounters.find(pIndex);
		if(Iter == mEncounters.end())
			return 0;

		return (*Iter).second.mState;
	};

	void OnCreatureDeath(Creature* pCreature, Unit* pUnit)
	{
		EncounterMap::iterator Iter = mEncounters.find(pCreature->GetEntry());
		if(Iter == mEncounters.end())
			return;

		(*Iter).second.mState = State_Finished;

		switch(pCreature->GetEntry())
		{
			case CN_LORD_MARROWGAR:
			{
				SetInstanceData(Data_EncounterState, CN_LORD_MARROWGAR, State_Finished);

				GameObject* pMarrowIceDoor1 = FindClosestGameObjectOnMap(GO_MARROWGAR_ICEWALL_1, Doors[0].x, Doors[0].y, Doors[0].z);
				if(pMarrowIceDoor1 != NULL)
					pMarrowIceDoor1->SetState(GAMEOBJECT_STATE_OPEN);

				GameObject* pMarrowIceDoor2 = FindClosestGameObjectOnMap(GO_MARROWGAR_ICEWALL_2, Doors[1].x, Doors[1].y, Doors[1].z);
				if(pMarrowIceDoor2 != NULL)
					pMarrowIceDoor2->SetState(GAMEOBJECT_STATE_OPEN);

				GameObject* pMarrowDoor = FindClosestGameObjectOnMap(GO_MARROWGAR_DOOR, Doors[2].x, Doors[2].y, Doors[2].z);
				if(pMarrowDoor != NULL)
					pMarrowDoor->SetState(GAMEOBJECT_STATE_OPEN);

			}break;

			case CN_LADY_DEATHWHISPER:
				SetInstanceData(Data_EncounterState, CN_LADY_DEATHWHISPER, State_Finished);
				break;

			case CN_VALITHRIA_DREAMWALKER:
				SetInstanceData(Data_EncounterState, CN_VALITHRIA_DREAMWALKER, State_Finished);
				break;

			case CN_COLDFLAME:
				SetInstanceData(Data_EncounterState, CN_COLDFLAME, State_Finished);
				break;

			default:
				break;
		}
		return;
	}


protected:
	uint32 mMarrowIceDoor1_GUID;
	uint32 mMarrowIceDoor2_GUID;
	uint32 mMarrowDoor_GUID;
	uint64 LadyDeathwisperElevatorGUID;
	uint64 GunshipGUID;
	uint64 EnemyGunshipGUID;
	uint64 GunshipArmoryGUID;
	uint64 DeathbringerSaurfangGUID;
	uint64 DeathbringerSaurfangDoorGUID;
	uint64 DeathbringerSaurfangEventGUID;   // Muradin Bronzebeard or High Overlord Saurfang
	uint64 DeathbringersCacheGUID;
	uint64 SaurfangTeleportGUID;
	uint64 PlagueSigilGUID;
	uint64 BloodwingSigilGUID;
	uint64 FrostwingSigilGUID;
	uint64 PutricidePipeGUIDs[2];
	uint64 PutricideGateGUIDs[2];
	uint64 PutricideCollisionGUID;
	uint64 FestergutGUID;
	uint64 RotfaceGUID;
	uint64 ProfessorPutricideGUID;
	uint64 PutricideTableGUID;
	uint64 BloodCouncilGUIDs[3];
	uint64 BloodCouncilControllerGUID;
	uint64 BloodQueenLanaThelGUID;
	uint64 CrokScourgebaneGUID;
	uint64 CrokCaptainGUIDs[4];
	uint64 SisterSvalnaGUID;
	uint64 ValithriaDreamwalkerGUID;
	uint64 ValithriaLichKingGUID;
	uint64 ValithriaTriggerGUID;
	uint64 SindragosaGUID;
	uint64 SpinestalkerGUID;
	uint64 RimefangGUID;
	uint64 TheLichKingTeleportGUID;
	uint64 TheLichKingGUID;
	uint64 HighlordTirionFordringGUID;
	uint64 TerenasMenethilGUID;
	uint64 ArthasPlatformGUID;
	uint64 ArthasPrecipiceGUID;
	uint64 FrozenThroneEdgeGUID;
	uint64 FrozenThroneWindGUID;
	uint64 FrozenThroneWarningGUID;
	uint64 FrozenBolvarGUID;
	uint64 PillarsChainedGUID;
	uint64 PillarsUnchainedGUID;
	uint32 KorKronGeneralGUID;
	uint32 KorKronLieutnantGUID;
	uint32 TurTunokGUID;
	uint32 GeradoTheSuaveGUID;
	uint32 UvulusBanefireGUID;
	uint32 IkifirusTheVileGUID;
	uint32 VolGukGUID;
	uint32 HaraggTheUnseenGUID;
	uint32 GarroshHellscreamGUID;
	uint32 HighOverlordSaurfangGUID;
	uint32 KorKronReaverGUID;
	uint32 AllianceCommanderGUID;
	uint32 SkybreakerLieutnantGUID;
	uint32 AlanaMoonstrikeGUID;
	uint32 TalanMoonstrikeGUID;
	uint32 MalfusGrimfrostGUID;
	uint32 YiliGUID;
	uint32 JedebiaGUID;
	uint32 NibyTheAlmightyGUID;
	uint32 KingVarianWrymGUID;
	uint32 MuradinBronzebardGUID;
	uint32 SkybreakerMarineGUID;
	uint16 BloodQuickeningMinutes;
	uint32 BloodQuickeningState;
	uint32 InstanceTeam;

};

///////////////////////////////////////////////////////
// IceCrown Teleporter
class ICCTeleporterAI : public GameObjectAIScript
{
public:

	ICCTeleporterAI(GameObject* go) : GameObjectAIScript(go){}

	~ICCTeleporterAI(){}

	static GameObjectAIScript* Create(GameObject* go) { return new ICCTeleporterAI(go); }

	void OnActivate(Player* player)
	{
		IceCrownCitadelScript* pInstance = (IceCrownCitadelScript*)player->GetMapMgr()->GetScript();
		if(!pInstance)
			return;

		GossipMenu* menu = NULL;
		objmgr.CreateGossipMenuForPlayer(&menu, _gameobject->GetGUID(), 1/*Its not one... need to be checked*/, player);
		menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to Light's Hammer.", 0);

		if(pInstance->GetInstanceData(Data_EncounterState, CN_LORD_MARROWGAR) == State_Finished)
			menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to Oratory of The Damned.", 1);

		if(pInstance->GetInstanceData(Data_EncounterState, CN_LADY_DEATHWHISPER) == State_Finished)
			menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to Rampart of Skulls.", 2);

		// GunshipBattle has to be finished...
		//menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to Deathbringer's Rise.", 3);

		if(pInstance->GetInstanceData(Data_EncounterState, CN_VALITHRIA_DREAMWALKER) == State_Finished)
			menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to the Upper Spire.", 4);

		if(pInstance->GetInstanceData(Data_EncounterState, CN_COLDFLAME) == State_Finished)
			menu->AddItem(Arcemu::Gossip::ICON_CHAT, "Teleport to Sindragosa's Lair.", 5);

		menu->SendTo(player);
	}

};

class ICCTeleporterGossip : public GossipScript
{
public:
	ICCTeleporterGossip() : GossipScript(){}

	void OnSelectOption(Object* object, Player* player, uint32 Id, const char* enteredcode)
	{
		Arcemu::Gossip::Menu::Complete(player);

		if(Id >= 7)
			return;
		else
			player->SafeTeleport(ICCTeleCoords[Id][0], player->GetInstanceID(), ICCTeleCoords[Id][1], ICCTeleCoords[Id][2], ICCTeleCoords[Id][3], ICCTeleCoords[Id][4]);
	}
};

///////////////////////////////////////////////////////
// Boss: Lord Marrowgar
// LM_BERSERK	= 47008
// BONE_SLICE	= 69055
// BONE_SPIKE	= 69057
// BONE_STORM	= 69076
// SOUL_FEAST	= 71203
// ...

///////////////////////////////////////////////////////
// Boss: Lady Deathwhisper
// MANA_BARRIER = 70842
// DEATH_AND_DECAY = 71001
// TOUCH_OF_INSIGNIFICANCE = 71204
// SHADOW_BOLT = 71254
// DOMINATE_MIND_H = 71289
// SUMMON_SHADE = 71363
// FROSTBOLT = 71420
// FROSTBOLT_VOLLEY = 72905
// ...

///////////////////////////////////////////////////////
// Boss: Valithria Dreamwalker
// ...
//
//
//
//

///////////////////////////////////////////////////////
// Boss: Cold Flame
// ...
//
//
//
//

void SetupICC(ScriptMgr* mgr)
{
	//Instance
	mgr->register_instance_script(MAP_ICECROWNCITADEL, &IceCrownCitadelScript::Create);

	//Teleporters
	mgr->register_gameobject_script(GO_TELE_1, &ICCTeleporterAI::Create);
	mgr->register_go_gossip_script(GO_TELE_1, new ICCTeleporterGossip());

	mgr->register_gameobject_script(GO_TELE_2, &ICCTeleporterAI::Create);
	mgr->register_go_gossip_script(GO_TELE_2, new ICCTeleporterGossip());

	mgr->register_gameobject_script(GO_TELE_3, &ICCTeleporterAI::Create);
	mgr->register_go_gossip_script(GO_TELE_3, new ICCTeleporterGossip());

	mgr->register_gameobject_script(GO_TELE_4, &ICCTeleporterAI::Create);
	mgr->register_go_gossip_script(GO_TELE_4, new ICCTeleporterGossip());

	mgr->register_gameobject_script(GO_TELE_5, &ICCTeleporterAI::Create);
	mgr->register_go_gossip_script(GO_TELE_5, new ICCTeleporterGossip());

	//Bosses
	//mgr->register_creature_script(CN_LORD_MARROWGAR, &LordMarrowgarAI::Create);
	//mgr->register_creature_script(CN_LADY_DEATHWHISPER, &LadyDeathwhisperAI::Create);
	//mgr->register_creature_script(CN_VALITHRIA_DREAMWALKER, &ValithriaDreamwalkerAI::Create);
	//mgr->register_creature_script(CN_COLDFLAME, &ColdFlameAI::Create);
}


Raid_IceCrownCitadel.h
/*
 * ArcScripts for ArcEmu MMORPG Server
 * Copyright (C) 2009- 2014 ArcEmu Team <http://www.arcemu.org/>
 * Copyright (C) 2008-2009 Sun++ Team <http://www.sunscripting.com/>
 *
 * 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 3 of the License, or
 * 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, see <http://www.gnu.org/licenses/>.
 */

#define MAP_ICECROWNCITADEL 631

enum IceCrownCitadelGOs{
	//GO_Tele
	GO_TELE_1 = 202242,
	GO_TELE_2 = 202243,
	GO_TELE_3 = 202244,
	GO_TELE_4 = 202245,
	GO_TELE_5 = 202246,

	//GO_Interactive
	GO_MARROWGAR_ICEWALL_1 = 201911,
	GO_MARROWGAR_ICEWALL_2 = 201910,
	GO_MARROWGAR_DOOR = 201563
};

enum IceCrownCitadelCNentry{

   CN_HIGHLORD_TIRION_FORDRING_LH = 37119,
   CN_THE_LICH_KING_LH = 37181,
   CN_HIGHLORD_BOLVAR_FORDRAGON_LH = 37183,
   CN_KOR_KRON_GENERAL = 37189,
   CN_ALLIANCE_COMMANDER = 37190,
   CN_TORTUNOK = 37992,
   CN_ALANA_MOONSTRIKE = 37999,
   CN_GERARDO_THE_SUAVE = 37993,
   CN_TALAN_MOONSTRIKE = 37998,
   CN_UVLUS_BANEFIRE = 38284,
   CN_MALFUS_GRIMFROST = 38283,
   CN_IKFIRUS_THE_VILE = 37991,
   CN_YILI = 37997,
   CN_VOL_GUK = 38841,
   CN_JEDEBIA = 38840,
   CN_HARAGG_THE_UNSEEN = 38181,
   CN_NIBY_THE_ALMIGHTY = 38182,
   CN_GARROSH_HELLSCREAM = 39372,
   CN_KING_VARIAN_WRYNN = 39371,
   CN_DEATHBOUND_WARD = 37007,
   CN_LADY_JAINA_PROUDMOORE_QUEST = 38606,
   CN_MURADIN_BRONZEBEARD_QUEST = 38607,
   CN_UTHER_THE_LIGHTBRINGER_QUEST = 38608,
   CN_LADY_SYLVANAS_WINDRUNNER_QUEST = 38609,

   CN_INFILTRATOR_MINCHAR = 38471,
   CN_KOR_KRON_LIEUTENANT = 38491,
   CN_SKYBREAKER_LIEUTENANT = 38492,
   CN_ROTTING_FROST_GIANT_10 = 38490,
   CN_ROTTING_FROST_GIANT_25 = 38494,
   CN_ALCHEMIST_ADRIANNA = 38501,
   CN_ALRIN_THE_AGILE = 38551,
   CN_INFILTRATOR_MINCHAR_BQ = 38558,
   CN_MINCHAR_BEAM_STALKER = 38557,
   CN_VALITHRIA_DREAMWALKER_QUEST = 38589,

   CN_LORD_MARROWGAR = 36612,
   CN_COLDFLAME = 36672,
   CN_BONE_SPIKE = 36619,

   CN_LADY_DEATHWHISPER = 36855,
   CN_CULT_FANATIC = 37890,
   CN_DEFORMED_FANATIC = 38135,
   CN_REANIMATED_FANATIC = 38009,
   CN_CULT_ADHERENT = 37949,
   CN_EMPOWERED_ADHERENT = 38136,
   CN_REANIMATED_ADHERENT = 38010,
   CN_VENGEFUL_SHADE = 38222,

   CN_MARTYR_STALKER_IGB_SAURFANG = 38569,
   CN_ALLIANCE_GUNSHIP_CANNON = 36838,
   CN_HORDE_GUNSHIP_CANNON = 36839,
   CN_SKYBREAKER_DECKHAND = 36970,
   CN_ORGRIMS_HAMMER_CREW = 36971,
   CN_IGB_HIGH_OVERLORD_SAURFANG = 36939,
   CN_IGB_MURADIN_BRONZEBEARD = 36948,
   CN_THE_SKYBREAKER = 37540,
   CN_ORGRIMS_HAMMER = 37215,
   CN_GUNSHIP_HULL = 37547,
   CN_TELEPORT_PORTAL = 37227,
   CN_TELEPORT_EXIT = 37488,
   CN_SKYBREAKER_SORCERER = 37116,
   CN_SKYBREAKER_RIFLEMAN = 36969,
   CN_SKYBREAKER_MORTAR_SOLDIER = 36978,
   CN_SKYBREAKER_MARINE = 36950,
   CN_SKYBREAKER_SERGEANT = 36961,
   CN_KOR_KRON_BATTLE_MAGE = 37117,
   CN_KOR_KRON_AXETHROWER = 36968,
   CN_KOR_KRON_ROCKETEER = 36982,
   CN_KOR_KRON_REAVER = 36957,
   CN_KOR_KRON_SERGEANT = 36960,
   CN_ZAFOD_BOOMBOX = 37184,
   CN_HIGH_CAPTAIN_JUSTIN_BARTLETT = 37182,
   CN_SKY_REAVER_KORM_BLACKSCAR = 37833,

   CN_DEATHBRINGER_SAURFANG = 37813,
   CN_BLOOD_BEAST = 38508,
   CN_SE_JAINA_PROUDMOORE = 37188,
   CN_SE_MURADIN_BRONZEBEARD = 37200,
   CN_SE_KING_VARIAN_WRYNN = 37879,
   CN_SE_HIGH_OVERLORD_SAURFANG = 37187,
   CN_SE_KOR_KRON_REAVER = 37920,
   CN_SE_SKYBREAKER_MARINE = 37830,
   CN_FROST_FREEZE_TRAP = 37744,

   CN_FESTERGUT = 36626,
   CN_GAS_DUMMY = 36659,
   CN_MALLEABLE_OOZE_STALKER = 38556,

   CN_ROTFACE = 36627,
   CN_OOZE_SPRAY_STALKER = 37986,
   CN_PUDDLE_STALKER = 37013,
   CN_UNSTABLE_EXPLOSION_STALKER = 38107,
   CN_VILE_GAS_STALKER = 38548,

   CN_PROFESSOR_PUTRICIDE = 36678,
   CN_ABOMINATION_WING_MAD_SCIENTIST_STALKER = 37824,
   CN_GROWING_OOZE_PUDDLE = 37690,
   CN_GAS_CLOUD = 37562,
   CN_VOLATILE_OOZE = 37697,
   CN_CHOKING_GAS_BOMB = 38159,
   CN_TEAR_GAS_TARGET_STALKER = 38317,
   CN_MUTATED_ABOMINATION_10 = 37672,
   CN_MUTATED_ABOMINATION_25 = 38285,

   CN_PRINCE_KELESETH = 37972,
   CN_PRINCE_TALDARAM = 37973,
   CN_PRINCE_VALANAR = 37970,
   CN_BLOOD_ORB_CONTROLLER = 38008,
   CN_FLOATING_TRIGGER = 30298,
   CN_DARK_NUCLEUS = 38369,
   CN_BALL_OF_FLAME = 38332,
   CN_BALL_OF_INFERNO_FLAME = 38451,
   CN_KINETIC_BOMB_TARGET = 38458,
   CN_KINETIC_BOMB = 38454,
   CN_SHOCK_VORTEX = 38422,

   CN_BLOOD_QUEEN_LANA_THEL = 37955,

   CN_CROK_SCOURGEBANE = 37129,
   CN_CAPTAIN_ARNATH = 37122,
   CN_CAPTAIN_BRANDON = 37123,
   CN_CAPTAIN_GRONDEL = 37124,
   CN_CAPTAIN_RUPERT = 37125,
   CN_CAPTAIN_ARNATH_UNDEAD = 37491,
   CN_CAPTAIN_BRANDON_UNDEAD = 37493,
   CN_CAPTAIN_GRONDEL_UNDEAD = 37494,
   CN_CAPTAIN_RUPERT_UNDEAD = 37495,
   CN_YMIRJAR_BATTLE_MAIDEN = 37132,
   CN_YMIRJAR_DEATHBRINGER = 38125,
   CN_YMIRJAR_FROSTBINDER = 37127,
   CN_YMIRJAR_HUNTRESS = 37134,
   CN_YMIRJAR_WARLORD = 37133,
   CN_SISTER_SVALNA = 37126,
   CN_IMPALING_SPEAR = 38248,

   CN_VALITHRIA_DREAMWALKER = 36789,
   CN_GREEN_DRAGON_COMBAT_TRIGGER = 38752,
   CN_RISEN_ARCHMAGE = 37868,
   CN_BLAZING_SKELETON = 36791,
   CN_SUPPRESSER = 37863,
   CN_BLISTERING_ZOMBIE = 37934,
   CN_GLUTTONOUS_ABOMINATION = 37886,
   CN_MANA_VOID = 38068,
   CN_COLUMN_OF_FROST = 37918,
   CN_ROT_WORM = 37907,
   CN_THE_LICH_KING_VALITHRIA = 16980,
   CN_DREAM_PORTAL_PRE_EFFECT = 38186,
   CN_NIGHTMARE_PORTAL_PRE_EFFECT = 38429,
   CN_DREAM_PORTAL = 37945,
   CN_NIGHTMARE_PORTAL = 38430,

   CN_SINDRAGOSA = 36853,
   CN_SPINESTALKER = 37534,
   CN_RIMEFANG = 37533,
   CN_FROSTWARDEN_HANDLER = 37531,
   CN_FROSTWING_WHELP = 37532,
   CN_ICY_BLAST = 38223,
   CN_FROST_BOMB = 37186,
   CN_ICE_TOMB = 36980,

   CN_THE_LICH_KING = 36597,
   CN_HIGHLORD_TIRION_FORDRING_LK = 38995,
   CN_TERENAS_MENETHIL_FROSTMOURNE = 36823,
   CN_SPIRIT_WARDEN = 36824,
   CN_TERENAS_MENETHIL_FROSTMOURNE_H = 39217,
   CN_SHAMBLING_HORROR = 37698,
   CN_DRUDGE_GHOUL = 37695,
   CN_ICE_SPHERE = 36633,
   CN_RAGING_SPIRIT = 36701,
   CN_DEFILE = 38757,
   CN_VALKYR_SHADOWGUARD = 36609,
   CN_VILE_SPIRIT = 37799,
   CN_WICKED_SPIRIT = 39190,
   CN_STRANGULATE_VEHICLE = 36598,
   CN_WORLD_TRIGGER = 22515,
   CN_WORLD_TRIGGER_INFINITE_AOI = 36171,
   CN_SPIRIT_BOMB = 39189,
   CN_FROSTMOURNE_TRIGGER = 38584
};

// CN ids for Encounter State ?!?
enum IceCrownCitadelCNid{
   CNID_LORD_MARROWGAR         = 0,
   CNID_COLDFLAME              = 1,
   CNID_LADY_DEATHWHISPER      = 2,
   CNID_VALITHRIA_DREAMWALKER  = 3,
   CNID_END
};

static Location Doors[] =
{
	{ -407.35f, 2147.88f, 42.85f, 0 },	     //IceWall1
	{ -412.97f, 2285.24f, 42.01f, 0 },       //IceWall2
	{ -520.44f, 2211.47f, 63.14f, 0 },       //Door behinde ice
};

// Teleport coords for Gossip
static float ICCTeleCoords[6][5] =
{	// Maybe moving this to a clean mysql table with all teleports in it... maybe as spell or event?
	{ MAP_ICECROWNCITADEL, -17.856115f, 2211.640137f, 30.115812f, 0.0f },     //1   Teleport to Light's Hammer 
	{ MAP_ICECROWNCITADEL, -503.632599f, 2211.219971f, 62.823246f, 0.0f },    //2   Teleport to Oratory of The Damned
	{ MAP_ICECROWNCITADEL, -615.098267f, 2211.509766f, 199.973083f, 0.0f },   //3   Teleport to Rampart of Skulls 
	{ MAP_ICECROWNCITADEL, -549.151001f, 2211.463967f, 539.290222f, 0.0f },   //4   Teleport to Deathbringer's Rise 
	{ MAP_ICECROWNCITADEL, 4356.780273f, 2863.636230f, 349.337982f, 0.0f },   //5   Teleport to the Upper Spire.
	{ MAP_ICECROWNCITADEL, 4453.248535f, 2769.325684f, 349.347473f, 0.0f }    //6   Teleport to Sindragosa's Lair
};

void SetupICC(ScriptMgr* mgr);

0

#2 User is offline   lexythelord 

  • Member
  • Pip
  • Group: Members
  • Posts: 40
  • Joined: 23-December 10
  • Gender:Male

Posted 23 August 2014 - 02:10 PM

It's great that you want to improve ArcEmu but in my opinion you should work on features not yet implemented rather than scripts.
0

#3 User is offline   Tulba 

  • Member
  • Pip
  • Group: Members
  • Posts: 29
  • Joined: 21-November 11
  • Gender:Male
  • Location:Switzerland
  • Server OS:Windows

Posted 23 August 2014 - 02:17 PM

View Postlexythelord, on 23 August 2014 - 02:10 PM, said:

It's great that you want to improve ArcEmu but in my opinion you should work on features not yet implemented rather than scripts.


Yes this is your opinion.
I am doing what I can do. The other things should people do who know about it.

This topic is for sharing core modifications, so I share it.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users