mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[8553] removed spiritguide from code
they basicaly should *autocast 22011 *give player after gossiphello buff 2584 *port players away to another spiritguides, when they die so this can be done by a script and maybe eventai
This commit is contained in:
parent
2da82a8c68
commit
1f9b4ca4c3
12 changed files with 25 additions and 153 deletions
|
|
@ -130,7 +130,6 @@ BattleGround::BattleGround()
|
|||
m_Status = STATUS_NONE;
|
||||
m_ClientInstanceID = 0;
|
||||
m_EndTime = 0;
|
||||
m_LastResurrectTime = 0;
|
||||
m_QueueId = QUEUE_ID_MAX_LEVEL_19;
|
||||
m_InvitedAlliance = 0;
|
||||
m_InvitedHorde = 0;
|
||||
|
|
@ -260,62 +259,6 @@ void BattleGround::Update(uint32 diff)
|
|||
}
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
/*** BATTLEGROUND RESSURECTION SYSTEM ***/
|
||||
/*********************************************************/
|
||||
|
||||
//this should be handled by spell system
|
||||
m_LastResurrectTime += diff;
|
||||
if (m_LastResurrectTime >= RESURRECTION_INTERVAL)
|
||||
{
|
||||
if (GetReviveQueueSize())
|
||||
{
|
||||
for(std::map<uint64, std::vector<uint64> >::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
|
||||
{
|
||||
Creature *sh = NULL;
|
||||
for(std::vector<uint64>::const_iterator itr2 = (itr->second).begin(); itr2 != (itr->second).end(); ++itr2)
|
||||
{
|
||||
Player *plr = objmgr.GetPlayer(*itr2);
|
||||
if (!plr)
|
||||
continue;
|
||||
|
||||
if (!sh && plr->IsInWorld())
|
||||
{
|
||||
sh = plr->GetMap()->GetCreature(itr->first);
|
||||
// only for visual effect
|
||||
if (sh)
|
||||
// Spirit Heal, effect 117
|
||||
sh->CastSpell(sh, SPELL_SPIRIT_HEAL, true);
|
||||
}
|
||||
|
||||
// Resurrection visual
|
||||
plr->CastSpell(plr, SPELL_RESURRECTION_VISUAL, true);
|
||||
m_ResurrectQueue.push_back(*itr2);
|
||||
}
|
||||
(itr->second).clear();
|
||||
}
|
||||
|
||||
m_ReviveQueue.clear();
|
||||
m_LastResurrectTime = 0;
|
||||
}
|
||||
else
|
||||
// queue is clear and time passed, just update last resurrection time
|
||||
m_LastResurrectTime = 0;
|
||||
}
|
||||
else if (m_LastResurrectTime > 500) // Resurrect players only half a second later, to see spirit heal effect on NPC
|
||||
{
|
||||
for(std::vector<uint64>::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr)
|
||||
{
|
||||
Player *plr = objmgr.GetPlayer(*itr);
|
||||
if (!plr)
|
||||
continue;
|
||||
plr->ResurrectPlayer(1.0f);
|
||||
plr->CastSpell(plr, SPELL_SPIRIT_HEAL_MANA, true);
|
||||
ObjectAccessor::Instance().ConvertCorpseForPlayer(*itr);
|
||||
}
|
||||
m_ResurrectQueue.clear();
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
/*** BATTLEGROUND BALLANCE SYSTEM ***/
|
||||
/*********************************************************/
|
||||
|
|
@ -972,8 +915,6 @@ void BattleGround::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
|
|||
m_PlayerScores.erase(itr2);
|
||||
}
|
||||
|
||||
RemovePlayerFromResurrectQueue(guid);
|
||||
|
||||
Player *plr = objmgr.GetPlayer(guid);
|
||||
|
||||
// should remove spirit of redemption
|
||||
|
|
@ -1088,7 +1029,6 @@ void BattleGround::Reset()
|
|||
SetStatus(STATUS_WAIT_QUEUE);
|
||||
SetStartTime(0);
|
||||
SetEndTime(0);
|
||||
SetLastResurrectTime(0);
|
||||
SetArenaType(0);
|
||||
SetRated(false);
|
||||
|
||||
|
|
@ -1119,7 +1059,6 @@ void BattleGround::Reset()
|
|||
void BattleGround::StartBattleGround()
|
||||
{
|
||||
SetStartTime(0);
|
||||
SetLastResurrectTime(0);
|
||||
|
||||
// add BG to free slot queue
|
||||
AddToBGFreeSlotQueue();
|
||||
|
|
@ -1351,39 +1290,6 @@ void BattleGround::UpdatePlayerScore(Player *Source, uint32 type, uint32 value)
|
|||
}
|
||||
}
|
||||
|
||||
void BattleGround::AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid)
|
||||
{
|
||||
m_ReviveQueue[npc_guid].push_back(player_guid);
|
||||
|
||||
Player *plr = objmgr.GetPlayer(player_guid);
|
||||
if (!plr)
|
||||
return;
|
||||
|
||||
plr->CastSpell(plr, SPELL_WAITING_FOR_RESURRECT, true);
|
||||
}
|
||||
|
||||
void BattleGround::RemovePlayerFromResurrectQueue(uint64 player_guid)
|
||||
{
|
||||
for(std::map<uint64, std::vector<uint64> >::iterator itr = m_ReviveQueue.begin(); itr != m_ReviveQueue.end(); ++itr)
|
||||
{
|
||||
for(std::vector<uint64>::iterator itr2 =(itr->second).begin(); itr2 != (itr->second).end(); ++itr2)
|
||||
{
|
||||
if (*itr2 == player_guid)
|
||||
{
|
||||
(itr->second).erase(itr2);
|
||||
|
||||
Player *plr = objmgr.GetPlayer(player_guid);
|
||||
if (!plr)
|
||||
return;
|
||||
|
||||
plr->RemoveAurasDueToSpell(SPELL_WAITING_FOR_RESURRECT);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool BattleGround::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
|
||||
{
|
||||
Map * map = MapManager::Instance().FindMap(GetMapId(),GetInstanceID());
|
||||
|
|
|
|||
|
|
@ -83,16 +83,12 @@ enum BattleGroundMarksCount
|
|||
enum BattleGroundSpells
|
||||
{
|
||||
SPELL_WAITING_FOR_RESURRECT = 2584, // Waiting to Resurrect
|
||||
SPELL_SPIRIT_HEAL_CHANNEL = 22011, // Spirit Heal Channel
|
||||
SPELL_SPIRIT_HEAL = 22012, // Spirit Heal
|
||||
SPELL_RESURRECTION_VISUAL = 24171, // Resurrection Impact Visual
|
||||
SPELL_ARENA_PREPARATION = 32727, // use this one, 32728 not correct
|
||||
SPELL_ALLIANCE_GOLD_FLAG = 32724,
|
||||
SPELL_ALLIANCE_GREEN_FLAG = 32725,
|
||||
SPELL_HORDE_GOLD_FLAG = 35774,
|
||||
SPELL_HORDE_GREEN_FLAG = 35775,
|
||||
SPELL_PREPARATION = 44521, // Preparation
|
||||
SPELL_SPIRIT_HEAL_MANA = 44535, // Spirit Heal
|
||||
SPELL_RECENTLY_DROPPED_FLAG = 42792, // Recently Dropped Flag
|
||||
SPELL_AURA_PLAYER_INACTIVE = 43681 // Inactive
|
||||
};
|
||||
|
|
@ -321,7 +317,6 @@ class BattleGround
|
|||
uint32 GetClientInstanceID() const { return m_ClientInstanceID; }
|
||||
uint32 GetStartTime() const { return m_StartTime; }
|
||||
uint32 GetEndTime() const { return m_EndTime; }
|
||||
uint32 GetLastResurrectTime() const { return m_LastResurrectTime; }
|
||||
uint32 GetMaxPlayers() const { return m_MaxPlayers; }
|
||||
uint32 GetMinPlayers() const { return m_MinPlayers; }
|
||||
|
||||
|
|
@ -352,7 +347,6 @@ class BattleGround
|
|||
void SetClientInstanceID(uint32 InstanceID) { m_ClientInstanceID = InstanceID; }
|
||||
void SetStartTime(uint32 Time) { m_StartTime = Time; }
|
||||
void SetEndTime(uint32 Time) { m_EndTime = Time; }
|
||||
void SetLastResurrectTime(uint32 Time) { m_LastResurrectTime = Time; }
|
||||
void SetMaxPlayers(uint32 MaxPlayers) { m_MaxPlayers = MaxPlayers; }
|
||||
void SetMinPlayers(uint32 MinPlayers) { m_MinPlayers = MinPlayers; }
|
||||
void SetLevelRange(uint32 min, uint32 max) { m_LevelMin = min; m_LevelMax = max; }
|
||||
|
|
@ -395,11 +389,6 @@ class BattleGround
|
|||
BattleGroundScoreMap::const_iterator GetPlayerScoresEnd() const { return m_PlayerScores.end(); }
|
||||
uint32 GetPlayerScoresSize() const { return m_PlayerScores.size(); }
|
||||
|
||||
uint32 GetReviveQueueSize() const { return m_ReviveQueue.size(); }
|
||||
|
||||
void AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid);
|
||||
void RemovePlayerFromResurrectQueue(uint64 player_guid);
|
||||
|
||||
void StartBattleGround();
|
||||
|
||||
/* Location */
|
||||
|
|
@ -567,8 +556,6 @@ class BattleGround
|
|||
|
||||
/* Player lists, those need to be accessible by inherited classes */
|
||||
BattleGroundPlayerMap m_Players;
|
||||
// Spirit Guide guid + Player list GUIDS
|
||||
std::map<uint64, std::vector<uint64> > m_ReviveQueue;
|
||||
|
||||
/*
|
||||
these are important variables used for starting messages
|
||||
|
|
@ -589,7 +576,6 @@ class BattleGround
|
|||
uint32 m_StartTime;
|
||||
bool m_ArenaBuffSpawned; // to cache if arenabuff event is started (cause bool is faster than checking IsActiveEvent)
|
||||
int32 m_EndTime; // it is set to 120000 when bg is ending and it decreases itself
|
||||
uint32 m_LastResurrectTime;
|
||||
BGQueueIdBasedOnLevel m_QueueId;
|
||||
uint8 m_ArenaType; // 2=2v2, 3=3v3, 5=5v5
|
||||
bool m_InBGFreeSlotQueue; // used to make sure that BG is only once inserted into the BattleGroundMgr.BGFreeSlotQueue[bgTypeId] deque
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "BattleGround.h"
|
||||
#include "ArenaTeam.h"
|
||||
#include "Language.h"
|
||||
#include "ScriptCalls.h"
|
||||
|
||||
void WorldSession::HandleBattlemasterHelloOpcode( WorldPacket & recv_data )
|
||||
{
|
||||
|
|
@ -583,7 +584,7 @@ void WorldSession::HandleAreaSpiritHealerQueryOpcode( WorldPacket & recv_data )
|
|||
if(!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
sBattleGroundMgr.SendAreaSpiritHealerQueryOpcode(_player, bg, guid);
|
||||
unit->SendAreaSpiritHealerQueryOpcode(GetPlayer());
|
||||
}
|
||||
|
||||
void WorldSession::HandleAreaSpiritHealerQueueOpcode( WorldPacket & recv_data )
|
||||
|
|
@ -604,7 +605,7 @@ void WorldSession::HandleAreaSpiritHealerQueueOpcode( WorldPacket & recv_data )
|
|||
if(!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
bg->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
||||
Script->GossipHello(GetPlayer(), unit);
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattlemasterJoinArena( WorldPacket & recv_data )
|
||||
|
|
|
|||
|
|
@ -1890,16 +1890,6 @@ void BattleGroundMgr::SendToBattleGround(Player *pl, uint32 instanceId, BattleGr
|
|||
}
|
||||
}
|
||||
|
||||
void BattleGroundMgr::SendAreaSpiritHealerQueryOpcode(Player *pl, BattleGround *bg, const uint64& guid)
|
||||
{
|
||||
WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 12);
|
||||
uint32 time_ = 30000 - bg->GetLastResurrectTime(); // resurrect every 30 seconds
|
||||
if (time_ == uint32(-1))
|
||||
time_ = 0;
|
||||
data << guid << time_;
|
||||
pl->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
bool BattleGroundMgr::IsArenaType(BattleGroundTypeId bgTypeId)
|
||||
{
|
||||
return ( bgTypeId == BATTLEGROUND_AA ||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,6 @@ class BattleGroundMgr
|
|||
void BuildPvpLogDataPacket(WorldPacket *data, BattleGround *bg);
|
||||
void BuildBattleGroundStatusPacket(WorldPacket *data, BattleGround *bg, uint8 QueueSlot, uint8 StatusID, uint32 Time1, uint32 Time2, uint8 arenatype);
|
||||
void BuildPlaySoundPacket(WorldPacket *data, uint32 soundid);
|
||||
void SendAreaSpiritHealerQueryOpcode(Player *pl, BattleGround *bg, const uint64& guid);
|
||||
|
||||
/* Battlegrounds */
|
||||
BattleGround* GetBattleGroundThroughClientInstance(uint32 instanceId, BattleGroundTypeId bgTypeId);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "WaypointMovementGenerator.h"
|
||||
#include "InstanceData.h"
|
||||
#include "BattleGroundMgr.h"
|
||||
#include "Spell.h"
|
||||
#include "Util.h"
|
||||
#include "GridNotifiers.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
|
|
@ -2325,3 +2326,13 @@ void Creature::SendMonsterMoveWithSpeed(float x, float y, float z, uint32 transi
|
|||
//float orientation = (float)atan2((double)dy, (double)dx);
|
||||
SendMonsterMove(x, y, z, 0, GetMonsterMoveFlags(), transitTime, player);
|
||||
}
|
||||
|
||||
void Creature::SendAreaSpiritHealerQueryOpcode(Player *pl)
|
||||
{
|
||||
uint32 next_resurrect = 0;
|
||||
if (Spell* pcurSpell = GetCurrentSpell(CURRENT_CHANNELED_SPELL))
|
||||
next_resurrect = pcurSpell->GetCastedTime();
|
||||
WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 8 + 4);
|
||||
data << GetGUID() << next_resurrect;
|
||||
pl->SendDirectMessage(&data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -684,6 +684,8 @@ class MANGOS_DLL_SPEC Creature : public Unit
|
|||
bool isActiveObject() const { return m_isActiveObject || HasAuraType(SPELL_AURA_BIND_SIGHT) || HasAuraType(SPELL_AURA_FAR_SIGHT); }
|
||||
void SetActiveObjectState(bool on);
|
||||
|
||||
void SendAreaSpiritHealerQueryOpcode(Player *pl);
|
||||
|
||||
protected:
|
||||
bool CreateFromProto(uint32 guidlow,uint32 Entry,uint32 team, const CreatureData *data = NULL);
|
||||
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@
|
|||
#include "ObjectAccessor.h"
|
||||
#include "Creature.h"
|
||||
#include "Pet.h"
|
||||
#include "BattleGroundMgr.h"
|
||||
#include "BattleGround.h"
|
||||
#include "Guild.h"
|
||||
|
||||
void WorldSession::HandleTabardVendorActivateOpcode( WorldPacket & recv_data )
|
||||
|
|
@ -274,17 +272,8 @@ void WorldSession::HandleGossipHelloOpcode( WorldPacket & recv_data )
|
|||
unit->StopMoving();
|
||||
}
|
||||
|
||||
// If spiritguide, no need for gossip menu, just put player into resurrect queue
|
||||
if (unit->isSpiritGuide())
|
||||
{
|
||||
BattleGround *bg = _player->GetBattleGround();
|
||||
if(bg)
|
||||
{
|
||||
bg->AddPlayerToResurrectQueue(unit->GetGUID(), _player->GetGUID());
|
||||
sBattleGroundMgr.SendAreaSpiritHealerQueryOpcode(_player, bg, unit->GetGUID());
|
||||
return;
|
||||
}
|
||||
}
|
||||
unit->SendAreaSpiritHealerQueryOpcode(_player);
|
||||
|
||||
if(!Script->GossipHello( _player, unit ))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -408,6 +408,7 @@ class Spell
|
|||
SpellCastTargets m_targets;
|
||||
|
||||
int32 GetCastTime() const { return m_casttime; }
|
||||
uint32 GetCastedTime() { return m_timer; }
|
||||
bool IsAutoRepeat() const { return m_autoRepeat; }
|
||||
void SetAutoRepeat(bool rep) { m_autoRepeat = rep; }
|
||||
void ReSetTimer() { m_timer = m_casttime > 0 ? m_casttime : 0; }
|
||||
|
|
|
|||
|
|
@ -2269,14 +2269,6 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
|
|||
|
||||
switch(GetId())
|
||||
{
|
||||
case 2584: // Waiting to Resurrect
|
||||
{
|
||||
// Waiting to resurrect spell cancel, we must remove player from resurrect queue
|
||||
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
||||
if(BattleGround *bg = ((Player*)m_target)->GetBattleGround())
|
||||
bg->RemovePlayerFromResurrectQueue(m_target->GetGUID());
|
||||
return;
|
||||
}
|
||||
case 36730: // Flame Strike
|
||||
{
|
||||
m_target->CastSpell(m_target, 36731, true, NULL, this);
|
||||
|
|
|
|||
|
|
@ -6761,25 +6761,20 @@ void Spell::EffectSummonDemon(uint32 i)
|
|||
}
|
||||
}
|
||||
|
||||
/* There is currently no need for this effect. We handle it in BattleGround.cpp
|
||||
If we would handle the resurrection here, the spiritguide would instantly disappear as the
|
||||
player revives, and so we wouldn't see the spirit heal visual effect on the npc.
|
||||
This is why we use a half sec delay between the visual effect and the resurrection itself */
|
||||
void Spell::EffectSpiritHeal(uint32 /*i*/)
|
||||
{
|
||||
/*
|
||||
if(!unitTarget || unitTarget->isAlive())
|
||||
// TODO player can't see the heal-animation - he should respawn some ticks later
|
||||
if (!unitTarget || unitTarget->isAlive())
|
||||
return;
|
||||
if(unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
if (unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
if(!unitTarget->IsInWorld())
|
||||
if (!unitTarget->IsInWorld())
|
||||
return;
|
||||
if (m_spellInfo->Id == 22012 && !unitTarget->HasAura(2584))
|
||||
return;
|
||||
|
||||
//m_spellInfo->EffectBasePoints[i]; == 99 (percent?)
|
||||
//((Player*)unitTarget)->setResurrect(m_caster->GetGUID(), unitTarget->GetPositionX(), unitTarget->GetPositionY(), unitTarget->GetPositionZ(), unitTarget->GetMaxHealth(), unitTarget->GetMaxPower(POWER_MANA));
|
||||
((Player*)unitTarget)->ResurrectPlayer(1.0f);
|
||||
((Player*)unitTarget)->SpawnCorpseBones();
|
||||
*/
|
||||
}
|
||||
|
||||
// remove insignia spell effect
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8552"
|
||||
#define REVISION_NR "8553"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue