Script added - npc_kharan_mighthammer

Script added - npc_kharan_mighthammer
This commit is contained in:
Charles A Edwards 2016-09-02 09:16:33 +01:00 committed by Antz
parent ada080f9c0
commit d7fa310ebe
7 changed files with 250 additions and 31 deletions

View file

@ -58,9 +58,8 @@ bool ScriptedAI::IsVisible(Unit* pWho) const
{
return false;
}
// return m_creature->IsWithinDist(pWho, VISIBLE_RANGE) && pWho->IsVisibleForOrDetect(m_creature, m_creature, true); 166.0f
return m_creature->IsWithinDist(pWho, 166.0f) && pWho->IsVisibleForOrDetect(m_creature, m_creature, true);
return m_creature->IsWithinDist(pWho, VISIBLE_RANGE) && pWho->IsVisibleForOrDetect(m_creature, m_creature, true);
}
/**

View file

@ -28,7 +28,7 @@
* ScriptData
* SDName: Blackrock_Depths
* SD%Complete: 80
* SDComment: Quest support: 4322, 7604, 9015.
* SDComment: Quest support: 4001, 4322, 4342, 7604, 9015.
* SDCategory: Blackrock Depths
* EndScriptData
*/
@ -39,6 +39,7 @@
* go_relic_coffer_door
* at_ring_of_law
* npc_grimstone
* npc_kharan_mighthammer
* npc_marshal_windsor
* npc_dughal_stormwing
* npc_tobias_seecher
@ -1129,6 +1130,100 @@ struct boss_doomrel : public CreatureScript
}
};
/*######
## npc_kharan_mighthammer
######*/
enum
{
QUEST_WHAT_IS_GOING_ON = 4001,
QUEST_KHARANS_TALE = 4342
};
#define GOSSIP_ITEM_KHARAN_1 "I need to know where the princess are, Kharan!"
#define GOSSIP_ITEM_KHARAN_2 "All is not lost, Kharan!"
#define GOSSIP_ITEM_KHARAN_3 "Gor'shak is my friend, you can trust me."
#define GOSSIP_ITEM_KHARAN_4 "Not enough, you need to tell me more."
#define GOSSIP_ITEM_KHARAN_5 "So what happened?"
#define GOSSIP_ITEM_KHARAN_6 "Continue..."
#define GOSSIP_ITEM_KHARAN_7 "So you suspect that someone on the inside was involved? That they were tipped off?"
#define GOSSIP_ITEM_KHARAN_8 "Continue with your story please."
#define GOSSIP_ITEM_KHARAN_9 "Indeed."
#define GOSSIP_ITEM_KHARAN_10 "The door is open, Kharan. You are a free man."
struct npc_kharan_mighthammer : public CreatureScript
{
npc_kharan_mighthammer() : CreatureScript("npc_kharan_mighthammer") {}
bool OnGossipHello(Player* pPlayer, Creature* pCreature) override
{
if (pCreature->IsQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetObjectGuid());
if (pPlayer->GetQuestStatus(QUEST_WHAT_IS_GOING_ON) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (pPlayer->GetQuestStatus(QUEST_KHARANS_TALE) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
if (pPlayer->GetTeam() == HORDE)
pPlayer->SEND_GOSSIP_MENU(2473, pCreature->GetObjectGuid());
else
pPlayer->SEND_GOSSIP_MENU(2474, pCreature->GetObjectGuid());
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction) override
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(2475, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
pPlayer->SEND_GOSSIP_MENU(2476, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
pPlayer->SEND_GOSSIP_MENU(2477, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
pPlayer->SEND_GOSSIP_MENU(2478, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+5:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
pPlayer->SEND_GOSSIP_MENU(2479, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+6:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_8, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
pPlayer->SEND_GOSSIP_MENU(2480, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+7:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_9, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
pPlayer->SEND_GOSSIP_MENU(2481, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+8:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KHARAN_10, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
pPlayer->SEND_GOSSIP_MENU(2482, pCreature->GetObjectGuid());
break;
case GOSSIP_ACTION_INFO_DEF+9:
pPlayer->CLOSE_GOSSIP_MENU();
if (pPlayer->GetTeam() == HORDE)
pPlayer->AreaExploredOrEventHappens(QUEST_WHAT_IS_GOING_ON);
else
pPlayer->AreaExploredOrEventHappens(QUEST_KHARANS_TALE);
break;
}
return true;
}
};
void AddSC_blackrock_depths()
{
Script *s;
@ -1155,6 +1250,8 @@ void AddSC_blackrock_depths()
s->RegisterSelf();
s = new boss_doomrel();
s->RegisterSelf();
s = new npc_kharan_mighthammer();
s->RegisterSelf();
//pNewScript = new Script;
//pNewScript->Name = "go_shadowforge_brazier";

View file

@ -35,14 +35,14 @@
/**
* ContentData
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK)
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK) || defined(CATA)
* go_molten_core_rune
#endif
* EndContentData
*/
#include "precompiled.h"
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK)
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK) || defined(CATA)
#include "molten_core.h"
/*######
@ -74,7 +74,7 @@ struct go_molten_core_rune : public GameObjectScript
#endif
void AddSC_molten_core()
{
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK)
#if defined (CLASSIC) || defined (TBC) || defined(WOTLK) || defined(CATA)
Script* s;
s = new go_molten_core_rune();
s->RegisterSelf();

View file

@ -82,12 +82,7 @@ struct boss_moam : public CreatureScript
void Aggro(Unit* /*pWho*/) override
{
DoScriptText(EMOTE_AGGRO, m_creature);
#if defined (CLASSIC) || defined (TBC) || defined (WOTLK)
m_creature->SetMaxPower(POWER_MANA, m_creature->GetCreatureInfo()->MaxLevelMana);
#endif
#if defined (CATA)
m_creature->SetMaxPower(POWER_MANA, m_creature->GetCreatureInfo()->MaxLevelMana);// TODO MaxLevelHealth);
#endif
}
void UpdateAI(const uint32 uiDiff) override

View file

@ -1,4 +1,11 @@
/* Copyright (C) 2006 - 2013 ScriptDev2 <http://www.scriptdev2.com/>
/**
* ScriptDev3 is an extension for mangos providing enhanced features for
* area triggers, creatures, game objects, instances, items, and spells beyond
* the default database scripting in mangos.
*
* Copyright (C) 2006-2013 ScriptDev2 <http://www.scriptdev2.com/>
* Copyright (C) 2014-2016 MaNGOS <https://getmangos.eu>
*
* 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,23 +24,28 @@
* and lore are copyrighted by Blizzard Entertainment, Inc.
*/
/* ScriptData
SDName: Borean_Tundra
SD%Complete: 100
SDComment: Quest support: 11570, 11590, 11673, 11728, 11865, 11889, 11897, 11919, 11940
SDCategory: Borean Tundra
EndScriptData */
/**
* ScriptData
* SDName: Borean_Tundra
* SD%Complete: 100
* SDComment: Quest support: 11570, 11590, 11673, 11728, 11865, 11889, 11897, 11919, 11940
* SDCategory: Borean_Tundra
* EndScriptData
*/
/* ContentData
npc_nesingwary_trapper
npc_sinkhole_kill_credit
npc_lurgglbr
npc_beryl_sorcerer
npc_captured_beryl_sorcerer
npc_nexus_drake_hatchling
npc_scourged_flamespitter
npc_bonker_togglevolt
EndContentData */
/**
* ContentData
* npc_nesingwary_trapper
* npc_sinkhole_kill_credit
* npc_lurgglbr
* npc_beryl_sorcerer
* npc_captured_beryl_sorcerer
* npc_nexus_drake_hatchling
* npc_scourged_flamespitter
* npc_bonker_togglevolt
* npc_jenny
* EndContentData
*/
#include "precompiled.h"
#include "escort_ai.h"
@ -1128,6 +1140,119 @@ struct npc_bonker_togglevolt : public CreatureScript
}
};
/*######
## npc_jenny
######*/
enum
{
SPELL_CREATES_CARRIED = 46340,
SPELL_DROP_CRATE = 46342,
SPELL_JENNY_CREDIT = 46358,
NPC_FEZZIX = 25849,
QUEST_ID_LOADER_UP = 11881,
};
struct npc_jenny : public CreatureScript
{
npc_jenny() : CreatureScript("npc_jenny") {}
struct npc_jennyAI : public FollowerAI
{
npc_jennyAI(Creature* pCreature) : FollowerAI(pCreature)
{
m_bFollowStarted = false;
m_bEventComplete = false;
Reset();
}
bool m_bEventComplete;
bool m_bFollowStarted;
uint32 m_uiDropDelayTimer;
void Reset() override
{
m_uiDropDelayTimer = 0;
}
void AttackedBy(Unit* pAttacker) override
{
if (!m_uiDropDelayTimer)
{
if (DoCastSpellIfCan(m_creature, SPELL_DROP_CRATE) == CAST_OK)
{
m_creature->RemoveAuraHolderFromStack(SPELL_CREATES_CARRIED);
m_uiDropDelayTimer = 10000;
// check if all crates are dropped
if (!m_creature->HasAura(SPELL_CREATES_CARRIED))
{
FollowerAI::JustDied(pAttacker);
m_creature->ForcedDespawn();
}
}
}
}
void AttackStart(Unit* pWho) override { }
void MoveInLineOfSight(Unit* pWho) override
{
if (m_bEventComplete)
return;
if (pWho->GetEntry() == NPC_FEZZIX && m_creature->IsWithinDistInMap(pWho, 10.0f))
{
if (DoCastSpellIfCan(m_creature, SPELL_JENNY_CREDIT) == CAST_OK)
{
SetFollowComplete(true);
float fX, fY, fZ;
pWho->GetContactPoint(m_creature, fX, fY, fZ);
m_creature->GetMotionMaster()->MovePoint(0, fX, fY, fZ);
m_creature->ForcedDespawn(15000);
m_bEventComplete = true;
}
}
}
void UpdateFollowerAI(const uint32 uiDiff)
{
if (!m_bFollowStarted)
{
if (Player* pSummoner = m_creature->GetCharmerOrOwnerPlayerOrPlayerItself())
{
StartFollow(pSummoner, pSummoner->getFaction(), GetQuestTemplateStore(QUEST_ID_LOADER_UP));
if (DoCastSpellIfCan(m_creature, SPELL_CREATES_CARRIED) == CAST_OK)
m_bFollowStarted = true;
}
}
if (m_uiDropDelayTimer)
{
if (m_uiDropDelayTimer <= uiDiff)
m_uiDropDelayTimer = 0;
else
m_uiDropDelayTimer -= uiDiff;
}
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
return;
}
};
CreatureAI* GetAI(Creature* pCreature) override
{
return new npc_jennyAI(pCreature);
}
};
void AddSC_borean_tundra()
{
Script* s;
@ -1146,6 +1271,8 @@ void AddSC_borean_tundra()
s->RegisterSelf();
s = new npc_bonker_togglevolt();
s->RegisterSelf();
s = new npc_jenny();
s->RegisterSelf();
s = new spell_throw_wolf_batt();
s->RegisterSelf();

View file

@ -315,6 +315,7 @@ struct npc_shaheen : public CreatureScript
void AddSC_mana_tombs()
{
Script* s;
s = new npc_shaheen();
s->RegisterSelf();
}

View file

@ -1628,7 +1628,7 @@ struct spell_totem_of_spirits : public SpellScript
}
};
#if defined (TBC) || defined (WOTLK)
#if defined (TBC) || defined (WOTLK) || defined(CATA)
struct aura_elemental_sieve : public AuraScript
{
aura_elemental_sieve() : AuraScript("aura_elemental_sieve") {}
@ -2333,7 +2333,7 @@ void AddSC_shadowmoon_valley()
s->RegisterSelf();
s = new spell_totem_of_spirits();
s->RegisterSelf();
#if defined (TBC) || defined (WOTLK)
#if defined (TBC) || defined (WOTLK) || defined(CATA)
s = new aura_elemental_sieve();
s->RegisterSelf();
#endif