mirror of
https://github.com/mangosfour/server.git
synced 2025-12-31 13:37:07 +00:00
Script added - npc_kharan_mighthammer
Script added - npc_kharan_mighthammer
This commit is contained in:
parent
ada080f9c0
commit
d7fa310ebe
7 changed files with 250 additions and 31 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -315,6 +315,7 @@ struct npc_shaheen : public CreatureScript
|
|||
void AddSC_mana_tombs()
|
||||
{
|
||||
Script* s;
|
||||
|
||||
s = new npc_shaheen();
|
||||
s->RegisterSelf();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue