First step of comment style refactoring to doxygen-style.
This commit is contained in:
@@ -243,7 +243,7 @@ namespace VMAP
|
||||
FILE* rf = fopen(fullname.c_str(), "rb");
|
||||
if (!rf)
|
||||
return false;
|
||||
// TODO: check magic number when implemented...
|
||||
/// @todo check magic number when implemented...
|
||||
char tiled;
|
||||
char chunk[8];
|
||||
if (!readChunk(rf, chunk, VMAP_MAGIC, 8) || fread(&tiled, sizeof(char), 1, rf) != 1)
|
||||
|
||||
@@ -88,7 +88,7 @@ namespace VMAP
|
||||
}
|
||||
else if (entry->second.flags & MOD_WORLDSPAWN) // WMO maps and terrain maps use different origin, so we need to adapt :/
|
||||
{
|
||||
// TODO: remove extractor hack and uncomment below line:
|
||||
/// @todo remove extractor hack and uncomment below line:
|
||||
//entry->second.iPos += Vector3(533.33333f*32, 533.33333f*32, 0.f);
|
||||
entry->second.iBound = entry->second.iBound + Vector3(533.33333f*32, 533.33333f*32, 0.f);
|
||||
}
|
||||
|
||||
@@ -247,7 +247,7 @@ TurretAI::TurretAI(Creature* c) : CreatureAI(c)
|
||||
|
||||
bool TurretAI::CanAIAttack(const Unit* /*who*/) const
|
||||
{
|
||||
// TODO: use one function to replace it
|
||||
/// @todo use one function to replace it
|
||||
if (!me->IsWithinCombatRange(me->getVictim(), me->m_CombatDistance)
|
||||
|| (m_minRange && me->IsWithinCombatRange(me->getVictim(), m_minRange)))
|
||||
return false;
|
||||
|
||||
@@ -89,7 +89,7 @@ struct DefaultTargetSelector : public std::unary_function<Unit*, bool>
|
||||
};
|
||||
|
||||
// Target selector for spell casts checking range, auras and attributes
|
||||
// TODO: Add more checks from Spell::CheckCast
|
||||
/// @todo Add more checks from Spell::CheckCast
|
||||
struct SpellTargetSelector : public std::unary_function<Unit*, bool>
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -134,7 +134,7 @@ void CreatureAI::MoveInLineOfSight(Unit* who)
|
||||
AttackStart(who);
|
||||
//else if (who->getVictim() && me->IsFriendlyTo(who)
|
||||
// && me->IsWithinDistInMap(who, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS))
|
||||
// && me->canStartAttack(who->getVictim(), true)) // TODO: if we use true, it will not attack it when it arrives
|
||||
// && me->canStartAttack(who->getVictim(), true)) /// @todo if we use true, it will not attack it when it arrives
|
||||
// me->GetMotionMaster()->MoveChase(who->getVictim());
|
||||
}
|
||||
|
||||
|
||||
@@ -840,7 +840,7 @@ void CreatureEventAI::Reset()
|
||||
break;
|
||||
}
|
||||
default:
|
||||
//TODO: enable below code line / verify this is correct to enable events previously disabled (ex. aggro yell), instead of enable this in void EnterCombat()
|
||||
/// @todo enable below code line / verify this is correct to enable events previously disabled (ex. aggro yell), instead of enable this in void EnterCombat()
|
||||
//(*i).Enabled = true;
|
||||
//(*i).Time = 0;
|
||||
break;
|
||||
|
||||
@@ -415,7 +415,7 @@ void npc_escortAI::SetRun(bool on)
|
||||
m_bIsRunning = on;
|
||||
}
|
||||
|
||||
//TODO: get rid of this many variables passed in function.
|
||||
/// @todo get rid of this many variables passed in function.
|
||||
void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, uint64 playerGUID /* = 0 */, Quest const* quest /* = NULL */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */)
|
||||
{
|
||||
if (me->getVictim())
|
||||
|
||||
@@ -122,7 +122,7 @@ void FollowerAI::JustDied(Unit* /*killer*/)
|
||||
if (!HasFollowState(STATE_FOLLOW_INPROGRESS) || !m_uiLeaderGUID || !m_pQuestForFollow)
|
||||
return;
|
||||
|
||||
//TODO: need a better check for quests with time limit.
|
||||
/// @todo need a better check for quests with time limit.
|
||||
if (Player* player = GetLeaderForFollower())
|
||||
{
|
||||
if (Group* group = player->GetGroup())
|
||||
|
||||
@@ -336,7 +336,7 @@ void SmartAI::UpdateAI(uint32 diff)
|
||||
UpdatePath(diff);
|
||||
UpdateDespawn(diff);
|
||||
|
||||
//TODO move to void
|
||||
/// @todo move to void
|
||||
if (mFollowGuid)
|
||||
{
|
||||
if (mFollowArrivedTimer < diff)
|
||||
|
||||
@@ -1904,7 +1904,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
creature->GetMotionMaster()->Clear();
|
||||
creature->GetMotionMaster()->MoveJump(e.target.x, e.target.y, e.target.z, (float)e.action.jump.speedxy, (float)e.action.jump.speedz);
|
||||
}
|
||||
// TODO: Resume path when reached jump location
|
||||
/// @todo Resume path when reached jump location
|
||||
|
||||
delete targets;
|
||||
break;
|
||||
|
||||
@@ -426,7 +426,7 @@ enum SMART_ACTION
|
||||
SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL = 42, // MinHpValue(+pct, -flat)
|
||||
SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to dismount)
|
||||
SMART_ACTION_SET_INGAME_PHASE_MASK = 44, // mask
|
||||
SMART_ACTION_SET_DATA = 45, // Field, Data (only creature TODO)
|
||||
SMART_ACTION_SET_DATA = 45, // Field, Data (only creature @todo)
|
||||
SMART_ACTION_MOVE_FORWARD = 46, // distance
|
||||
SMART_ACTION_SET_VISIBILITY = 47, // on/off
|
||||
SMART_ACTION_SET_ACTIVE = 48, // No Params
|
||||
|
||||
@@ -2048,7 +2048,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
||||
ca.changed = true;
|
||||
|
||||
// don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement
|
||||
// TODO: where do set this instead?
|
||||
/// @todo where do set this instead?
|
||||
if (!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
|
||||
sAchievementMgr->SetRealmCompleted(achievement);
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ void Battlefield::HandlePlayerEnterZone(Player* player, uint32 /*zone*/)
|
||||
InvitePlayerToWar(player);
|
||||
else // No more vacant places
|
||||
{
|
||||
// TODO: Send a packet to announce it to player
|
||||
/// @todo Send a packet to announce it to player
|
||||
m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(NULL) + 10;
|
||||
InvitePlayerToQueue(player);
|
||||
}
|
||||
@@ -256,7 +256,7 @@ void Battlefield::InvitePlayerToWar(Player* player)
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
// TODO : needed ?
|
||||
/// @todo needed ?
|
||||
if (player->isInFlight())
|
||||
return;
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// TODO: Implement proper support for vehicle+player teleportation
|
||||
// TODO: Use spell victory/defeat in wg instead of RewardMarkOfHonor() && RewardHonor
|
||||
// TODO: Add proper implement of achievement
|
||||
/// @todo Implement proper support for vehicle+player teleportation
|
||||
/// @todo Use spell victory/defeat in wg instead of RewardMarkOfHonor() && RewardHonor
|
||||
/// @todo Add proper implement of achievement
|
||||
|
||||
#include "BattlefieldWG.h"
|
||||
#include "AchievementMgr.h"
|
||||
@@ -658,7 +658,7 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim)
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO:Recent PvP activity worldstate
|
||||
/// @todoRecent PvP activity worldstate
|
||||
}
|
||||
|
||||
bool BattlefieldWG::FindAndRemoveVehicleFromList(Unit* vehicle)
|
||||
@@ -764,7 +764,7 @@ void BattlefieldWG::OnPlayerJoinWar(Player* player)
|
||||
|
||||
void BattlefieldWG::OnPlayerLeaveWar(Player* player)
|
||||
{
|
||||
// Remove all aura from WG // TODO: false we can go out of this zone on retail and keep Rank buff, remove on end of WG
|
||||
// Remove all aura from WG /// @todo false we can go out of this zone on retail and keep Rank buff, remove on end of WG
|
||||
if (!player->GetSession()->PlayerLogout())
|
||||
{
|
||||
if (player->GetVehicle()) // Remove vehicle of player if he go out.
|
||||
|
||||
@@ -652,7 +652,7 @@ int32 ArenaTeam::GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won
|
||||
// Calculate the rating modification
|
||||
float mod;
|
||||
|
||||
// TODO: Replace this hack with using the confidence factor (limiting the factor to 2.0f)
|
||||
/// @todo Replace this hack with using the confidence factor (limiting the factor to 2.0f)
|
||||
if (won && ownRating < 1300)
|
||||
{
|
||||
if (ownRating < 1000)
|
||||
|
||||
@@ -515,7 +515,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
|
||||
// Remove preparation
|
||||
if (isArena())
|
||||
{
|
||||
// TODO : add arena sound PlaySoundToAll(SOUND_ARENA_START);
|
||||
/// @todo add arena sound PlaySoundToAll(SOUND_ARENA_START);
|
||||
for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
|
||||
if (Player* player = ObjectAccessor::FindPlayer(itr->first))
|
||||
{
|
||||
@@ -1636,7 +1636,7 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float
|
||||
creature->setDeathState(DEAD);
|
||||
creature->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, creature->GetGUID());
|
||||
// aura
|
||||
// TODO: Fix display here
|
||||
/// @todo Fix display here
|
||||
// creature->SetVisibleAura(0, SPELL_SPIRIT_HEAL_CHANNEL);
|
||||
// casting visual effect
|
||||
creature->SetUInt32Value(UNIT_CHANNEL_SPELL, SPELL_SPIRIT_HEAL_CHANNEL);
|
||||
|
||||
@@ -494,7 +494,7 @@ class Battleground
|
||||
void HandleTriggerBuff(uint64 go_guid);
|
||||
void SetHoliday(bool is_holiday);
|
||||
|
||||
// TODO: make this protected:
|
||||
/// @todo make this protected:
|
||||
typedef std::vector<uint64> BGObjects;
|
||||
typedef std::vector<uint64> BGCreatures;
|
||||
BGObjects BgObjects;
|
||||
|
||||
@@ -1029,7 +1029,7 @@ void BattlegroundMgr::SetHolidayWeekends(uint32 mask)
|
||||
|
||||
void BattlegroundMgr::ScheduleQueueUpdate(uint32 arenaMatchmakerRating, uint8 arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id)
|
||||
{
|
||||
//This method must be atomic, TODO add mutex
|
||||
//This method must be atomic, @todo add mutex
|
||||
//we will use only 1 number created of bgTypeId and bracket_id
|
||||
uint64 const scheduleId = ((uint64)arenaMatchmakerRating << 32) | (arenaType << 24) | (bgQueueTypeId << 16) | (bgTypeId << 8) | bracket_id;
|
||||
if (std::find(m_QueueUpdateScheduler.begin(), m_QueueUpdateScheduler.end(), scheduleId) == m_QueueUpdateScheduler.end())
|
||||
|
||||
@@ -282,7 +282,7 @@ class BattlegroundAB : public Battleground
|
||||
void _SendNodeUpdate(uint8 node);
|
||||
|
||||
/* Creature spawning/despawning */
|
||||
// TODO: working, scripted peons spawning
|
||||
/// @todo working, scripted peons spawning
|
||||
void _NodeOccupied(uint8 node, Team team);
|
||||
void _NodeDeOccupied(uint8 node);
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ BattlegroundAV::~BattlegroundAV()
|
||||
{
|
||||
}
|
||||
|
||||
uint16 BattlegroundAV::GetBonusHonor(uint8 kills) //TODO: move this function to Battleground.cpp (needs to find a way to get m_MaxLevel)
|
||||
uint16 BattlegroundAV::GetBonusHonor(uint8 kills) /// @todo move this function to Battleground.cpp (needs to find a way to get m_MaxLevel)
|
||||
{
|
||||
return Trinity::Honor::hk_honor_at_level(m_MaxLevel, kills);
|
||||
}
|
||||
@@ -139,7 +139,7 @@ void BattlegroundAV::HandleQuestComplete(uint32 questid, Player* player)
|
||||
if (GetStatus() != STATUS_IN_PROGRESS)
|
||||
return;//maybe we should log this, cause this must be a cheater or a big bug
|
||||
uint8 team = GetTeamIndexByTeamId(player->GetTeam());
|
||||
//TODO add reputation, events (including quest not available anymore, next quest availabe, go/npc de/spawning)and maybe honor
|
||||
/// @todo add reputation, events (including quest not available anymore, next quest availabe, go/npc de/spawning)and maybe honor
|
||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV Quest %i completed", questid);
|
||||
switch (questid)
|
||||
{
|
||||
@@ -298,7 +298,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
|
||||
if (!creature)
|
||||
return NULL;
|
||||
if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN][0] || creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN][0])
|
||||
creature->SetRespawnDelay(RESPAWN_ONE_DAY); // TODO: look if this can be done by database + also add this for the wingcommanders
|
||||
creature->SetRespawnDelay(RESPAWN_ONE_DAY); /// @todo look if this can be done by database + also add this for the wingcommanders
|
||||
|
||||
if ((isStatic && cinfoid >= 10 && cinfoid <= 14) || (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3) ||
|
||||
(cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))))
|
||||
@@ -314,7 +314,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type)
|
||||
creature->GetMotionMaster()->Initialize();
|
||||
creature->setDeathState(JUST_DIED);
|
||||
creature->Respawn();
|
||||
//TODO: find a way to add a motionmaster without killing the creature (i
|
||||
/// @todo find a way to add a motionmaster without killing the creature (i
|
||||
//just copied this code from a gm-command
|
||||
}
|
||||
|
||||
@@ -384,11 +384,11 @@ void BattlegroundAV::PostUpdateImpl(uint32 diff)
|
||||
else
|
||||
{
|
||||
CastSpellOnTeam(AV_BUFF_H_CAPTAIN, HORDE);
|
||||
Creature* creature = GetBGCreature(AV_CPLACE_MAX + 59); //TODO: make the captains a dynamic creature
|
||||
Creature* creature = GetBGCreature(AV_CPLACE_MAX + 59); /// @todo make the captains a dynamic creature
|
||||
if (creature)
|
||||
YellToAll(creature, LANG_BG_AV_H_CAPTAIN_BUFF, LANG_ORCISH);
|
||||
}
|
||||
m_CaptainBuffTimer[i] = 120000 + urand(0, 4)* 60000; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes TODO get the right times
|
||||
m_CaptainBuffTimer[i] = 120000 + urand(0, 4)* 60000; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes @todo get the right times
|
||||
}
|
||||
}
|
||||
//add points from mine owning, and look if he neutral team wanrts to reclaim the mine
|
||||
@@ -455,7 +455,7 @@ void BattlegroundAV::AddPlayer(Player* player)
|
||||
BattlegroundAVScore* sc = new BattlegroundAVScore;
|
||||
PlayerScores[player->GetGUID()] = sc;
|
||||
if (m_MaxLevel == 0)
|
||||
m_MaxLevel=(player->getLevel()%10 == 0)? player->getLevel() : (player->getLevel()-(player->getLevel()%10))+10; //TODO: just look at the code \^_^/ --but queue-info should provide this information..
|
||||
m_MaxLevel=(player->getLevel()%10 == 0)? player->getLevel() : (player->getLevel()-(player->getLevel()%10))+10; /// @todo just look at the code \^_^/ --but queue-info should provide this information..
|
||||
}
|
||||
|
||||
void BattlegroundAV::EndBattleground(uint32 winner)
|
||||
@@ -494,7 +494,7 @@ void BattlegroundAV::EndBattleground(uint32 winner)
|
||||
RewardHonorToTeam(GetBonusHonor(kills[i]), i == 0 ? ALLIANCE : HORDE);
|
||||
}
|
||||
|
||||
//TODO add enterevademode for all attacking creatures
|
||||
/// @todo add enterevademode for all attacking creatures
|
||||
Battleground::EndBattleground(winner);
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ void BattlegroundAV::RemovePlayer(Player* player, uint64 /*guid*/, uint32 /*team
|
||||
sLog->outError(LOG_FILTER_BATTLEGROUND, "bg_AV no player at remove");
|
||||
return;
|
||||
}
|
||||
//TODO search more buffs
|
||||
/// @todo search more buffs
|
||||
player->RemoveAurasDueToSpell(AV_BUFF_ARMOR);
|
||||
player->RemoveAurasDueToSpell(AV_BUFF_A_CAPTAIN);
|
||||
player->RemoveAurasDueToSpell(AV_BUFF_H_CAPTAIN);
|
||||
@@ -666,10 +666,10 @@ void BattlegroundAV::ChangeMineOwner(uint8 mine, uint32 team, bool initial)
|
||||
if (mine == AV_SOUTH_MINE)
|
||||
for (uint16 i=AV_CPLACE_MINE_S_S_MIN; i <= AV_CPLACE_MINE_S_S_MAX; i++)
|
||||
if (BgCreatures[i])
|
||||
DelCreature(i); //TODO just set the respawntime to 999999
|
||||
DelCreature(i); /// @todo just set the respawntime to 999999
|
||||
for (uint16 i=((mine == AV_NORTH_MINE)?AV_CPLACE_MINE_N_1_MIN:AV_CPLACE_MINE_S_1_MIN); i <= ((mine == AV_NORTH_MINE)?AV_CPLACE_MINE_N_3:AV_CPLACE_MINE_S_3); i++)
|
||||
if (BgCreatures[i])
|
||||
DelCreature(i); //TODO here also
|
||||
DelCreature(i); /// @todo here also
|
||||
}
|
||||
SendMineWorldStates(mine);
|
||||
|
||||
@@ -1617,7 +1617,7 @@ void BattlegroundAV::ResetBGSubclass()
|
||||
m_Team_Scores[i]=BG_AV_SCORE_INITIAL_POINTS;
|
||||
m_IsInformedNearVictory[i]=false;
|
||||
m_CaptainAlive[i] = true;
|
||||
m_CaptainBuffTimer[i] = 120000 + urand(0, 4)* 60; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes TODO get the right times
|
||||
m_CaptainBuffTimer[i] = 120000 + urand(0, 4)* 60; //as far as i could see, the buff is randomly so i make 2minutes (thats the duration of the buff itself) + 0-4minutes @todo get the right times
|
||||
m_Mine_Owner[i] = AV_NEUTRAL_TEAM;
|
||||
m_Mine_PrevOwner[i] = m_Mine_Owner[i];
|
||||
}
|
||||
|
||||
@@ -272,7 +272,7 @@ void BattlegroundEY::UpdatePointStatuses()
|
||||
void BattlegroundEY::UpdateTeamScore(uint32 Team)
|
||||
{
|
||||
uint32 score = GetTeamScore(Team);
|
||||
//TODO there should be some sound played when one team is near victory!! - and define variables
|
||||
/// @todo there should be some sound played when one team is near victory!! - and define variables
|
||||
/*if (!m_IsInformedNearVictory && score >= BG_EY_WARNING_NEAR_VICTORY_SCORE)
|
||||
{
|
||||
if (Team == ALLIANCE)
|
||||
|
||||
@@ -153,13 +153,13 @@ enum AchievementCriteriaTypes
|
||||
ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION = 47,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50, // TODO: itemlevel is mentioned in text but not present in dbc
|
||||
ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50, /// @todo itemlevel is mentioned in text but not present in dbc
|
||||
ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE = 55,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS = 56, // TODO: in some cases map not present, and in some cases need do without die
|
||||
ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS = 56, /// @todo in some cases map not present, and in some cases need do without die
|
||||
ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_VENDORS = 59,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS = 60,
|
||||
@@ -173,8 +173,8 @@ enum AchievementCriteriaTypes
|
||||
ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2 = 69,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL = 70,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72,
|
||||
// TODO 73: Achievements 1515, 1241, 1103 (Name: Mal'Ganis)
|
||||
ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE = 74, // TODO: title id is not mentioned in dbc
|
||||
/// @todo 73: Achievements 1515, 1241, 1103 (Name: Mal'Ganis)
|
||||
ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE = 74, /// @todo title id is not mentioned in dbc
|
||||
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL = 77,
|
||||
@@ -207,7 +207,7 @@ enum AchievementCriteriaTypes
|
||||
ACHIEVEMENT_CRITERIA_TYPE_QUEST_ABANDONED = 107,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN = 108,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110, // TODO: target entry is missing
|
||||
ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110, /// @todo target entry is missing
|
||||
ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113,
|
||||
ACHIEVEMENT_CRITERIA_TYPE_ACCEPTED_SUMMONINGS = 114,
|
||||
|
||||
@@ -76,7 +76,7 @@ struct AchievementCriteriaEntry
|
||||
union
|
||||
{
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0
|
||||
// TODO: also used for player deaths..
|
||||
/// @todo also used for player deaths..
|
||||
struct
|
||||
{
|
||||
uint32 creatureID; // 3
|
||||
@@ -288,14 +288,14 @@ struct AchievementCriteriaEntry
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43
|
||||
struct
|
||||
{
|
||||
// TODO: This rank is _NOT_ the index from AreaTable.dbc
|
||||
/// @todo This rank is _NOT_ the index from AreaTable.dbc
|
||||
uint32 areaReference; // 3
|
||||
} explore_area;
|
||||
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK = 44
|
||||
struct
|
||||
{
|
||||
// TODO: This rank is _NOT_ the index from CharTitles.dbc
|
||||
/// @todo This rank is _NOT_ the index from CharTitles.dbc
|
||||
uint32 rank; // 3
|
||||
} own_rank;
|
||||
|
||||
@@ -328,7 +328,7 @@ struct AchievementCriteriaEntry
|
||||
} visit_barber;
|
||||
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
|
||||
// TODO: where is the required itemlevel stored?
|
||||
/// @todo where is the required itemlevel stored?
|
||||
struct
|
||||
{
|
||||
uint32 itemSlot; // 3
|
||||
@@ -363,7 +363,7 @@ struct AchievementCriteriaEntry
|
||||
} hk_race;
|
||||
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54
|
||||
// TODO: where is the information about the target stored?
|
||||
/// @todo where is the information about the target stored?
|
||||
struct
|
||||
{
|
||||
uint32 emoteID; // 3 enum TextEmotes
|
||||
@@ -413,7 +413,7 @@ struct AchievementCriteriaEntry
|
||||
} use_gameobject;
|
||||
|
||||
// ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL = 70
|
||||
// TODO: are those special criteria stored in the dbc or do we have to add another sql table?
|
||||
/// @todo are those special criteria stored in the dbc or do we have to add another sql table?
|
||||
struct
|
||||
{
|
||||
uint32 unused; // 3
|
||||
|
||||
@@ -421,7 +421,7 @@ void LFGMgr::InitializeLockedDungeons(Player* player, uint8 level /* = 0 */)
|
||||
lockData = LFG_LOCKSTATUS_MISSING_ITEM;
|
||||
}
|
||||
|
||||
/* TODO VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED)
|
||||
/* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED)
|
||||
lockData = LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE;
|
||||
lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE;
|
||||
lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL;
|
||||
|
||||
@@ -78,7 +78,7 @@ void LFGPlayerScript::OnLogin(Player* player)
|
||||
|
||||
sLFGMgr->InitializeLockedDungeons(player);
|
||||
sLFGMgr->SetTeam(player->GetGUID(), player->GetTeam());
|
||||
// TODO - Restore LfgPlayerData and send proper status to player if it was in a group
|
||||
/// @todo - Restore LfgPlayerData and send proper status to player if it was in a group
|
||||
}
|
||||
|
||||
void LFGPlayerScript::OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool /*permanent*/)
|
||||
@@ -166,7 +166,7 @@ void LFGGroupScript::OnRemoveMember(Group* group, uint64 guid, RemoveMethod meth
|
||||
|
||||
if (isLFG && method == GROUP_REMOVEMETHOD_KICK) // Player have been kicked
|
||||
{
|
||||
// TODO - Update internal kick cooldown of kicker
|
||||
/// @todo - Update internal kick cooldown of kicker
|
||||
std::string str_reason = "";
|
||||
if (reason)
|
||||
str_reason = std::string(reason);
|
||||
|
||||
@@ -397,7 +397,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
|
||||
|
||||
SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool));
|
||||
CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(getLevel(), cInfo->unit_class);
|
||||
float armor = (float)stats->GenerateArmor(cInfo); // TODO: Why is this treated as uint32 when it's a float?
|
||||
float armor = (float)stats->GenerateArmor(cInfo); /// @todo Why is this treated as uint32 when it's a float?
|
||||
SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, armor);
|
||||
SetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_HOLY]));
|
||||
SetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, float(cInfo->resistance[SPELL_SCHOOL_FIRE]));
|
||||
@@ -737,7 +737,7 @@ void Creature::DoFleeToGetAssistance()
|
||||
|
||||
if (!creature)
|
||||
//SetFeared(true, getVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
|
||||
//TODO: use 31365
|
||||
/// @todo use 31365
|
||||
SetControlled(true, UNIT_STATE_FLEEING);
|
||||
else
|
||||
GetMotionMaster()->MoveSeekAssistance(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ());
|
||||
@@ -850,7 +850,7 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry,
|
||||
|
||||
LastUsedScriptID = GetCreatureTemplate()->ScriptID;
|
||||
|
||||
// TODO: Replace with spell, handle from DB
|
||||
/// @todo Replace with spell, handle from DB
|
||||
if (isSpiritHealer() || isSpiritGuide())
|
||||
{
|
||||
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
|
||||
@@ -1186,7 +1186,7 @@ void Creature::SelectLevel(const CreatureTemplate* cinfo)
|
||||
SetMaxPower(POWER_MANA, mana); //MAX Mana
|
||||
SetPower(POWER_MANA, mana);
|
||||
|
||||
// TODO: set UNIT_FIELD_POWER*, for some creature class case (energy, etc)
|
||||
/// @todo set UNIT_FIELD_POWER*, for some creature class case (energy, etc)
|
||||
|
||||
SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)health);
|
||||
SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, (float)mana);
|
||||
@@ -1484,7 +1484,7 @@ bool Creature::canStartAttack(Unit const* who, bool force) const
|
||||
if (!CanFly() && (GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE + m_CombatDistance))
|
||||
//|| who->IsControlledByPlayer() && who->IsFlying()))
|
||||
// we cannot check flying for other creatures, too much map/vmap calculation
|
||||
// TODO: should switch to range attack
|
||||
/// @todo should switch to range attack
|
||||
return false;
|
||||
|
||||
if (!force)
|
||||
|
||||
@@ -372,7 +372,7 @@ void Puppet::Update(uint32 time)
|
||||
if (!isAlive())
|
||||
{
|
||||
UnSummon();
|
||||
// TODO: why long distance .die does not remove it
|
||||
/// @todo why long distance .die does not remove it
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,8 +428,8 @@ void GameObject::Update(uint32 diff)
|
||||
|
||||
bool IsBattlegroundTrap = false;
|
||||
//FIXME: this is activation radius (in different casting radius that must be selected from spell data)
|
||||
//TODO: move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state
|
||||
float radius = (float)(goInfo->trap.radius)/3*2; // TODO rename radius to diameter (goInfo->trap.radius) should be (goInfo->trap.diameter)
|
||||
/// @todo move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state
|
||||
float radius = (float)(goInfo->trap.radius)/3*2; /// @todo rename radius to diameter (goInfo->trap.radius) should be (goInfo->trap.diameter)
|
||||
if (!radius)
|
||||
{
|
||||
if (goInfo->trap.cooldown != 3) // cast in other case (at some triggering/linked go/etc explicit call)
|
||||
@@ -945,7 +945,7 @@ bool GameObject::ActivateToQuest(Player* target) const
|
||||
{
|
||||
if (LootTemplates_Gameobject.HaveQuestLootForPlayer(GetGOInfo()->GetLootId(), target))
|
||||
{
|
||||
//TODO: fix this hack
|
||||
/// @todo fix this hack
|
||||
//look for battlegroundAV for some objects which are only activated after mine gots captured by own team
|
||||
if (GetEntry() == BG_AV_OBJECTID_MINE_N || GetEntry() == BG_AV_OBJECTID_MINE_S)
|
||||
if (Battleground* bg = target->GetBattleground())
|
||||
@@ -1353,12 +1353,12 @@ void GameObject::Use(Unit* user)
|
||||
{
|
||||
player->UpdateFishingSkill();
|
||||
|
||||
//TODO: I do not understand this hack. Need some explanation.
|
||||
/// @todo I do not understand this hack. Need some explanation.
|
||||
// prevent removing GO at spell cancel
|
||||
RemoveFromOwner();
|
||||
SetOwnerGUID(player->GetGUID());
|
||||
|
||||
//TODO: find reasonable value for fishing hole search
|
||||
/// @todo find reasonable value for fishing hole search
|
||||
GameObject* ok = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE);
|
||||
if (ok)
|
||||
{
|
||||
@@ -1368,7 +1368,7 @@ void GameObject::Use(Unit* user)
|
||||
else
|
||||
player->SendLoot(GetGUID(), LOOT_FISHING);
|
||||
}
|
||||
// TODO: else: junk
|
||||
/// @todo else: junk
|
||||
else
|
||||
m_respawnTime = time(NULL);
|
||||
|
||||
@@ -1831,7 +1831,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u
|
||||
Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
|
||||
|
||||
// dealing damage, send packet
|
||||
// TODO: is there any packet for healing?
|
||||
/// @todo is there any packet for healing?
|
||||
if (change < 0 && player)
|
||||
{
|
||||
WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4);
|
||||
|
||||
@@ -457,7 +457,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
|
||||
*data << uint32(GetGUIDLow()); // GetGUIDLow()
|
||||
break;
|
||||
//! Unit, Player and default here are sending wrong values.
|
||||
//! TODO: Research the proper formula
|
||||
/// @todo Research the proper formula
|
||||
case TYPEID_UNIT:
|
||||
*data << uint32(0x0000000B); // unk
|
||||
break;
|
||||
@@ -491,7 +491,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
|
||||
// 0x80
|
||||
if (flags & UPDATEFLAG_VEHICLE)
|
||||
{
|
||||
// TODO: Allow players to aquire this updateflag.
|
||||
/// @todo Allow players to aquire this updateflag.
|
||||
*data << uint32(((Unit*)this)->GetVehicleKit()->GetVehicleInfo()->m_ID);
|
||||
*data << float(((Creature*)this)->GetOrientation());
|
||||
}
|
||||
@@ -2174,7 +2174,7 @@ namespace Trinity
|
||||
{
|
||||
char const* text = sObjectMgr->GetTrinityString(i_textId, loc_idx);
|
||||
|
||||
// TODO: i_object.GetName() also must be localized?
|
||||
/// @todo i_object.GetName() also must be localized?
|
||||
i_object.BuildMonsterChat(&data, i_msgtype, text, i_language, i_object.GetNameForLocaleIdx(loc_idx), i_targetGUID);
|
||||
}
|
||||
|
||||
@@ -2193,7 +2193,7 @@ namespace Trinity
|
||||
: i_object(obj), i_msgtype(msgtype), i_text(text), i_language(language), i_targetGUID(targetGUID) {}
|
||||
void operator()(WorldPacket& data, LocaleConstant loc_idx)
|
||||
{
|
||||
// TODO: i_object.GetName() also must be localized?
|
||||
/// @todo i_object.GetName() also must be localized?
|
||||
i_object.BuildMonsterChat(&data, i_msgtype, i_text, i_language, i_object.GetNameForLocaleIdx(loc_idx), i_targetGUID);
|
||||
}
|
||||
|
||||
@@ -3119,7 +3119,7 @@ void WorldObject::DestroyForNearbyPlayers()
|
||||
if (!player->HaveAtClient(this))
|
||||
continue;
|
||||
|
||||
if (isType(TYPEMASK_UNIT) && ((Unit*)this)->GetCharmerGUID() == player->GetGUID()) // TODO: this is for puppet
|
||||
if (isType(TYPEMASK_UNIT) && ((Unit*)this)->GetCharmerGUID() == player->GetGUID()) /// @todo this is for puppet
|
||||
continue;
|
||||
|
||||
DestroyForPlayer(player);
|
||||
|
||||
@@ -286,7 +286,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
|
||||
// Send fake summon spell cast - this is needed for correct cooldown application for spells
|
||||
// Example: 46584 - without this cooldown (which should be set always when pet is loaded) isn't set clientside
|
||||
// TODO: pets should be summoned from real cast instead of just faking it?
|
||||
/// @todo pets should be summoned from real cast instead of just faking it?
|
||||
if (summon_spell_id)
|
||||
{
|
||||
WorldPacket data(SMSG_SPELL_GO, (8+8+4+4+2));
|
||||
@@ -822,7 +822,7 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Move stat mods code to pet passive auras
|
||||
/// @todo Move stat mods code to pet passive auras
|
||||
bool Guardian::InitStatsForLevel(uint8 petlevel)
|
||||
{
|
||||
CreatureTemplate const* cinfo = GetCreatureTemplate();
|
||||
|
||||
@@ -932,7 +932,7 @@ void Player::CleanupsBeforeDelete(bool finalCleanup)
|
||||
bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
||||
{
|
||||
//FIXME: outfitId not used in player creating
|
||||
// TODO: need more checks against packet modifications
|
||||
/// @todo need more checks against packet modifications
|
||||
// should check that skin, face, hair* are valid via DBC per race/class
|
||||
// also do it in Player::BuildEnumData, Player::LoadFromDB
|
||||
|
||||
@@ -1040,7 +1040,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
||||
SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
//Reputations if "StartAllReputation" is enabled, -- TODO: Fix this in a better way
|
||||
//Reputations if "StartAllReputation" is enabled, -- @todo Fix this in a better way
|
||||
if (sWorld->getBoolConfig(CONFIG_START_ALL_REP))
|
||||
{
|
||||
GetReputationMgr().SetReputation(sFactionStore.LookupEntry(942), 42999);
|
||||
@@ -1376,7 +1376,7 @@ void Player::HandleDrowning(uint32 time_diff)
|
||||
{
|
||||
m_MirrorTimer[BREATH_TIMER]+= 1*IN_MILLISECONDS;
|
||||
// Calculate and deal damage
|
||||
// TODO: Check this formula
|
||||
/// @todo Check this formula
|
||||
uint32 damage = GetMaxHealth() / 5 + urand(0, getLevel()-1);
|
||||
EnvironmentalDamage(DAMAGE_DROWNING, damage);
|
||||
}
|
||||
@@ -1445,7 +1445,7 @@ void Player::HandleDrowning(uint32 time_diff)
|
||||
{
|
||||
m_MirrorTimer[FIRE_TIMER]+= 1*IN_MILLISECONDS;
|
||||
// Calculate and deal damage
|
||||
// TODO: Check this formula
|
||||
/// @todo Check this formula
|
||||
uint32 damage = urand(600, 700);
|
||||
if (m_MirrorTimerFlags & UNDERWATER_INLAVA)
|
||||
EnvironmentalDamage(DAMAGE_LAVA, damage);
|
||||
@@ -1621,7 +1621,7 @@ void Player::Update(uint32 p_time)
|
||||
if (Unit* victim = getVictim())
|
||||
{
|
||||
// default combat reach 10
|
||||
// TODO add weapon, skill check
|
||||
/// @todo add weapon, skill check
|
||||
|
||||
if (isAttackReady(BASE_ATTACK))
|
||||
{
|
||||
@@ -2506,7 +2506,7 @@ void Player::Regenerate(Powers power)
|
||||
|
||||
uint32 curValue = GetPower(power);
|
||||
|
||||
// TODO: possible use of miscvalueb instead of amount
|
||||
/// @todo possible use of miscvalueb instead of amount
|
||||
if (HasAuraTypeWithValue(SPELL_AURA_PREVENT_REGENERATE_POWER, power))
|
||||
return;
|
||||
|
||||
@@ -2762,7 +2762,7 @@ GameObject* Player::GetGameObjectIfCanInteractWith(uint64 guid, GameobjectTypes
|
||||
float maxdist;
|
||||
switch (type)
|
||||
{
|
||||
// TODO: find out how the client calculates the maximal usage distance to spellless working
|
||||
/// @todo find out how the client calculates the maximal usage distance to spellless working
|
||||
// gameobjects like guildbanks and mailboxes - 10.0 is a just an abitrary choosen number
|
||||
case GAMEOBJECT_TYPE_GUILD_BANK:
|
||||
case GAMEOBJECT_TYPE_MAILBOX:
|
||||
@@ -2801,7 +2801,7 @@ void Player::SetInWater(bool apply)
|
||||
//move player's guid into HateOfflineList of those mobs
|
||||
//which can't swim and move guid back into ThreatList when
|
||||
//on surface.
|
||||
//TODO: exist also swimming mobs, and function must be symmetric to enter/leave water
|
||||
/// @todo exist also swimming mobs, and function must be symmetric to enter/leave water
|
||||
m_isInWater = apply;
|
||||
|
||||
// remove auras that need water/land
|
||||
@@ -2914,7 +2914,7 @@ bool Player::IsInSameRaidWith(Player const* p) const
|
||||
}
|
||||
|
||||
///- If the player is invited, remove him. If the group if then only 1 person, disband the group.
|
||||
/// \todo Shouldn't we also check if there is no other invitees before disbanding the group?
|
||||
/// @todo Shouldn't we also check if there is no other invitees before disbanding the group?
|
||||
void Player::UninviteFromGroup()
|
||||
{
|
||||
Group* group = GetGroupInvite();
|
||||
@@ -3103,7 +3103,7 @@ void Player::GiveLevel(uint8 level)
|
||||
|
||||
if (MailLevelReward const* mailReward = sObjectMgr->GetMailLevelReward(level, getRaceMask()))
|
||||
{
|
||||
//- TODO: Poor design of mail system
|
||||
/// @todo Poor design of mail system
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
MailDraft(mailReward->mailTemplateId).SendMailTo(trans, this, MailSender(MAIL_CREATURE, mailReward->senderEntry));
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
@@ -5824,7 +5824,7 @@ void Player::GetDodgeFromAgility(float &diminishing, float &nondiminishing)
|
||||
if (dodgeRatio == NULL || pclass > MAX_CLASSES)
|
||||
return;
|
||||
|
||||
// TODO: research if talents/effects that increase total agility by x% should increase non-diminishing part
|
||||
/// @todo research if talents/effects that increase total agility by x% should increase non-diminishing part
|
||||
float base_agility = GetCreateStat(STAT_AGILITY) * m_auraModifiersGroup[UNIT_MOD_STAT_START + STAT_AGILITY][BASE_PCT];
|
||||
float bonus_agility = GetStat(STAT_AGILITY) - base_agility;
|
||||
|
||||
@@ -8769,7 +8769,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
|
||||
{
|
||||
uint32 lootid = go->GetGOInfo()->GetLootId();
|
||||
|
||||
//TODO: fix this big hack
|
||||
/// @todo fix this big hack
|
||||
if ((go->GetEntry() == BG_AV_OBJECTID_MINE_N || go->GetEntry() == BG_AV_OBJECTID_MINE_S))
|
||||
if (Battleground* bg = GetBattleground())
|
||||
if (bg->GetTypeID(true) == BATTLEGROUND_AV)
|
||||
@@ -11902,7 +11902,7 @@ InventoryResult Player::CanUseItem(Item* pItem, bool not_loading) const
|
||||
// Armor that is binded to account can "morph" from plate to mail, etc. if skill is not learned yet.
|
||||
if (pProto->Quality == ITEM_QUALITY_HEIRLOOM && pProto->Class == ITEM_CLASS_ARMOR && !HasSkill(itemSkill))
|
||||
{
|
||||
// TODO: when you right-click already equipped item it throws EQUIP_ERR_NO_REQUIRED_PROFICIENCY.
|
||||
/// @todo when you right-click already equipped item it throws EQUIP_ERR_NO_REQUIRED_PROFICIENCY.
|
||||
|
||||
// In fact it's a visual bug, everything works properly... I need sniffs of operations with
|
||||
// binded to account items from off server.
|
||||
@@ -13692,7 +13692,7 @@ void Player::AddTradeableItem(Item* item)
|
||||
m_itemSoulboundTradeable.push_back(item);
|
||||
}
|
||||
|
||||
//TODO: should never allow an item to be added to m_itemSoulboundTradeable twice
|
||||
/// @todo should never allow an item to be added to m_itemSoulboundTradeable twice
|
||||
void Player::RemoveTradeableItem(Item* item)
|
||||
{
|
||||
m_itemSoulboundTradeable.remove(item);
|
||||
@@ -14747,7 +14747,7 @@ void Player::SendPreparedQuest(uint64 guid)
|
||||
else if (icon == 4)
|
||||
PlayerTalkClass->SendQuestGiverRequestItems(quest, guid, CanRewardQuest(quest, false), true);
|
||||
// Send completable on repeatable and autoCompletable quest if player don't have quest
|
||||
// TODO: verify if check for !quest->IsDaily() is really correct (possibly not)
|
||||
/// @todo verify if check for !quest->IsDaily() is really correct (possibly not)
|
||||
else
|
||||
{
|
||||
Object* object = ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM);
|
||||
@@ -15284,7 +15284,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
|
||||
// Send reward mail
|
||||
if (uint32 mail_template_id = quest->GetRewMailTemplateId())
|
||||
{
|
||||
//- TODO: Poor design of mail system
|
||||
/// @todo Poor design of mail system
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
MailDraft(mail_template_id).SendMailTo(trans, this, questGiver, MAIL_CHECK_MASK_HAS_BODY, quest->GetRewMailDelaySecs());
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
@@ -17750,7 +17750,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
|
||||
//NOTE: the "order by `bag`" is important because it makes sure
|
||||
//the bagMap is filled before items in the bags are loaded
|
||||
//NOTE2: the "order by `slot`" is needed because mainhand weapons are (wrongly?)
|
||||
//expected to be equipped before offhand items (TODO: fixme)
|
||||
//expected to be equipped before offhand items (@todo fixme)
|
||||
|
||||
if (result)
|
||||
{
|
||||
@@ -20696,7 +20696,7 @@ void Player::RestoreSpellMods(Spell* spell, uint32 ownerAuraId, Aura* aura)
|
||||
mod->charges = mod->ownerAura->GetCharges();
|
||||
|
||||
// Skip this check for now - aura charges may change due to various reason
|
||||
// TODO: trac these changes correctly
|
||||
/// @todo trac these changes correctly
|
||||
//ASSERT (mod->ownerAura->GetCharges() <= mod->charges);
|
||||
}
|
||||
}
|
||||
@@ -21551,7 +21551,7 @@ void Player::UpdateHomebindTime(uint32 time)
|
||||
|
||||
void Player::UpdatePvPState(bool onlyFFA)
|
||||
{
|
||||
// TODO: should we always synchronize UNIT_FIELD_BYTES_2, 1 of controller and controlled?
|
||||
/// @todo should we always synchronize UNIT_FIELD_BYTES_2, 1 of controller and controlled?
|
||||
// no, we shouldn't, those are checked for affecting player by client
|
||||
if (!pvpInfo.IsInNoPvPArea && !isGameMaster()
|
||||
&& (pvpInfo.IsInFFAPvPArea || sWorld->IsFFAPvPRealm()))
|
||||
@@ -23825,7 +23825,7 @@ PartyResult Player::CanUninviteFromGroup() const
|
||||
if (grp->isRollLootActive())
|
||||
return ERR_PARTY_LFG_BOOT_LOOT_ROLLS;
|
||||
|
||||
// TODO: Should also be sent when anyone has recently left combat, with an aprox ~5 seconds timer.
|
||||
/// @todo Should also be sent when anyone has recently left combat, with an aprox ~5 seconds timer.
|
||||
for (GroupReference const* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
if (itr->getSource() && itr->getSource()->isInCombat())
|
||||
return ERR_PARTY_LFG_BOOT_IN_COMBAT;
|
||||
@@ -25913,7 +25913,7 @@ bool Player::AddItem(uint32 itemId, uint32 count)
|
||||
|
||||
if (count == 0 || dest.empty())
|
||||
{
|
||||
// -- TODO: Send to mailbox if no space
|
||||
/// @todo Send to mailbox if no space
|
||||
ChatHandler(GetSession()).PSendSysMessage("You don't have any space in your bags.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ void Totem::UnSummon(uint32 msTime)
|
||||
|
||||
bool Totem::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const
|
||||
{
|
||||
// TODO: possibly all negative auras immune?
|
||||
/// @todo possibly all negative auras immune?
|
||||
if (GetEntry() == 5925)
|
||||
return false;
|
||||
|
||||
|
||||
@@ -624,7 +624,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
|
||||
|
||||
uint32 share = CalculatePct(damage, (*i)->GetAmount());
|
||||
|
||||
// TODO: check packets if damage is done by victim, or by attacker of victim
|
||||
/// @todo check packets if damage is done by victim, or by attacker of victim
|
||||
DealDamageMods(shareDamageTarget, share, NULL);
|
||||
DealDamage(shareDamageTarget, share, NULL, NODAMAGE, spell->GetSchoolMask(), spell, false);
|
||||
}
|
||||
@@ -844,7 +844,7 @@ void Unit::CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: this is a workaround - not needed anymore, but required for some scripts :(
|
||||
/// @todo this is a workaround - not needed anymore, but required for some scripts :(
|
||||
if (!originalCaster && triggeredByAura)
|
||||
originalCaster = triggeredByAura->GetCasterGUID();
|
||||
|
||||
@@ -1104,7 +1104,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss)
|
||||
DealDamage(victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss);
|
||||
}
|
||||
|
||||
// TODO for melee need create structure as in
|
||||
/// @todo for melee need create structure as in
|
||||
void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* damageInfo, WeaponAttackType attackType)
|
||||
{
|
||||
damageInfo->attacker = this;
|
||||
@@ -1427,7 +1427,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss)
|
||||
// No Unit::CalcAbsorbResist here - opcode doesn't send that data - this damage is probably not affected by that
|
||||
victim->DealDamageMods(this, damage, NULL);
|
||||
|
||||
// TODO: Move this to a packet handler
|
||||
/// @todo Move this to a packet handler
|
||||
WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8+8+4+4+4+4));
|
||||
data << uint64(victim->GetGUID());
|
||||
data << uint64(GetGUID());
|
||||
@@ -2456,7 +2456,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spell)
|
||||
return SPELL_MISS_NONE;
|
||||
}
|
||||
|
||||
// TODO need use unit spell resistances in calculations
|
||||
/// @todo need use unit spell resistances in calculations
|
||||
SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spell)
|
||||
{
|
||||
// Can`t miss on dead target (on skinning for example)
|
||||
@@ -2575,7 +2575,7 @@ SpellMissInfo Unit::SpellHitResult(Unit* victim, SpellInfo const* spell, bool Ca
|
||||
return SPELL_MISS_IMMUNE;
|
||||
|
||||
// All positive spells can`t miss
|
||||
// TODO: client not show miss log for this spells - so need find info for this in dbc and use it!
|
||||
/// @todo client not show miss log for this spells - so need find info for this in dbc and use it!
|
||||
if (spell->IsPositive()
|
||||
&&(!IsHostileTo(victim))) // prevent from affecting enemy by "positive" spell
|
||||
return SPELL_MISS_NONE;
|
||||
@@ -5200,7 +5200,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
|
||||
target = this;
|
||||
if (roll_chance_i(10))
|
||||
ToPlayer()->Say("This is Madness!", LANG_UNIVERSAL); // TODO: It should be moved to database, shouldn't it?
|
||||
ToPlayer()->Say("This is Madness!", LANG_UNIVERSAL); /// @todo It should be moved to database, shouldn't it?
|
||||
break;
|
||||
}
|
||||
// Sunwell Exalted Caster Neck (??? neck)
|
||||
@@ -5600,7 +5600,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
if (!vehicleBase)
|
||||
return false;
|
||||
|
||||
// Todo: Check if this amount is blizzlike
|
||||
/// @todo Check if this amount is blizzlike
|
||||
vehicleBase->ModifyHealth(int32(vehicleBase->CountPctFromMaxHealth(1)));
|
||||
break;
|
||||
}
|
||||
@@ -7181,7 +7181,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
// Mark of Blood
|
||||
if (dummySpell->Id == 49005)
|
||||
{
|
||||
// TODO: need more info (cooldowns/PPM)
|
||||
/// @todo need more info (cooldowns/PPM)
|
||||
triggered_spell_id = 61607;
|
||||
break;
|
||||
}
|
||||
@@ -8092,7 +8092,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
basepoints0 = int32(auraSpellInfo->Effects[EFFECT_0].CalcValue() * GetMaxHealth() / 100.0f);
|
||||
target = this;
|
||||
trigger_spell_id = 31616;
|
||||
// TODO: Threat part
|
||||
/// @todo Threat part
|
||||
}
|
||||
else
|
||||
return false;
|
||||
@@ -8449,7 +8449,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
{
|
||||
if (AuraEffect* aurEff = owner->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, 3220, 0))
|
||||
{
|
||||
basepoints0 = int32((aurEff->GetAmount() * owner->SpellBaseDamageBonusDone(SpellSchoolMask(SPELL_SCHOOL_MASK_MAGIC)) + 100.0f) / 100.0f); // TODO: Is it right?
|
||||
basepoints0 = int32((aurEff->GetAmount() * owner->SpellBaseDamageBonusDone(SpellSchoolMask(SPELL_SCHOOL_MASK_MAGIC)) + 100.0f) / 100.0f); /// @todo Is it right?
|
||||
CastCustomSpell(this, trigger_spell_id, &basepoints0, &basepoints0, NULL, true, castItem, triggeredByAura);
|
||||
return true;
|
||||
}
|
||||
@@ -9527,7 +9527,7 @@ void Unit::SetCharm(Unit* charm, bool apply)
|
||||
sLog->outFatal(LOG_FILTER_UNITS, "Player %s is trying to charm unit %u, but it already has a charmed unit " UI64FMTD "", GetName().c_str(), charm->GetEntry(), GetCharmGUID());
|
||||
|
||||
charm->m_ControlledByPlayer = true;
|
||||
// TODO: maybe we can use this flag to check if controlled by player
|
||||
/// @todo maybe we can use this flag to check if controlled by player
|
||||
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
||||
}
|
||||
else
|
||||
@@ -9644,7 +9644,7 @@ Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
|
||||
&& spellInfo->CheckTarget(this, magnet, false) == SPELL_CAST_OK
|
||||
&& _IsValidAttackTarget(magnet, spellInfo))
|
||||
{
|
||||
// TODO: handle this charge drop by proc in cast phase on explicit target
|
||||
/// @todo handle this charge drop by proc in cast phase on explicit target
|
||||
(*itr)->GetBase()->DropCharge(AURA_REMOVE_BY_EXPIRE);
|
||||
return magnet;
|
||||
}
|
||||
@@ -10645,7 +10645,7 @@ uint32 Unit::SpellCriticalDamageBonus(SpellInfo const* spellProto, uint32 damage
|
||||
{
|
||||
case SPELL_DAMAGE_CLASS_MELEE: // for melee based spells is 100%
|
||||
case SPELL_DAMAGE_CLASS_RANGED:
|
||||
// TODO: write here full calculation for melee/ranged spells
|
||||
/// @todo write here full calculation for melee/ranged spells
|
||||
crit_bonus += damage;
|
||||
break;
|
||||
default:
|
||||
@@ -10683,7 +10683,7 @@ uint32 Unit::SpellCriticalHealingBonus(SpellInfo const* spellProto, uint32 damag
|
||||
{
|
||||
case SPELL_DAMAGE_CLASS_MELEE: // for melee based spells is 100%
|
||||
case SPELL_DAMAGE_CLASS_RANGED:
|
||||
// TODO: write here full calculation for melee/ranged spells
|
||||
/// @todo write here full calculation for melee/ranged spells
|
||||
crit_bonus = damage;
|
||||
break;
|
||||
default:
|
||||
@@ -12257,7 +12257,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
||||
}
|
||||
|
||||
// Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need
|
||||
// TODO: possible affect only on MOVE_RUN
|
||||
/// @todo possible affect only on MOVE_RUN
|
||||
if (int32 normalization = GetMaxPositiveAuraModifier(SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED))
|
||||
{
|
||||
// Use speed from aura
|
||||
@@ -12683,7 +12683,7 @@ Unit* Creature::SelectVictim()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// TODO: a vehicle may eat some mob, so mob should not evade
|
||||
/// @todo a vehicle may eat some mob, so mob should not evade
|
||||
if (GetVehicle())
|
||||
return NULL;
|
||||
|
||||
@@ -15362,7 +15362,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
|
||||
{
|
||||
Map* instanceMap = creature->GetMap();
|
||||
Player* creditedPlayer = GetCharmerOrOwnerPlayerOrPlayerItself();
|
||||
// TODO: do instance binding anyway if the charmer/owner is offline
|
||||
/// @todo do instance binding anyway if the charmer/owner is offline
|
||||
|
||||
if (instanceMap->IsDungeon() && creditedPlayer)
|
||||
{
|
||||
@@ -15724,7 +15724,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
|
||||
}
|
||||
|
||||
CastStop();
|
||||
CombatStop(); // TODO: CombatStop(true) may cause crash (interrupt spells)
|
||||
CombatStop(); /// @todo CombatStop(true) may cause crash (interrupt spells)
|
||||
DeleteThreatList();
|
||||
|
||||
// Charmer stop charming
|
||||
@@ -15859,7 +15859,7 @@ void Unit::RemoveCharmedBy(Unit* charmer)
|
||||
type = CHARM_TYPE_CHARM;
|
||||
|
||||
CastStop();
|
||||
CombatStop(); // TODO: CombatStop(true) may cause crash (interrupt spells)
|
||||
CombatStop(); /// @todo CombatStop(true) may cause crash (interrupt spells)
|
||||
getHostileRefManager().deleteReferences();
|
||||
DeleteThreatList();
|
||||
Map* map = GetMap();
|
||||
@@ -17389,7 +17389,7 @@ void Unit::SetFacingToObject(WorldObject* object)
|
||||
if (!IsStopped())
|
||||
return;
|
||||
|
||||
// TODO: figure out under what conditions creature will move towards object instead of facing it where it currently is.
|
||||
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
|
||||
SetFacingTo(GetAngle(object));
|
||||
}
|
||||
|
||||
|
||||
@@ -703,7 +703,7 @@ enum MovementFlags
|
||||
MOVEMENTFLAG_FALLING_SLOW = 0x20000000, // active rogue safe fall spell (passive)
|
||||
MOVEMENTFLAG_HOVER = 0x40000000, // hover, cannot jump
|
||||
|
||||
// TODO: Check if PITCH_UP and PITCH_DOWN really belong here..
|
||||
/// @todo Check if PITCH_UP and PITCH_DOWN really belong here..
|
||||
MOVEMENTFLAG_MASK_MOVING =
|
||||
MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT |
|
||||
MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN | MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING |
|
||||
@@ -715,7 +715,7 @@ enum MovementFlags
|
||||
MOVEMENTFLAG_MASK_MOVING_FLY =
|
||||
MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,
|
||||
|
||||
//! TODO if needed: add more flags to this masks that are exclusive to players
|
||||
/// @todo if needed: add more flags to this masks that are exclusive to players
|
||||
MOVEMENTFLAG_MASK_PLAYER_ONLY =
|
||||
MOVEMENTFLAG_FLYING
|
||||
};
|
||||
@@ -926,7 +926,7 @@ struct CalcDamageInfo
|
||||
uint32 procVictim;
|
||||
uint32 procEx;
|
||||
uint32 cleanDamage; // Used only for rage calculation
|
||||
MeleeHitOutcome hitOutCome; // TODO: remove this field (need use TargetState)
|
||||
MeleeHitOutcome hitOutCome; /// @todo remove this field (need use TargetState)
|
||||
};
|
||||
|
||||
// Spell damage info structure based on structure sending in SMSG_SPELLNONMELEEDAMAGELOG opcode
|
||||
|
||||
@@ -765,7 +765,7 @@ void GameEventMgr::LoadFromDB()
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint32 questId = fields[0].GetUInt32();
|
||||
uint32 eventEntry = fields[1].GetUInt32(); // TODO: Change to uint8
|
||||
uint32 eventEntry = fields[1].GetUInt32(); /// @todo Change to uint8
|
||||
|
||||
if (!sObjectMgr->GetQuestTemplate(questId))
|
||||
{
|
||||
@@ -1227,7 +1227,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
|
||||
{
|
||||
GameObject* pGameobject = new GameObject;
|
||||
//sLog->outDebug(LOG_FILTER_GENERAL, "Spawning gameobject %u", *itr);
|
||||
//TODO: find out when it is add to map
|
||||
/// @todo find out when it is add to map
|
||||
if (!pGameobject->LoadGameObjectFromDB(*itr, map, false))
|
||||
delete pGameobject;
|
||||
else
|
||||
|
||||
@@ -213,7 +213,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
|
||||
{
|
||||
ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
|
||||
|
||||
//TODO: more works need to be done for corpse and other world object
|
||||
/// @todo more works need to be done for corpse and other world object
|
||||
if (Map* map = corpse->FindMap())
|
||||
{
|
||||
corpse->DestroyForNearbyPlayers();
|
||||
@@ -234,7 +234,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
|
||||
TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
|
||||
|
||||
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
|
||||
if (iter == i_player2corpse.end()) // TODO: Fix this
|
||||
if (iter == i_player2corpse.end()) /// @todo Fix this
|
||||
return;
|
||||
|
||||
// build mapid*cellid -> guid_set map
|
||||
|
||||
@@ -44,7 +44,7 @@ void ObjectGridEvacuator::Visit(CreatureMapType &m)
|
||||
}
|
||||
|
||||
// for loading world object at grid loading (Corpses)
|
||||
//TODO: to implement npc on transport, also need to load npcs at grid loading
|
||||
/// @todo to implement npc on transport, also need to load npcs at grid loading
|
||||
class ObjectWorldLoader
|
||||
{
|
||||
public:
|
||||
@@ -121,7 +121,7 @@ void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapTyp
|
||||
if (!obj)
|
||||
continue;
|
||||
|
||||
// TODO: this is a hack
|
||||
/// @todo this is a hack
|
||||
// corpse's map should be reset when the map is unloaded
|
||||
// but it may still exist when the grid is unloaded but map is not
|
||||
// in that case map == currMap
|
||||
@@ -200,7 +200,7 @@ void ObjectGridUnloader::Visit(GridRefManager<T> &m)
|
||||
//Some creatures may summon other temp summons in CleanupsBeforeDelete()
|
||||
//So we need this even after cleaner (maybe we can remove cleaner)
|
||||
//Example: Flame Leviathan Turret 33139 is summoned when a creature is deleted
|
||||
//TODO: Check if that script has the correct logic. Do we really need to summons something before deleting?
|
||||
/// @todo Check if that script has the correct logic. Do we really need to summons something before deleting?
|
||||
obj->CleanupsBeforeDelete();
|
||||
///- object will get delinked from the manager when deleted
|
||||
delete obj;
|
||||
|
||||
@@ -156,7 +156,7 @@ struct InstanceGroupBind
|
||||
};
|
||||
|
||||
/** request member stats checken **/
|
||||
/** todo: uninvite people that not accepted invite **/
|
||||
/// @todo uninvite people that not accepted invite
|
||||
class Group
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -983,7 +983,7 @@ void Guild::BankMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData*
|
||||
void Guild::BankMoveItemData::LogAction(MoveItemData* pFrom) const
|
||||
{
|
||||
MoveItemData::LogAction(pFrom);
|
||||
if (!pFrom->IsBank() && m_pPlayer->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE))
|
||||
if (!pFrom->IsBank() && m_pPlayer->GetSession()->HasPermission(RBAC_PERM_LOG_GM_TRADE)) /// @todo Move this to scripts
|
||||
{
|
||||
sLog->outCommand(m_pPlayer->GetSession()->GetAccountId(),
|
||||
"GM %s (Account: %u) deposit item: %s (Entry: %d Count: %u) to guild bank (Guild ID: %u)",
|
||||
@@ -2730,7 +2730,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError
|
||||
if (!pSrc->CanStore(pDestItem, true, true))
|
||||
return false;
|
||||
|
||||
// GM LOG (TODO: move to scripts)
|
||||
// GM LOG (@todo move to scripts)
|
||||
pDest->LogAction(pSrc);
|
||||
if (swap)
|
||||
pSrc->LogAction(pDest);
|
||||
@@ -2874,7 +2874,7 @@ void Guild::_SendBankList(WorldSession* session /* = NULL*/, uint8 tabId /*= 0*/
|
||||
sLog->outDebug(LOG_FILTER_GUILD, "SMSG_GUILD_BANK_LIST [%s]: TabId: %u, FullSlots: %u, slots: %d",
|
||||
session->GetPlayerInfo().c_str(), tabId, sendAllSlots, numSlots);
|
||||
}
|
||||
else // TODO - Probably this is just sent to session + those that have sent CMSG_GUILD_BANKER_ACTIVATE
|
||||
else /// @todo - Probably this is just sent to session + those that have sent CMSG_GUILD_BANKER_ACTIVATE
|
||||
{
|
||||
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT [ uint64(inviteId), string(Text) ]
|
||||
SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT [ uint64(eventId), uint32(eventTime), uint32(unkFlag), uint8(deletePending) ]
|
||||
SMSG_CALENDAR_RAID_LOCKOUT_UPDATED SendCalendarRaidLockoutUpdated(InstanceSave const* save)
|
||||
|
||||
----- TODO -----
|
||||
@todo
|
||||
|
||||
Finish complains' handling - what to do with received complains and how to respond?
|
||||
Find out what to do with all "not used yet" opcodes
|
||||
@@ -147,7 +147,7 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/)
|
||||
data << uint32(boundCounter);
|
||||
data.append(dataBuffer);
|
||||
|
||||
// TODO: Fix this, how we do know how many and what holidays to send?
|
||||
/// @todo Fix this, how we do know how many and what holidays to send?
|
||||
uint32 holidayCount = 0;
|
||||
data << uint32(holidayCount);
|
||||
for (uint32 i = 0; i < holidayCount; ++i)
|
||||
|
||||
@@ -556,7 +556,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
|
||||
}
|
||||
|
||||
// need to check team only for first character
|
||||
// TODO: what to if account already has characters of both races?
|
||||
/// @todo what to if account already has characters of both races?
|
||||
if (!allowTwoSideAccounts)
|
||||
{
|
||||
uint32 accTeam = 0;
|
||||
@@ -575,7 +575,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
|
||||
}
|
||||
|
||||
// search same race for cinematic or same class if need
|
||||
// TODO: check if cinematic already shown? (already logged in?; cinematic field)
|
||||
/// @todo check if cinematic already shown? (already logged in?; cinematic field)
|
||||
while ((skipCinematics == 1 && !haveSameRace) || createInfo->Class == CLASS_DEATH_KNIGHT)
|
||||
{
|
||||
if (!result->NextRow())
|
||||
|
||||
@@ -735,7 +735,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData)
|
||||
}
|
||||
}
|
||||
|
||||
//TODO Fix me! ... this void has probably bad condition, but good data are sent
|
||||
/// @todo Fix me! ... this void has probably bad condition, but good data are sent
|
||||
void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recvData*/)
|
||||
{
|
||||
WorldPacket data(MSG_QUERY_NEXT_MAIL_TIME, 8);
|
||||
|
||||
@@ -1066,7 +1066,7 @@ void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData)
|
||||
recvData >> time_skipped;
|
||||
sLog->outDebug(LOG_FILTER_PACKETIO, "WORLD: CMSG_MOVE_TIME_SKIPPED");
|
||||
|
||||
/// TODO
|
||||
//// @todo
|
||||
must be need use in Trinity
|
||||
We substract server Lags to move time (AntiLags)
|
||||
for exmaple
|
||||
|
||||
@@ -392,7 +392,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData)
|
||||
{
|
||||
// NOTE: this is actually called many times while falling
|
||||
// even after the player has been teleported away
|
||||
// TODO: discard movement packets after the player is rooted
|
||||
/// @todo discard movement packets after the player is rooted
|
||||
if (plrMover->isAlive())
|
||||
{
|
||||
plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
|
||||
|
||||
@@ -93,7 +93,7 @@ void WorldSession::HandlePetAction(WorldPacket& recvData)
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO: allow control charmed player?
|
||||
/// @todo allow control charmed player?
|
||||
if (pet->GetTypeId() == TYPEID_PLAYER && !(flag == ACT_COMMAND && spellid == COMMAND_ATTACK))
|
||||
return;
|
||||
|
||||
@@ -185,7 +185,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid
|
||||
if (_player->HasAuraType(SPELL_AURA_MOD_PACIFY))
|
||||
{
|
||||
//pet->SendPetCastFail(spellid, SPELL_FAILED_PACIFIED);
|
||||
//TODO: Send proper error message to client
|
||||
/// @todo Send proper error message to client
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -792,7 +792,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
|
||||
spell->m_cast_count = castCount; // probably pending spell cast
|
||||
spell->m_targets = targets;
|
||||
|
||||
// TODO: need to check victim?
|
||||
/// @todo need to check victim?
|
||||
SpellCastResult result;
|
||||
if (caster->m_movedPlayer)
|
||||
result = spell->CheckPetCast(caster->m_movedPlayer->GetSelectedUnit());
|
||||
|
||||
@@ -111,7 +111,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData)
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: find correct opcode
|
||||
/// @todo find correct opcode
|
||||
if (_player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
|
||||
{
|
||||
SendNotification(LANG_ARENA_ONE_TOOLOW, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL));
|
||||
|
||||
@@ -502,7 +502,7 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData)
|
||||
_player->GetName().c_str(), _player->GetGUIDLow(), questId);
|
||||
return;
|
||||
}
|
||||
// TODO: need a virtual function
|
||||
/// @todo need a virtual function
|
||||
if (_player->InBattleground())
|
||||
if (Battleground* bg = _player->GetBattleground())
|
||||
if (bg->GetTypeID() == BATTLEGROUND_AV)
|
||||
|
||||
@@ -59,7 +59,7 @@ void WorldSession::HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlag
|
||||
|
||||
void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
// TODO: add targets.read() check
|
||||
/// @todo add targets.read() check
|
||||
Player* pUser = _player;
|
||||
|
||||
// ignore for remote control state
|
||||
@@ -547,7 +547,7 @@ void WorldSession::HandleSpellClick(WorldPacket& recvData)
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
// TODO: Unit::SetCharmedBy: 28782 is not in world but 0 is trying to charm it! -> crash
|
||||
/// @todo Unit::SetCharmedBy: 28782 is not in world but 0 is trying to charm it! -> crash
|
||||
if (!unit->IsInWorld())
|
||||
return;
|
||||
|
||||
|
||||
@@ -646,7 +646,7 @@ void InstanceSaveManager::_ResetOrWarnAll(uint32 mapid, Difficulty difficulty, b
|
||||
((InstanceMap*)map2)->Reset(INSTANCE_RESET_GLOBAL);
|
||||
}
|
||||
|
||||
// TODO: delete creature/gameobject respawn times even if the maps are not loaded
|
||||
/// @todo delete creature/gameobject respawn times even if the maps are not loaded
|
||||
}
|
||||
|
||||
uint32 InstanceSaveManager::GetNumBoundPlayersTotal()
|
||||
|
||||
@@ -1186,7 +1186,7 @@ float LootTemplate::LootGroup::TotalChance() const
|
||||
void LootTemplate::LootGroup::Verify(LootStore const& lootstore, uint32 id, uint8 group_id) const
|
||||
{
|
||||
float chance = RawTotalChance();
|
||||
if (chance > 101.0f) // TODO: replace with 100% when DBs will be ready
|
||||
if (chance > 101.0f) /// @todo replace with 100% when DBs will be ready
|
||||
sLog->outError(LOG_FILTER_SQL, "Table '%s' entry %u group %d has total chance > 100%% (%f)", lootstore.GetName(), id, group_id, chance);
|
||||
|
||||
if (chance >= 100.0f && !EqualChanced.empty())
|
||||
@@ -1407,7 +1407,7 @@ void LootTemplate::Verify(LootStore const& lootstore, uint32 id) const
|
||||
if (Groups[i])
|
||||
Groups[i]->Verify(lootstore, id, i + 1);
|
||||
|
||||
// TODO: References validity checks
|
||||
/// @todo References validity checks
|
||||
}
|
||||
|
||||
void LootTemplate::CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_set) const
|
||||
|
||||
@@ -315,7 +315,7 @@ template<>
|
||||
void Map::DeleteFromWorld(Player* player)
|
||||
{
|
||||
sObjectAccessor->RemoveObject(player);
|
||||
sObjectAccessor->RemoveUpdateObject(player); //TODO: I do not know why we need this, it should be removed in ~Object anyway
|
||||
sObjectAccessor->RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway
|
||||
delete player;
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ void Map::InitializeObject(Creature* obj)
|
||||
template<class T>
|
||||
bool Map::AddToMap(T *obj)
|
||||
{
|
||||
//TODO: Needs clean up. An object should not be added to map twice.
|
||||
/// @todo Needs clean up. An object should not be added to map twice.
|
||||
if (obj->IsInWorld())
|
||||
{
|
||||
ASSERT(obj->IsInGrid());
|
||||
@@ -839,7 +839,7 @@ void Map::MoveAllCreaturesInMoveList()
|
||||
//This may happen when a player just logs in and a pet moves to a nearby unloaded cell
|
||||
//To avoid this, we can load nearby cells when player log in
|
||||
//But this check is always needed to ensure safety
|
||||
//TODO: pets will disappear if this is outside CreatureRespawnRelocation
|
||||
/// @todo pets will disappear if this is outside CreatureRespawnRelocation
|
||||
//need to check why pet is frequently relocated to an unloaded cell
|
||||
if (c->isPet())
|
||||
((Pet*)c)->Remove(PET_SAVE_NOT_IN_SLOT, true);
|
||||
@@ -2387,7 +2387,7 @@ bool InstanceMap::CanEnter(Player* player)
|
||||
*/
|
||||
bool InstanceMap::AddPlayerToMap(Player* player)
|
||||
{
|
||||
// TODO: Not sure about checking player level: already done in HandleAreaTriggerOpcode
|
||||
/// @todo Not sure about checking player level: already done in HandleAreaTriggerOpcode
|
||||
// GMs still can teleport player in instance.
|
||||
// Is it needed?
|
||||
|
||||
@@ -2541,7 +2541,7 @@ void InstanceMap::CreateInstanceData(bool load)
|
||||
|
||||
if (load)
|
||||
{
|
||||
// TODO: make a global storage for this
|
||||
/// @todo make a global storage for this
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_INSTANCE);
|
||||
stmt->setUInt16(0, uint16(GetId()));
|
||||
stmt->setUInt32(1, i_InstanceId);
|
||||
|
||||
@@ -195,7 +195,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
|
||||
if ((!group || !group->isRaidGroup()) && !sWorld->getBoolConfig(CONFIG_INSTANCE_IGNORE_RAID))
|
||||
{
|
||||
// probably there must be special opcode, because client has this string constant in GlobalStrings.lua
|
||||
// TODO: this is not a good place to send the message
|
||||
/// @todo this is not a good place to send the message
|
||||
player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(LANG_INSTANCE_RAID_GROUP_ONLY), mapName);
|
||||
sLog->outDebug(LOG_FILTER_MAPS, "MAP: Player '%s' must be in a raid group to enter instance '%s'", player->GetName().c_str(), mapName);
|
||||
return false;
|
||||
@@ -247,7 +247,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
|
||||
if (playerBoundedInstance && playerBoundedInstance->perm && playerBoundedInstance->save &&
|
||||
boundedInstance->save->GetInstanceId() != playerBoundedInstance->save->GetInstanceId())
|
||||
{
|
||||
//TODO: send some kind of error message to the player
|
||||
/// @todo send some kind of error message to the player
|
||||
return false;
|
||||
}*/
|
||||
}
|
||||
@@ -321,7 +321,7 @@ bool MapManager::IsValidMAP(uint32 mapid, bool startUp)
|
||||
else
|
||||
return mEntry && (!mEntry->IsDungeon() || sObjectMgr->GetInstanceTemplate(mapid));
|
||||
|
||||
// TODO: add check for battleground template
|
||||
/// @todo add check for battleground template
|
||||
}
|
||||
|
||||
void MapManager::UnloadAll()
|
||||
|
||||
@@ -256,7 +256,7 @@ void PathGenerator::BuildPolyPath(Vector3 const& startPos, Vector3 const& endPos
|
||||
}
|
||||
|
||||
// look for startPoly/endPoly in current path
|
||||
// TODO: we can merge it with getPathPolyByPosition() loop
|
||||
/// @todo we can merge it with getPathPolyByPosition() loop
|
||||
bool startPolyFound = false;
|
||||
bool endPolyFound = false;
|
||||
uint32 pathStartIndex = 0;
|
||||
@@ -310,7 +310,7 @@ void PathGenerator::BuildPolyPath(Vector3 const& startPos, Vector3 const& endPos
|
||||
// sub-path of optimal path is optimal
|
||||
|
||||
// take ~80% of the original length
|
||||
// TODO : play with the values here
|
||||
/// @todo play with the values here
|
||||
uint32 prefixPolyLength = uint32(_polyLength * 0.8f + 0.5f);
|
||||
memmove(_pathPolyRefs, _pathPolyRefs+pathStartIndex, prefixPolyLength * sizeof(dtPolyRef));
|
||||
|
||||
@@ -433,7 +433,7 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin
|
||||
{
|
||||
// only happens if pass bad data to findStraightPath or navmesh is broken
|
||||
// single point paths can be generated here
|
||||
// TODO : check the exact cases
|
||||
/// @todo check the exact cases
|
||||
sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount);
|
||||
BuildShortcut();
|
||||
_type = PATHFIND_NOPATH;
|
||||
|
||||
@@ -151,7 +151,7 @@ void MoveSpline::init_spline(const MoveSplineInitArgs& args)
|
||||
spline.initLengths(init);
|
||||
}
|
||||
|
||||
// TODO: what to do in such cases? problem is in input data (all points are at same coords)
|
||||
/// @todo what to do in such cases? problem is in input data (all points are at same coords)
|
||||
if (spline.length() < minimal_duration)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_GENERAL, "MoveSpline::init_spline: zero length spline, wrong input data?");
|
||||
|
||||
@@ -698,7 +698,7 @@ void Map::ScriptsProcess()
|
||||
|
||||
case SCRIPT_COMMAND_CAST_SPELL:
|
||||
{
|
||||
// TODO: Allow gameobjects to be targets and casters
|
||||
/// @todo Allow gameobjects to be targets and casters
|
||||
if (!source && !target)
|
||||
{
|
||||
sLog->outError(LOG_FILTER_TSCR, "%s source and target objects are NULL.", step.script->GetDebugInfo().c_str());
|
||||
|
||||
@@ -766,7 +766,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, Creature* creature)
|
||||
ASSERT(player);
|
||||
ASSERT(creature);
|
||||
|
||||
// TODO: 100 is a funny magic number to have hanging around here...
|
||||
/// @todo 100 is a funny magic number to have hanging around here...
|
||||
GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, 100);
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
return tmpscript->GetDialogStatus(player, creature);
|
||||
@@ -852,7 +852,7 @@ uint32 ScriptMgr::GetDialogStatus(Player* player, GameObject* go)
|
||||
ASSERT(player);
|
||||
ASSERT(go);
|
||||
|
||||
// TODO: 100 is a funny magic number to have hanging around here...
|
||||
/// @todo 100 is a funny magic number to have hanging around here...
|
||||
GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, 100);
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
return tmpscript->GetDialogStatus(player, go);
|
||||
@@ -918,7 +918,7 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger)
|
||||
|
||||
Battleground* ScriptMgr::CreateBattleground(BattlegroundTypeId /*typeId*/)
|
||||
{
|
||||
// TODO: Implement script-side battlegrounds.
|
||||
/// @todo Implement script-side battlegrounds.
|
||||
ASSERT(false);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ struct OutdoorPvPData;
|
||||
|
||||
|
||||
/*
|
||||
TODO: Add more script type classes.
|
||||
@todo Add more script type classes.
|
||||
|
||||
MailScript
|
||||
SessionScript
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define TEXT_SOURCE_RANGE -1000000 //the amount of entries each text source has available
|
||||
|
||||
//TODO: find better namings and definitions.
|
||||
/// @todo find better namings and definitions.
|
||||
//N=Neutral, A=Alliance, H=Horde.
|
||||
//NEUTRAL or FRIEND = Hostility to player surroundings (not a good definition)
|
||||
//ACTIVE or PASSIVE = Hostility to environment surroundings.
|
||||
|
||||
@@ -974,7 +974,7 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data)
|
||||
sLog->outInfo(LOG_FILTER_GENERAL, "ADDON: %s (0x%x) was not known, saving...", addon.Name.c_str(), addon.CRC);
|
||||
}
|
||||
|
||||
// TODO: Find out when to not use CRC/pubkey, and other possible states.
|
||||
/// @todo Find out when to not use CRC/pubkey, and other possible states.
|
||||
m_addonsList.push_back(addon);
|
||||
}
|
||||
|
||||
@@ -1031,7 +1031,7 @@ void WorldSession::SendAddonsInfo()
|
||||
data.append(addonPublicKey, sizeof(addonPublicKey));
|
||||
}
|
||||
|
||||
data << uint32(0); // TODO: Find out the meaning of this.
|
||||
data << uint32(0); /// @todo Find out the meaning of this.
|
||||
}
|
||||
|
||||
uint8 unk3 = 0; // 0 is sent here
|
||||
|
||||
@@ -1022,7 +1022,7 @@ void AuraEffect::CleanupTriggeredSpells(Unit* target)
|
||||
return;
|
||||
|
||||
// needed for spell 43680, maybe others
|
||||
// TODO: is there a spell flag, which can solve this in a more sophisticated way?
|
||||
/// @todo is there a spell flag, which can solve this in a more sophisticated way?
|
||||
if (m_spellInfo->Effects[GetEffIndex()].ApplyAuraName == SPELL_AURA_PERIODIC_TRIGGER_SPELL &&
|
||||
uint32(m_spellInfo->GetDuration()) == m_spellInfo->Effects[GetEffIndex()].Amplitude)
|
||||
return;
|
||||
@@ -2322,7 +2322,8 @@ void AuraEffect::HandleAuraModPacifyAndSilence(AuraApplication const* aurApp, ui
|
||||
|
||||
Unit* target = aurApp->GetTarget();
|
||||
|
||||
// Vengeance of the Blue Flight (TODO: REMOVE THIS!)
|
||||
// Vengeance of the Blue Flight (@todo REMOVE THIS!)
|
||||
/// @workaround
|
||||
if (m_spellInfo->Id == 45839)
|
||||
{
|
||||
if (apply)
|
||||
@@ -3410,7 +3411,7 @@ void AuraEffect::HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint
|
||||
&& GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_DAMAGE_REDUCED_SHIELD)
|
||||
target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
||||
|
||||
// TODO: optimalize this cycle - use RemoveAurasWithInterruptFlags call or something else
|
||||
/// @todo optimalize this cycle - use RemoveAurasWithInterruptFlags call or something else
|
||||
if ((apply)
|
||||
&& GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY
|
||||
&& GetSpellInfo()->IsPositive()) //Only positive immunity removes auras
|
||||
@@ -4641,7 +4642,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
if (owner_aura)
|
||||
{
|
||||
// This aura lasts 2 sec, need this hack to properly proc spells
|
||||
// TODO: drop aura charges for ApplySpellMod in ProcDamageAndSpell
|
||||
/// @todo drop aura charges for ApplySpellMod in ProcDamageAndSpell
|
||||
GetBase()->SetDuration(owner_aura->GetDuration());
|
||||
// Make aura be not charged-this prevents removing charge on not crit spells
|
||||
owner_aura->SetCharges(0);
|
||||
@@ -5396,7 +5397,7 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const
|
||||
// Killing Spree
|
||||
case 51690:
|
||||
{
|
||||
// TODO: this should use effect[1] of 51690
|
||||
/// @todo this should use effect[1] of 51690
|
||||
UnitList targets;
|
||||
{
|
||||
// eff_radius == 0
|
||||
@@ -5593,7 +5594,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
|
||||
triggerSpellId = 30571;
|
||||
break;
|
||||
// Doom
|
||||
// TODO: effect trigger spell may be independant on spell targets, and executed in spell finish phase
|
||||
/// @todo effect trigger spell may be independant on spell targets, and executed in spell finish phase
|
||||
// so instakill will be naturally done before trigger spell
|
||||
case 31347:
|
||||
{
|
||||
|
||||
@@ -421,7 +421,7 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA
|
||||
|
||||
ApplicationMap::iterator itr = m_applications.find(target->GetGUID());
|
||||
|
||||
// TODO: Figure out why this happens
|
||||
/// @todo Figure out why this happens
|
||||
if (itr == m_applications.end())
|
||||
{
|
||||
sLog->outError(LOG_FILTER_SPELLS_AURAS, "Aura::_UnapplyForTarget, target:%u, caster:%u, spell:%u was not found in owners application map!",
|
||||
@@ -565,7 +565,7 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
|
||||
// owner has to be in world, or effect has to be applied to self
|
||||
if (!GetOwner()->IsSelfOrInSameMap(itr->first))
|
||||
{
|
||||
//TODO: There is a crash caused by shadowfiend load addon
|
||||
/// @todo There is a crash caused by shadowfiend load addon
|
||||
sLog->outFatal(LOG_FILTER_SPELLS_AURAS, "Aura %u: Owner %s (map %u) is not in the same map as target %s (map %u).", GetSpellInfo()->Id,
|
||||
GetOwner()->GetName().c_str(), GetOwner()->IsInWorld() ? GetOwner()->GetMap()->GetId() : uint32(-1),
|
||||
itr->first->GetName().c_str(), itr->first->IsInWorld() ? itr->first->GetMap()->GetId() : uint32(-1));
|
||||
@@ -941,7 +941,7 @@ void Aura::UnregisterSingleTarget()
|
||||
{
|
||||
ASSERT(m_isSingleTarget);
|
||||
Unit* caster = GetCaster();
|
||||
// TODO: find a better way to do this.
|
||||
/// @todo find a better way to do this.
|
||||
if (!caster)
|
||||
caster = ObjectAccessor::GetObjectInOrOutOfWorld(GetCasterGUID(), (Unit*)NULL);
|
||||
ASSERT(caster);
|
||||
@@ -1166,7 +1166,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
||||
if (caster->HasAura(56370))
|
||||
SetDuration(0);
|
||||
}
|
||||
// Todo: This should be moved to similar function in spell::hit
|
||||
/// @todo This should be moved to similar function in spell::hit
|
||||
else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x01000000)
|
||||
{
|
||||
// Polymorph Sound - Sheep && Penguin
|
||||
@@ -1969,7 +1969,7 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI
|
||||
if (IsProcOnCooldown())
|
||||
return false;
|
||||
|
||||
// TODO:
|
||||
/// @todo
|
||||
// something about triggered spells triggering, and add extra attack effect
|
||||
|
||||
// do checks against db data
|
||||
@@ -1987,14 +1987,14 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI
|
||||
if (!check)
|
||||
return false;
|
||||
|
||||
// TODO:
|
||||
/// @todo
|
||||
// do allow additional requirements for procs
|
||||
// this is needed because this is the last moment in which you can prevent aura charge drop on proc
|
||||
// and possibly a way to prevent default checks (if there're going to be any)
|
||||
|
||||
// Check if current equipment meets aura requirements
|
||||
// do that only for passive spells
|
||||
// TODO: this needs to be unified for all kinds of auras
|
||||
/// @todo this needs to be unified for all kinds of auras
|
||||
Unit* target = aurApp->GetTarget();
|
||||
if (IsPassive() && target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
|
||||
@@ -1077,7 +1077,7 @@ void Spell::SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTarge
|
||||
}
|
||||
|
||||
// for compability with older code - add only unit and go targets
|
||||
// TODO: remove this
|
||||
/// @todo remove this
|
||||
std::list<Unit*> unitTargets;
|
||||
std::list<GameObject*> gObjTargets;
|
||||
|
||||
@@ -1154,7 +1154,7 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge
|
||||
SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), m_spellInfo->Effects[effIndex].ImplicitTargetConditions);
|
||||
|
||||
// Custom entries
|
||||
// TODO: remove those
|
||||
/// @todo remove those
|
||||
switch (m_spellInfo->Id)
|
||||
{
|
||||
case 46584: // Raise Dead
|
||||
@@ -1229,7 +1229,7 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge
|
||||
std::list<Unit*> unitTargets;
|
||||
std::list<GameObject*> gObjTargets;
|
||||
// for compability with older code - add only unit and go targets
|
||||
// TODO: remove this
|
||||
/// @todo remove this
|
||||
for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
|
||||
{
|
||||
if (Unit* unitTarget = (*itr)->ToUnit())
|
||||
@@ -1393,7 +1393,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
|
||||
case TARGET_DEST_DB:
|
||||
if (SpellTargetPosition const* st = sSpellMgr->GetSpellTargetPosition(m_spellInfo->Id))
|
||||
{
|
||||
// TODO: fix this check
|
||||
/// @todo fix this check
|
||||
if (m_spellInfo->HasEffect(SPELL_EFFECT_TELEPORT_UNITS) || m_spellInfo->HasEffect(SPELL_EFFECT_BIND))
|
||||
m_targets.SetDst(st->target_X, st->target_Y, st->target_Z, st->target_Orientation, (int32)st->target_mapId);
|
||||
else if (st->target_mapId == m_caster->GetMapId())
|
||||
@@ -1652,7 +1652,7 @@ void Spell::SelectImplicitTrajTargets()
|
||||
continue;
|
||||
|
||||
const float size = std::max((*itr)->GetObjectSize() * 0.7f, 1.0f); // 1/sqrt(3)
|
||||
// TODO: all calculation should be based on src instead of m_caster
|
||||
/// @todo all calculation should be based on src instead of m_caster
|
||||
const float objDist2d = m_targets.GetSrcPos()->GetExactDist2d(*itr) * std::cos(m_targets.GetSrcPos()->GetRelativeAngle(*itr));
|
||||
const float dz = (*itr)->GetPositionZ() - m_targets.GetSrcPos()->m_positionZ;
|
||||
|
||||
@@ -1752,7 +1752,7 @@ void Spell::SelectImplicitTrajTargets()
|
||||
void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex)
|
||||
{
|
||||
// special case for SPELL_EFFECT_SUMMON_RAF_FRIEND and SPELL_EFFECT_SUMMON_PLAYER
|
||||
// TODO: this is a workaround - target shouldn't be stored in target map for those spells
|
||||
/// @todo this is a workaround - target shouldn't be stored in target map for those spells
|
||||
switch (m_spellInfo->Effects[effIndex].Effect)
|
||||
{
|
||||
case SPELL_EFFECT_SUMMON_RAF_FRIEND:
|
||||
@@ -1795,7 +1795,7 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex)
|
||||
{
|
||||
if (Corpse* corpseTarget = m_targets.GetCorpseTarget())
|
||||
{
|
||||
// TODO: this is a workaround - corpses should be added to spell target map too, but we can't do that so we add owner instead
|
||||
/// @todo this is a workaround - corpses should be added to spell target map too, but we can't do that so we add owner instead
|
||||
if (Player* owner = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()))
|
||||
target = owner;
|
||||
}
|
||||
@@ -2176,7 +2176,7 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*=
|
||||
if (m_spellInfo->Speed > 0.0f && m_caster != target)
|
||||
{
|
||||
// calculate spell incoming interval
|
||||
// TODO: this is a hack
|
||||
/// @todo this is a hack
|
||||
float dist = m_caster->GetDistance(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
|
||||
|
||||
if (dist < 5.0f)
|
||||
@@ -2404,7 +2404,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
|
||||
{
|
||||
m_needComboPoints = false;
|
||||
// Restore spell mods for a miss/dodge/parry Cold Blood
|
||||
// TODO: check how broad this rule should be
|
||||
/// @todo check how broad this rule should be
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER && (missInfo == SPELL_MISS_MISS ||
|
||||
missInfo == SPELL_MISS_DODGE || missInfo == SPELL_MISS_PARRY))
|
||||
m_caster->ToPlayer()->RestoreSpellMods(this, 14177);
|
||||
@@ -2625,14 +2625,14 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
||||
if (m_caster->_IsValidAttackTarget(unit, m_spellInfo))
|
||||
{
|
||||
unit->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_HITBYSPELL);
|
||||
//TODO: This is a hack. But we do not know what types of stealth should be interrupted by CC
|
||||
/// @todo This is a hack. But we do not know what types of stealth should be interrupted by CC
|
||||
if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer())
|
||||
unit->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
|
||||
}
|
||||
else if (m_caster->IsFriendlyTo(unit))
|
||||
{
|
||||
// for delayed spells ignore negative spells (after duel end) for friendly targets
|
||||
// TODO: this cause soul transfer bugged
|
||||
/// @todo this cause soul transfer bugged
|
||||
if (m_spellInfo->Speed > 0.0f && unit->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->IsPositive())
|
||||
return SPELL_MISS_EVADE;
|
||||
|
||||
@@ -2761,7 +2761,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
||||
void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
|
||||
{
|
||||
// Apply additional spell effects to target
|
||||
// TODO: move this code to scripts
|
||||
/// @todo move this code to scripts
|
||||
if (m_preCastSpell)
|
||||
{
|
||||
// Paladin immunity shields
|
||||
@@ -2817,7 +2817,7 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask)
|
||||
}
|
||||
|
||||
// trigger linked auras remove/apply
|
||||
// TODO: remove/cleanup this, as this table is not documented and people are doing stupid things with it
|
||||
/// @todo remove/cleanup this, as this table is not documented and people are doing stupid things with it
|
||||
if (std::vector<int32> const* spellTriggered = sSpellMgr->GetSpellLinked(m_spellInfo->Id + SPELL_LINK_HIT))
|
||||
for (std::vector<int32>::const_iterator i = spellTriggered->begin(); i != spellTriggered->end(); ++i)
|
||||
if (*i < 0)
|
||||
@@ -3048,7 +3048,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell::prepare: spell id %u source %u caster %d customCastFlags %u mask %u", m_spellInfo->Id, m_caster->GetEntry(), m_originalCaster ? m_originalCaster->GetEntry() : -1, _triggeredCastFlags, m_targets.GetTargetMask());
|
||||
|
||||
//Containers for channeled spells have to be set
|
||||
//TODO:Apply this to all casted spells if needed
|
||||
/// @todoApply this to all casted spells if needed
|
||||
// Why check duration? 29350: channelled triggers channelled
|
||||
if ((_triggeredCastFlags & TRIGGERED_CAST_DIRECTLY) && (!m_spellInfo->IsChanneled() || !m_spellInfo->GetMaxDuration()))
|
||||
cast(true);
|
||||
@@ -3489,7 +3489,7 @@ void Spell::_handle_immediate_phase()
|
||||
if (!m_originalCaster)
|
||||
return;
|
||||
// Handle procs on cast
|
||||
// TODO: finish new proc system:P
|
||||
/// @todo finish new proc system:P
|
||||
if (m_UniqueTargetInfo.empty() && m_targets.HasDst())
|
||||
{
|
||||
uint32 procAttacker = m_procAttacker;
|
||||
@@ -3517,7 +3517,7 @@ void Spell::_handle_finish_phase()
|
||||
if (m_caster->m_extraAttacks && GetSpellInfo()->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS))
|
||||
m_caster->HandleProcExtraAttackFor(m_caster->getVictim());
|
||||
|
||||
// TODO: trigger proc phase finish here
|
||||
/// @todo trigger proc phase finish here
|
||||
}
|
||||
|
||||
void Spell::SendSpellCooldown()
|
||||
@@ -3971,7 +3971,7 @@ void Spell::SendSpellGo()
|
||||
|
||||
if (castFlags & CAST_FLAG_RUNE_LIST) // rune cooldowns list
|
||||
{
|
||||
//TODO: There is a crash caused by a spell with CAST_FLAG_RUNE_LIST casted by a creature
|
||||
/// @todo There is a crash caused by a spell with CAST_FLAG_RUNE_LIST casted by a creature
|
||||
//The creature is the mover of a player, so HandleCastSpellOpcode uses it as the caster
|
||||
if (Player* player = m_caster->ToPlayer())
|
||||
{
|
||||
@@ -4969,7 +4969,7 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
}
|
||||
|
||||
// Triggered spells also have range check
|
||||
// TODO: determine if there is some flag to enable/disable the check
|
||||
/// @todo determine if there is some flag to enable/disable the check
|
||||
castResult = CheckRange(strict);
|
||||
if (castResult != SPELL_CAST_OK)
|
||||
return castResult;
|
||||
@@ -6042,7 +6042,7 @@ SpellCastResult Spell::CheckItems()
|
||||
if (msg != EQUIP_ERR_OK)
|
||||
{
|
||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(m_spellInfo->Effects[i].ItemType);
|
||||
// TODO: Needs review
|
||||
/// @todo Needs review
|
||||
if (pProto && !(pProto->ItemLimitCategory))
|
||||
{
|
||||
p_caster->SendEquipError(msg, NULL, NULL, m_spellInfo->Effects[i].ItemType);
|
||||
@@ -6501,7 +6501,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
|
||||
if (IsTriggered() || m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS))
|
||||
return true;
|
||||
|
||||
// todo: shit below shouldn't be here, but it's temporary
|
||||
/// @todo shit below shouldn't be here, but it's temporary
|
||||
//Check targets for LOS visibility (except spells without range limitations)
|
||||
switch (m_spellInfo->Effects[eff].Effect)
|
||||
{
|
||||
@@ -6547,7 +6547,7 @@ bool Spell::IsNextMeleeSwingSpell() const
|
||||
|
||||
bool Spell::IsAutoActionResetSpell() const
|
||||
{
|
||||
// TODO: changed SPELL_INTERRUPT_FLAG_AUTOATTACK -> SPELL_INTERRUPT_FLAG_INTERRUPT to fix compile - is this check correct at all?
|
||||
/// @todo changed SPELL_INTERRUPT_FLAG_AUTOATTACK -> SPELL_INTERRUPT_FLAG_INTERRUPT to fix compile - is this check correct at all?
|
||||
return !IsTriggered() && (m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_INTERRUPT);
|
||||
}
|
||||
|
||||
@@ -7171,7 +7171,7 @@ bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* triggeredByA
|
||||
|
||||
void Spell::PrepareTriggersExecutedOnHit()
|
||||
{
|
||||
// todo: move this to scripts
|
||||
/// @todo move this to scripts
|
||||
if (m_spellInfo->SpellFamilyName)
|
||||
{
|
||||
SpellInfo const* excludeCasterSpellInfo = sSpellMgr->GetSpellInfo(m_spellInfo->ExcludeCasterAuraSpell);
|
||||
@@ -7182,7 +7182,7 @@ void Spell::PrepareTriggersExecutedOnHit()
|
||||
m_preCastSpell = m_spellInfo->ExcludeTargetAuraSpell;
|
||||
}
|
||||
|
||||
// todo: move this to scripts
|
||||
/// @todo move this to scripts
|
||||
switch (m_spellInfo->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_MAGE:
|
||||
|
||||
@@ -600,7 +600,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: should this be put on taken but not done?
|
||||
/// @todo should this be put on taken but not done?
|
||||
if (found)
|
||||
damage += m_spellInfo->Effects[EFFECT_1].CalcValue();
|
||||
|
||||
@@ -808,7 +808,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
|
||||
|
||||
uint32 triggered_spell_id = m_spellInfo->Effects[effIndex].TriggerSpell;
|
||||
|
||||
// todo: move those to spell scripts
|
||||
/// @todo move those to spell scripts
|
||||
if (m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_TRIGGER_SPELL
|
||||
&& effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH_TARGET)
|
||||
{
|
||||
@@ -1379,7 +1379,7 @@ void Spell::EffectSendEvent(SpellEffIndex effIndex)
|
||||
// some spells have no target entries in dbc and they use focus target
|
||||
if (focusObject)
|
||||
target = focusObject;
|
||||
// TODO: there should be a possibility to pass dest target to event script
|
||||
/// @todo there should be a possibility to pass dest target to event script
|
||||
}
|
||||
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell ScriptStart %u for spellid %u in EffectSendEvent ", m_spellInfo->Effects[effIndex].MiscValue, m_spellInfo->Id);
|
||||
@@ -1759,7 +1759,7 @@ void Spell::EffectCreateItem2(SpellEffIndex effIndex)
|
||||
else
|
||||
player->AutoStoreLoot(m_spellInfo->Id, LootTemplates_Spell); // create some random items
|
||||
}
|
||||
// TODO: ExecuteLogEffectCreateItem(i, m_spellInfo->Effects[i].ItemType);
|
||||
/// @todo ExecuteLogEffectCreateItem(i, m_spellInfo->Effects[i].ItemType);
|
||||
}
|
||||
|
||||
void Spell::EffectCreateRandomItem(SpellEffIndex /*effIndex*/)
|
||||
@@ -1773,7 +1773,7 @@ void Spell::EffectCreateRandomItem(SpellEffIndex /*effIndex*/)
|
||||
|
||||
// create some random items
|
||||
player->AutoStoreLoot(m_spellInfo->Id, LootTemplates_Spell);
|
||||
// TODO: ExecuteLogEffectCreateItem(i, m_spellInfo->Effects[i].ItemType);
|
||||
/// @todo ExecuteLogEffectCreateItem(i, m_spellInfo->Effects[i].ItemType);
|
||||
}
|
||||
|
||||
void Spell::EffectPersistentAA(SpellEffIndex effIndex)
|
||||
@@ -1991,7 +1991,7 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
|
||||
return;
|
||||
|
||||
case GAMEOBJECT_TYPE_CHEST:
|
||||
// TODO: possible must be moved to loot release (in different from linked triggering)
|
||||
/// @todo possible must be moved to loot release (in different from linked triggering)
|
||||
if (gameObjTarget->GetGOInfo()->chest.eventId)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Chest ScriptStart id %u for GO %u", gameObjTarget->GetGOInfo()->chest.eventId, gameObjTarget->GetDBTableGUIDLow());
|
||||
@@ -2032,7 +2032,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
|
||||
if (gameObjTarget)
|
||||
{
|
||||
GameObjectTemplate const* goInfo = gameObjTarget->GetGOInfo();
|
||||
// Arathi Basin banner opening. // TODO: Verify correctness of this check
|
||||
// Arathi Basin banner opening. /// @todo Verify correctness of this check
|
||||
if ((goInfo->type == GAMEOBJECT_TYPE_BUTTON && goInfo->button.noDamageImmune) ||
|
||||
(goInfo->type == GAMEOBJECT_TYPE_GOOBER && goInfo->goober.losOK))
|
||||
{
|
||||
@@ -2060,7 +2060,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex)
|
||||
gameObjTarget->SetLootState(GO_JUST_DEACTIVATED);
|
||||
return;
|
||||
}
|
||||
// TODO: Add script for spell 41920 - Filling, becouse server it freze when use this spell
|
||||
/// @todo Add script for spell 41920 - Filling, becouse server it freze when use this spell
|
||||
// handle outdoor pvp object opening, return true if go was registered for handling
|
||||
// these objects must have been spawned by outdoorpvp!
|
||||
else if (gameObjTarget->GetGOInfo()->type == GAMEOBJECT_TYPE_GOOBER && sOutdoorPvPMgr->HandleOpenGo(player, gameObjTarget->GetGUID()))
|
||||
@@ -2564,7 +2564,7 @@ void Spell::EffectDualWield(SpellEffIndex /*effIndex*/)
|
||||
|
||||
void Spell::EffectPull(SpellEffIndex effIndex)
|
||||
{
|
||||
// TODO: create a proper pull towards distract spell center for distract
|
||||
/// @todo create a proper pull towards distract spell center for distract
|
||||
EffectNULL(effIndex);
|
||||
}
|
||||
|
||||
@@ -3518,7 +3518,7 @@ void Spell::EffectInterruptCast(SpellEffIndex effIndex)
|
||||
if (!unitTarget || !unitTarget->isAlive())
|
||||
return;
|
||||
|
||||
// TODO: not all spells that used this effect apply cooldown at school spells
|
||||
/// @todo not all spells that used this effect apply cooldown at school spells
|
||||
// also exist case: apply cooldown to interrupted cast only and to all spells
|
||||
// there is no CURRENT_AUTOREPEAT_SPELL spells that can be interrupted
|
||||
for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_AUTOREPEAT_SPELL; ++i)
|
||||
@@ -3616,7 +3616,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
// TODO: we must implement hunter pet summon at login there (spell 6962)
|
||||
/// @todo we must implement hunter pet summon at login there (spell 6962)
|
||||
|
||||
switch (m_spellInfo->SpellFamilyName)
|
||||
{
|
||||
@@ -4049,7 +4049,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* parent = seat->GetVehicleBase())
|
||||
{
|
||||
// TODO: a hack, range = 11, should after some time cast, otherwise too far
|
||||
/// @todo a hack, range = 11, should after some time cast, otherwise too far
|
||||
m_caster->CastSpell(parent, 62496, true);
|
||||
unitTarget->CastSpell(parent, m_spellInfo->Effects[EFFECT_0].CalcValue());
|
||||
}
|
||||
@@ -4628,7 +4628,7 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex)
|
||||
|
||||
uint32 count = 1;
|
||||
player->DestroyItemCount(foodItem, count, true);
|
||||
// TODO: fix crash when a spell has two effects, both pointed at the same item target
|
||||
/// @todo fix crash when a spell has two effects, both pointed at the same item target
|
||||
|
||||
m_caster->CastCustomSpell(pet, m_spellInfo->Effects[effIndex].TriggerSpell, &benefit, NULL, NULL, true);
|
||||
}
|
||||
|
||||
@@ -1292,7 +1292,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
|
||||
|
||||
// Check if stance disables cast of not-stance spells
|
||||
// Example: cannot cast any other spells in zombie or ghoul form
|
||||
// TODO: Find a way to disable use of these spells clientside
|
||||
/// @todo Find a way to disable use of these spells clientside
|
||||
if (shapeInfo && shapeInfo->flags1 & 0x400)
|
||||
{
|
||||
if (!(stanceMask & Stances))
|
||||
|
||||
@@ -2113,7 +2113,7 @@ void SpellMgr::LoadEnchantCustomAttr()
|
||||
if (!spellInfo)
|
||||
continue;
|
||||
|
||||
// TODO: find a better check
|
||||
/// @todo find a better check
|
||||
if (!(spellInfo->AttributesEx2 & SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !(spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ enum SpellFamilyFlag
|
||||
SPELLFAMILYFLAG_DK_DEATH_STRIKE = 0x00000010,
|
||||
SPELLFAMILYFLAG_DK_DEATH_COIL = 0x00002000,
|
||||
|
||||
// TODO: Figure out a more accurate name for the following familyflag(s)
|
||||
/// @todo Figure out a more accurate name for the following familyflag(s)
|
||||
SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000 // Seems to be linked to most totems and some totem effects
|
||||
};
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ private:
|
||||
bool _completed;
|
||||
GMTicketEscalationStatus _escalatedStatus;
|
||||
bool _viewed;
|
||||
bool _needResponse; // TODO: find out the use of this, and then store it in DB
|
||||
bool _needResponse; /// @todo find out the use of this, and then store it in DB
|
||||
bool _haveTicket;
|
||||
std::string _response;
|
||||
std::string _chatLog; // No need to store in db, will be refreshed every session client side
|
||||
|
||||
@@ -351,8 +351,8 @@ bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump)
|
||||
if (!DumpTable(dump, guid, dumpTables[i].name, dumpTables[i].name, dumpTables[i].type))
|
||||
return false;
|
||||
|
||||
// TODO: Add instance/group..
|
||||
// TODO: Add a dump level option to skip some non-important tables
|
||||
/// @todo Add instance/group..
|
||||
/// @todo Add a dump level option to skip some non-important tables
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ void WardenWin::HandleData(ByteBuffer &buff)
|
||||
{
|
||||
uint8 result;
|
||||
buff >> result;
|
||||
// TODO: test it.
|
||||
/// @todo test it.
|
||||
if (result == 0x00)
|
||||
{
|
||||
sLog->outWarn(LOG_FILTER_WARDEN, "%s failed timing check. Action: %s", _session->GetPlayerInfo().c_str(), Penalty().c_str());
|
||||
|
||||
@@ -139,7 +139,7 @@ World::~World()
|
||||
VMAP::VMapFactory::clear();
|
||||
MMAP::MMapFactory::clear();
|
||||
|
||||
//TODO free addSessQueue
|
||||
/// @todo free addSessQueue
|
||||
}
|
||||
|
||||
/// Find a player in a specified zone
|
||||
@@ -632,7 +632,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
m_float_configs[CONFIG_GROUP_XP_DISTANCE] = ConfigMgr::GetFloatDefault("MaxGroupXPDistance", 74.0f);
|
||||
m_float_configs[CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE] = ConfigMgr::GetFloatDefault("MaxRecruitAFriendBonusDistance", 100.0f);
|
||||
|
||||
/// \todo Add MonsterSight and GuarderSight (with meaning) in worldserver.conf or put them as define
|
||||
/// @todo Add MonsterSight and GuarderSight (with meaning) in worldserver.conf or put them as define
|
||||
m_float_configs[CONFIG_SIGHT_MONSTER] = ConfigMgr::GetFloatDefault("MonsterSight", 50);
|
||||
m_float_configs[CONFIG_SIGHT_GUARDER] = ConfigMgr::GetFloatDefault("GuarderSight", 50);
|
||||
|
||||
@@ -1710,7 +1710,7 @@ void World::SetInitialWorldSettings()
|
||||
//to set mailtimer to return mails every day between 4 and 5 am
|
||||
//mailtimer is increased when updating auctions
|
||||
//one second is 1000 -(tested on win system)
|
||||
//TODO: Get rid of magic numbers
|
||||
/// @todo Get rid of magic numbers
|
||||
mail_timer = ((((localtime(&m_gameTime)->tm_hour + 20) % 24)* HOUR * IN_MILLISECONDS) / m_timers[WUPDATE_AUCTIONS].GetInterval());
|
||||
//1440
|
||||
mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval()));
|
||||
|
||||
@@ -558,7 +558,7 @@ class World
|
||||
int32 GetQueuePos(WorldSession*);
|
||||
bool HasRecentlyDisconnected(WorldSession*);
|
||||
|
||||
/// \todo Actions on m_allowMovement still to be implemented
|
||||
/// @todo Actions on m_allowMovement still to be implemented
|
||||
/// Is movement allowed?
|
||||
bool getAllowMovement() const { return m_allowMovement; }
|
||||
/// Allow/Disallow object movements
|
||||
|
||||
@@ -140,7 +140,7 @@ public:
|
||||
}
|
||||
|
||||
/// Delete a user account and all associated characters in this realm
|
||||
/// \todo This function has to be enhanced to respect the login/realm split (delete char, delete account chars in realm then delete account)
|
||||
/// @todo This function has to be enhanced to respect the login/realm split (delete char, delete account chars in realm then delete account)
|
||||
static bool HandleAccountDeleteCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
if (!*args)
|
||||
|
||||
@@ -443,7 +443,7 @@ public:
|
||||
stmt->setUInt16(0, uint16(AT_LOGIN_CHANGE_RACE));
|
||||
if (target)
|
||||
{
|
||||
// TODO : add text into database
|
||||
/// @todo add text into database
|
||||
handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str());
|
||||
target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
|
||||
stmt->setUInt32(1, target->GetGUIDLow());
|
||||
@@ -451,7 +451,7 @@ public:
|
||||
else
|
||||
{
|
||||
std::string oldNameLink = handler->playerLink(targetName);
|
||||
// TODO : add text into database
|
||||
/// @todo add text into database
|
||||
handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER_GUID, oldNameLink.c_str(), GUID_LOPART(targetGuid));
|
||||
stmt->setUInt32(1, GUID_LOPART(targetGuid));
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: is it really necessary to add both the real and DB table guid here ?
|
||||
/// @todo is it really necessary to add both the real and DB table guid here ?
|
||||
sObjectMgr->AddGameobjectToGrid(guidLow, sObjectMgr->GetGOData(guidLow));
|
||||
|
||||
handler->PSendSysMessage(LANG_GAMEOBJECT_ADD, objectId, objectInfo->name.c_str(), guidLow, x, y, z);
|
||||
|
||||
@@ -2211,7 +2211,7 @@ public:
|
||||
// from console show not existed sender
|
||||
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
|
||||
|
||||
//- TODO: Fix poor design
|
||||
/// @todo Fix poor design
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
MailDraft(subject, text)
|
||||
.SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender);
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
{ "item", SEC_GAMEMASTER, false, &HandleNpcAddVendorItemCommand, "", NULL },
|
||||
{ "move", SEC_GAMEMASTER, false, &HandleNpcAddMoveCommand, "", NULL },
|
||||
{ "temp", SEC_GAMEMASTER, false, &HandleNpcAddTempSpawnCommand, "", NULL },
|
||||
//{ TODO: fix or remove this command
|
||||
//{@todo fix or remove this command
|
||||
{ "weapon", SEC_ADMINISTRATOR, false, &HandleNpcAddWeaponCommand, "", NULL },
|
||||
//}
|
||||
{ "", SEC_GAMEMASTER, false, &HandleNpcAddCommand, "", NULL },
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
{ "spawndist", SEC_GAMEMASTER, false, &HandleNpcSetSpawnDistCommand, "", NULL },
|
||||
{ "spawntime", SEC_GAMEMASTER, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
|
||||
{ "data", SEC_ADMINISTRATOR, false, &HandleNpcSetDataCommand, "", NULL },
|
||||
//{ TODO: fix or remove these commands
|
||||
//{ @todo fix or remove these commands
|
||||
{ "name", SEC_GAMEMASTER, false, &HandleNpcSetNameCommand, "", NULL },
|
||||
{ "subname", SEC_GAMEMASTER, false, &HandleNpcSetSubNameCommand, "", NULL },
|
||||
//}
|
||||
@@ -1421,7 +1421,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: NpcCommands that need to be fixed :
|
||||
/// @todo NpcCommands that need to be fixed :
|
||||
static bool HandleNpcAddWeaponCommand(ChatHandler* /*handler*/, char const* /*args*/)
|
||||
{
|
||||
/*if (!*args)
|
||||
|
||||
@@ -700,7 +700,7 @@ public:
|
||||
|
||||
wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
|
||||
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
|
||||
//TODO: Should we first use "Create" then use "LoadFromDB"?
|
||||
/// @todo Should we first use "Create" then use "LoadFromDB"?
|
||||
if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetDBTableGUIDLow(), map))
|
||||
{
|
||||
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT);
|
||||
|
||||
@@ -109,7 +109,7 @@ enum GrimstoneTexts
|
||||
SAY_TEXT6 = 5
|
||||
};
|
||||
|
||||
//TODO: implement quest part of event (different end boss)
|
||||
/// @todo implement quest part of event (different end boss)
|
||||
class npc_grimstone : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -160,7 +160,7 @@ public:
|
||||
CanWalk = false;
|
||||
}
|
||||
|
||||
//TODO: move them to center
|
||||
/// @todo move them to center
|
||||
void SummonRingMob()
|
||||
{
|
||||
if (Creature* tmp = me->SummonCreature(RingMob[MobSpawnId], 608.960f, -235.322f, -53.907f, 1.857f, TEMPSUMMON_DEAD_DESPAWN, 0))
|
||||
@@ -172,7 +172,7 @@ public:
|
||||
MobDeath_Timer = 2500;
|
||||
}
|
||||
|
||||
//TODO: move them to center
|
||||
/// @todo move them to center
|
||||
void SummonRingBoss()
|
||||
{
|
||||
if (Creature* tmp = me->SummonCreature(RingBoss[rand()%6], 644.300f, -175.989f, -53.739f, 3.418f, TEMPSUMMON_DEAD_DESPAWN, 0))
|
||||
|
||||
@@ -30,7 +30,7 @@ enum Spells
|
||||
|
||||
enum Adds
|
||||
{
|
||||
MODEL_REND_ON_DRAKE = 9723, // TODO: use creature_template 10459 instead of its modelid
|
||||
MODEL_REND_ON_DRAKE = 9723, /// @todo use creature_template 10459 instead of its modelid
|
||||
NPC_RAGE_TALON_FIRE_TONG = 10372,
|
||||
NPC_CHROMATIC_WHELP = 10442,
|
||||
NPC_CHROMATIC_DRAGONSPAWN = 10447,
|
||||
|
||||
@@ -44,7 +44,7 @@ enum Midnight
|
||||
|
||||
MOUNTED_DISPLAYID = 16040,
|
||||
|
||||
//Attumen (TODO: Use the summoning spell instead of Creature id. It works, but is not convenient for us)
|
||||
//Attumen (@todo Use the summoning spell instead of Creature id. It works, but is not convenient for us)
|
||||
SUMMON_ATTUMEN = 15550,
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/* ScriptData
|
||||
SDName: Instance_Karazhan
|
||||
SD%Complete: 70
|
||||
SDComment: Instance Script for Karazhan to help in various encounters. TODO: GameObject visibility for Opera event.
|
||||
SDComment: Instance Script for Karazhan to help in various encounters. @todo GameObject visibility for Opera event.
|
||||
SDCategory: Karazhan
|
||||
EndScriptData */
|
||||
|
||||
@@ -224,7 +224,7 @@ public:
|
||||
|
||||
switch (m_uiOperaEvent)
|
||||
{
|
||||
//TODO: Set Object visibilities for Opera based on performance
|
||||
/// @todo Set Object visibilities for Opera based on performance
|
||||
case EVENT_OZ:
|
||||
break;
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ public:
|
||||
|
||||
void Reset()
|
||||
{
|
||||
// TODO: Timers
|
||||
/// @todo Timers
|
||||
FireballTimer = 0;
|
||||
PhoenixTimer = 10000;
|
||||
FlameStrikeTimer = 25000;
|
||||
|
||||
@@ -493,7 +493,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: spells
|
||||
/// @todo spells
|
||||
|
||||
CombatAI::UpdateAI(uiDiff);
|
||||
}
|
||||
@@ -758,7 +758,7 @@ public:
|
||||
if (CAST_PLR(owner)->GetQuestStatus(12698) == QUEST_STATUS_INCOMPLETE)
|
||||
CAST_CRE(who)->CastSpell(owner, 52517, true);
|
||||
|
||||
//Todo: Creatures must not be removed, but, must instead
|
||||
/// @todo Creatures must not be removed, but, must instead
|
||||
// stand next to Gothik and be commanded into the pit
|
||||
// and dig into the ground.
|
||||
CAST_CRE(who)->DespawnOrUnsummon();
|
||||
|
||||
@@ -690,7 +690,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO: simplify text's selection
|
||||
/// @todo simplify text's selection
|
||||
|
||||
switch (player->getRace())
|
||||
{
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_High_Inquisitor_Fairbanks
|
||||
SD%Complete: 100
|
||||
SDComment: TODO: if this guy not involved in some special event, remove (and let ACID script)
|
||||
SDComment: @todo if this guy not involved in some special event, remove (and let ACID script)
|
||||
SDCategory: Scarlet Monastery
|
||||
EndScriptData */
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ SDComment: Sinister Reflection Model, Armageddon Visual, SAY_KJ_SHADOWSPIKE3, Em
|
||||
SDCategory: Sunwell_Plateau
|
||||
EndScriptData */
|
||||
|
||||
//TODO rewrite Armageddon
|
||||
/// @todo rewrite Armageddon
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
@@ -105,7 +105,7 @@ enum Spells
|
||||
SPELL_ARMAGEDDON_DAMAGE = 45915, // This does the area damage
|
||||
|
||||
/* Shield Orb Spells*/
|
||||
SPELL_SHADOW_BOLT = 45680, //45679 would be correct but triggers to often //TODO fix console error
|
||||
SPELL_SHADOW_BOLT = 45680, //45679 would be correct but triggers to often /// @todo fix console error
|
||||
|
||||
/* Anveena's spells and cosmetics (Or, generally, everything that has "Anveena" in name) */
|
||||
SPELL_ANVEENA_PRISON = 46367, // She hovers locked within a bubble
|
||||
@@ -784,7 +784,7 @@ public:
|
||||
break;
|
||||
case TIMER_FLAME_DART: //Phase 3
|
||||
DoCastAOE(SPELL_FLAME_DART, false);
|
||||
Timer[TIMER_FLAME_DART] = 3000; //TODO Timer
|
||||
Timer[TIMER_FLAME_DART] = 3000; /// @todo Timer
|
||||
break;
|
||||
case TIMER_DARKNESS: //Phase 3
|
||||
if (!me->IsNonMeleeSpellCasted(false))
|
||||
@@ -918,7 +918,7 @@ public:
|
||||
|
||||
void Reset()
|
||||
{
|
||||
// TODO: Timers!
|
||||
/// @todo Timers!
|
||||
ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment.
|
||||
FelfirePortalTimer = 20000;
|
||||
if (instance)
|
||||
|
||||
@@ -155,7 +155,7 @@ class boss_nalorakk : public CreatureScript
|
||||
Berserk_Timer = 600000;
|
||||
|
||||
inBearForm = false;
|
||||
// me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 5122); // TODO: find the correct equipment id
|
||||
// me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 5122); /// @todo find the correct equipment id
|
||||
}
|
||||
|
||||
void SendAttacker(Unit* target)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "zulgurub.h"
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* @todo
|
||||
* - Fix timers (research some more)
|
||||
*/
|
||||
|
||||
|
||||
@@ -601,7 +601,7 @@ class npc_elder_kekek : public CreatureScript
|
||||
|
||||
/*######
|
||||
## npc_the_etymidian
|
||||
## TODO: A red crystal as a gift for the great one should be spawned during the event.
|
||||
## @todo A red crystal as a gift for the great one should be spawned during the event.
|
||||
######*/
|
||||
class npc_the_etymidian : public CreatureScript
|
||||
{
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
SDName: Boss epoch
|
||||
SDAuthor: Tartalo
|
||||
SD%Complete: 80
|
||||
SDComment: TODO: Intro, consecutive attacks to a random target durin time wrap, adjust timers
|
||||
SDComment: @todo Intro, consecutive attacks to a random target durin time wrap, adjust timers
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
SDName: Boss mal_ganis
|
||||
SDAuthor: Tartalo
|
||||
SD%Complete: 80
|
||||
SDComment: TODO: Intro & outro
|
||||
SDComment: @todo Intro & outro
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
SDName: Boss salramm
|
||||
SDAuthor: Tartalo
|
||||
SD%Complete: 80
|
||||
SDComment: TODO: Intro
|
||||
SDComment: @todo Intro
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ public:
|
||||
if (me->HasAura(SPELL_CHANNEL))
|
||||
me->RemoveAura(SPELL_CHANNEL);
|
||||
|
||||
//TODO: start the post-event here
|
||||
/// @todo start the post-event here
|
||||
instance->SetData(TYPE_MEDIVH, DONE);
|
||||
}
|
||||
} else Check_Timer -= diff;
|
||||
|
||||
+1
-1
@@ -152,7 +152,7 @@ public:
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
//TODO: make this work
|
||||
/// @todo make this work
|
||||
if (CanPatrol && wpId == 0)
|
||||
{
|
||||
me->GetMotionMaster()->MovePoint(DrakeWP[0].wpId, DrakeWP[0].x, DrakeWP[0].y, DrakeWP[0].z);
|
||||
|
||||
@@ -507,7 +507,7 @@ public:
|
||||
{
|
||||
switch (summoned->GetEntry())
|
||||
{
|
||||
//TODO: make Scarloc start into event instead, and not start attack directly
|
||||
/// @todo make Scarloc start into event instead, and not start attack directly
|
||||
case MOB_ENTRY_BARN_GUARDSMAN:
|
||||
case MOB_ENTRY_BARN_PROTECTOR:
|
||||
case MOB_ENTRY_BARN_LOOKOUT:
|
||||
@@ -543,7 +543,7 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//TODO: add his abilities'n-crap here
|
||||
/// @todo add his abilities'n-crap here
|
||||
if (!LowHp && HealthBelowPct(20))
|
||||
{
|
||||
Talk(SAY_TH_RANDOM_LOW_HP);
|
||||
|
||||
@@ -63,7 +63,7 @@ enum Points
|
||||
|
||||
const Position AyamissAirPos = { -9689.292f, 1547.912f, 48.02729f, 0.0f };
|
||||
const Position AltarPos = { -9717.18f, 1517.72f, 27.4677f, 0.0f };
|
||||
// TODO: These below are probably incorrect, taken from SD2
|
||||
/// @todo These below are probably incorrect, taken from SD2
|
||||
const Position SwarmerPos = { -9647.352f, 1578.062f, 55.32f, 0.0f };
|
||||
const Position LarvaPos[2] =
|
||||
{
|
||||
|
||||
@@ -74,7 +74,7 @@ Position CrystalCoordinates[NUM_CRYSTALS] =
|
||||
};
|
||||
|
||||
float RoomRadius = 165.0f;
|
||||
uint8 const NUM_TORNADOS = 5; // TODO: This number is completly random!
|
||||
uint8 const NUM_TORNADOS = 5; /// @todo This number is completly random!
|
||||
uint8 const NUM_WEAKNESS = 5;
|
||||
uint32 const SpellWeakness[NUM_WEAKNESS] = { 25177, 25178, 25180, 25181, 25183 };
|
||||
Position const RoomCenter = { -9343.041992f, 1923.278198f, 85.555984f, 0.0 };
|
||||
|
||||
@@ -150,7 +150,7 @@ class boss_skeram : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(8000, 18000));
|
||||
break;
|
||||
case EVENT_FULLFILMENT:
|
||||
// TODO: For some weird reason boss does not cast this
|
||||
/// @todo For some weird reason boss does not cast this
|
||||
// Spell actually works, tested in duel
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true), SPELL_TRUE_FULFILLMENT, true);
|
||||
events.ScheduleEvent(EVENT_FULLFILMENT, urand(20000, 30000));
|
||||
|
||||
@@ -151,7 +151,7 @@ struct boss_twinemperorsAI : public ScriptedAI
|
||||
Creature* pOtherBoss = GetOtherBoss();
|
||||
if (pOtherBoss)
|
||||
{
|
||||
// TODO: we should activate the other boss location so he can start attackning even if nobody
|
||||
/// @todo we should activate the other boss location so he can start attackning even if nobody
|
||||
// is near I dont know how to do that
|
||||
ScriptedAI* otherAI = CAST_AI(ScriptedAI, pOtherBoss->AI());
|
||||
if (!pOtherBoss->isInCombat())
|
||||
|
||||
@@ -81,8 +81,8 @@ enum MovePoints
|
||||
ROOM_CENTER = 1
|
||||
};
|
||||
|
||||
Position const ViscidusCoord = { -7992.36f, 908.19f, -52.62f, 1.68f }; // TODO: Visci isn't in room middle
|
||||
float const RoomRadius = 40.0f; // TODO: Not sure if its correct
|
||||
Position const ViscidusCoord = { -7992.36f, 908.19f, -52.62f, 1.68f }; /// @todo Visci isn't in room middle
|
||||
float const RoomRadius = 40.0f; /// @todo Not sure if its correct
|
||||
|
||||
class boss_viscidus : public CreatureScript
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user