Index: scripts/eastern_kingdoms/scarlet_enclave/ebon_hold.cpp =================================================================== --- scripts/eastern_kingdoms/scarlet_enclave/ebon_hold.cpp (revision 1816) +++ scripts/eastern_kingdoms/scarlet_enclave/ebon_hold.cpp (working copy) @@ -503,11 +503,19 @@ SAY_DUEL_H = -1609023, SAY_DUEL_I = -1609024, + GOSSIP_ACCEPT_DUEL = -1999926, + SPELL_DUEL = 52996, +// SPELL_DUEL_FLAGO = 191126, SPELL_DUEL_TRIGGERED = 52990, SPELL_DUEL_VICTORY = 52994, SPELL_DUEL_FLAG = 52991, + SPELL_BLOOD_STRIKE = 52374, + SPELL_DEATH_COIL = 52375, + SPELL_ICY_TOUCH = 52372, + SPELL_PLAGUE_STRIKE = 52373, + QUEST_DEATH_CHALLENGE = 12733, FACTION_HOSTILE = 2068 }; @@ -517,8 +525,6 @@ SAY_DUEL_A, SAY_DUEL_B, SAY_DUEL_C, SAY_DUEL_D, SAY_DUEL_E, SAY_DUEL_F, SAY_DUEL_G, SAY_DUEL_H, SAY_DUEL_I }; -#define GOSSIP_ACCEPT_DUEL "I challenge you, death knight!" - struct MANGOS_DLL_DECL npc_death_knight_initiateAI : public ScriptedAI { npc_death_knight_initiateAI(Creature* pCreature) : ScriptedAI(pCreature) { Reset(); } @@ -526,6 +532,11 @@ uint64 m_uiDuelerGUID; uint32 m_uiDuelTimer; bool m_bIsDuelInProgress; + uint32 BloodStrike_Timer; + uint32 DeathCoil_Timer; + uint32 IcyTouch_Timer; + uint32 PlagueStrike_Timer; +// uint32 PowerLine; void Reset() { @@ -533,10 +544,18 @@ m_creature->setFaction(m_creature->GetCreatureInfo()->faction_A); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); + m_creature->setPowerType(POWER_RUNIC_POWER); + m_creature->RemoveGameObject(SPELL_DUEL_FLAG, true); //dont work m.b problem from target 49 ? m_uiDuelerGUID = 0; m_uiDuelTimer = 5000; m_bIsDuelInProgress = false; + + IcyTouch_Timer = 2000; + PlagueStrike_Timer = 5000; + BloodStrike_Timer = 4000; + DeathCoil_Timer = 6000; +// PowerLine = 0; } void AttackedBy(Unit* pAttacker) @@ -567,7 +586,10 @@ if (Player* pPlayer = m_creature->GetMap()->GetPlayer(m_uiDuelerGUID)) m_creature->CastSpell(pPlayer, SPELL_DUEL_VICTORY, true); + m_creature->RemoveGameObject(SPELL_DUEL_FLAG,true); + //m_creature->getVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); //dont work m.b problem from target 49 ? + //possibly not evade, but instead have end sequenze EnterEvadeMode(); } @@ -576,7 +598,7 @@ void UpdateAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) - { + { if (m_bIsDuelInProgress) { if (m_uiDuelTimer < uiDiff) @@ -592,8 +614,36 @@ return; } - // TODO: spells + if (BloodStrike_Timer < uiDiff) + { + DoCast(m_creature->getVictim(),SPELL_BLOOD_STRIKE); + BloodStrike_Timer = 9000; + }else BloodStrike_Timer -= uiDiff; + + if (DeathCoil_Timer < uiDiff) + { + DoCast(m_creature->getVictim(),SPELL_DEATH_COIL); + DeathCoil_Timer = 8000; + }else DeathCoil_Timer -= uiDiff; + if (IcyTouch_Timer < uiDiff) + { + DoCast(m_creature->getVictim(),SPELL_ICY_TOUCH); + IcyTouch_Timer = 8000; + }else IcyTouch_Timer -= uiDiff; + + if (PlagueStrike_Timer < uiDiff) + { + DoCast(m_creature->getVictim(),SPELL_PLAGUE_STRIKE); + PlagueStrike_Timer = 8000; + }else PlagueStrike_Timer -= uiDiff; + + if(m_creature->getVictim()->GetHealthPercent() < 10 ) + { + EnterEvadeMode(); + Reset(); + } + DoMeleeAttackIfReady(); } }; @@ -605,10 +655,16 @@ bool GossipHello_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature) { - if (pPlayer->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE) + if (pPlayer->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE && pCreature->GetHealthPercent() == (100)) { - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ACCEPT_DUEL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + if (pPlayer->GetHealthPercent() < (30) ) + return true; + if (pPlayer->isInCombat() || pCreature->isInCombat()) + return true; + + pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_ACCEPT_DUEL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); pPlayer->SEND_GOSSIP_MENU(13433, pCreature->GetGUID()); + pCreature->HandleEmoteCommand(1); return true; } return false; @@ -620,6 +676,14 @@ { pPlayer->CLOSE_GOSSIP_MENU(); + WorldPacket data(SMSG_DUEL_COUNTDOWN, 3); + data << (uint32)3000; // 3 seconds [duel timer for player] + pPlayer->GetSession()->SendPacket(&data); + + pCreature->GetMotionMaster()->MovementExpired(); + pCreature->GetMotionMaster()->MoveChase(pPlayer); + pCreature->HandleEmoteCommand(60); + if (npc_death_knight_initiateAI* pInitiateAI = dynamic_cast(pCreature->AI())) { if (pInitiateAI->m_bIsDuelInProgress) @@ -632,7 +696,7 @@ DoScriptText(m_auiRandomSay[uiSayId], pCreature, pPlayer); pCreature->CastSpell(pPlayer, SPELL_DUEL, false); - pCreature->CastSpell(pPlayer, SPELL_DUEL_FLAG, true); + pCreature->CastSpell(pCreature, SPELL_DUEL_FLAG, true); } return true; } @@ -837,11 +901,6 @@ SPELL_CHAINED_PESANT_BREATH = 54613, SPELL_INITIATE_VISUAL = 51519, - SPELL_BLOOD_STRIKE = 52374, - SPELL_DEATH_COIL = 52375, - SPELL_ICY_TOUCH = 52372, - SPELL_PLAGUE_STRIKE = 52373, - NPC_ANCHOR = 29521, FACTION_MONSTER = 16,