*Fix a crash and merge.
--HG-- branch : trunk
This commit is contained in:
+3
-32
@@ -22,7 +22,7 @@
|
|||||||
DROP TABLE IF EXISTS `db_version`;
|
DROP TABLE IF EXISTS `db_version`;
|
||||||
CREATE TABLE `db_version` (
|
CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`required_7382_01_mangos_creature_template` bit(1) default NULL
|
`required_7388_01_mangos_mangos_string` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
@@ -1472,36 +1472,6 @@ CREATE TABLE `instance_template` (
|
|||||||
|
|
||||||
LOCK TABLES `instance_template` WRITE;
|
LOCK TABLES `instance_template` WRITE;
|
||||||
/*!40000 ALTER TABLE `instance_template` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `instance_template` DISABLE KEYS */;
|
||||||
INSERT INTO `instance_template` VALUES
|
|
||||||
(33,0,22,30,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(34,0,24,32,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(36,0,15,20,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(43,0,15,21,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(47,0,29,38,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(48,0,24,32,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(70,0,35,47,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(90,0,29,38,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(109,0,45,55,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(129,0,37,46,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(189,0,34,45,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(209,0,44,54,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(229,0,58,0,10,10,120000,78.5083,-225.044,49.839,5.1,''),
|
|
||||||
(230,0,52,0,5,5,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(249,0,60,0,40,40,432000,NULL,NULL,NULL,NULL,''),
|
|
||||||
(289,0,57,0,5,5,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(309,0,60,0,20,20,259200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(329,0,58,60,5,5,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(349,0,46,55,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(389,0,13,18,10,10,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(409,0,60,0,40,40,604800,NULL,NULL,NULL,NULL,''),
|
|
||||||
(429,0,55,60,5,5,7200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(469,0,60,0,40,40,604800,NULL,NULL,NULL,NULL,''),
|
|
||||||
(509,0,60,0,20,20,259200,NULL,NULL,NULL,NULL,''),
|
|
||||||
(531,0,60,0,40,40,604800,NULL,NULL,NULL,NULL,''),
|
|
||||||
(533,0,80,0,10,25,0,NULL,NULL,NULL,NULL,''),
|
|
||||||
(615,0,80,0,10,25,0,NULL,NULL,NULL,NULL,''),
|
|
||||||
(616,0,80,0,10,25,0,NULL,NULL,NULL,NULL,''),
|
|
||||||
(624,0,80,0,10,25,0,NULL,NULL,NULL,NULL,'');
|
|
||||||
/*!40000 ALTER TABLE `instance_template` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `instance_template` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
@@ -2842,7 +2812,6 @@ INSERT INTO `mangos_string` VALUES
|
|||||||
(723,'Your group does not have enough players to join this match.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(723,'Your group does not have enough players to join this match.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(724,'The Gold Team wins!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(724,'The Gold Team wins!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(725,'The Green Team wins!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(725,'The Green Team wins!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(726,'There aren\'t enough players in this battleground. It will end soon unless some more players join to balance the fight.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
|
||||||
(727,'Your group has an offline member. Please remove him before joining.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(727,'Your group has an offline member. Please remove him before joining.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(728,'Your group has players from the opposing faction. You can\'t join the battleground as a group.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(728,'Your group has players from the opposing faction. You can\'t join the battleground as a group.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(729,'Your group has players from different battleground brakets. You can\'t join as group.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(729,'Your group has players from different battleground brakets. You can\'t join as group.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
@@ -2863,6 +2832,8 @@ INSERT INTO `mangos_string` VALUES
|
|||||||
(744,'Modifying played count, arena points etc. for loaded arena teams, sending updated stats to online players...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(744,'Modifying played count, arena points etc. for loaded arena teams, sending updated stats to online players...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(745,'Modification done.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(745,'Modification done.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(746,'Done flushing Arena points.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(746,'Done flushing Arena points.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
(750,'Not enough players. This game will close in %u mins.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
(751,'Not enough players. This game will close in %u seconds.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(801,'You do not have enough gold',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(801,'You do not have enough gold',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(802,'You do not have enough free slots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(802,'You do not have enough free slots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
(803,'Your partner does not have enough free bag slots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
(803,'Your partner does not have enough free bag slots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
DELETE FROM mangos_string WHERE entry = 726;
|
||||||
|
INSERT INTO mangos_string VALUES (750,'Not enough players. This game will close in %u mins.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||||
|
INSERT INTO mangos_string VALUES (751,'Not enough players. This game will close in %u seconds.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||||
+108
-4
@@ -27,6 +27,7 @@
|
|||||||
#include "GameEvent.h"
|
#include "GameEvent.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "SpellMgr.h"
|
#include "SpellMgr.h"
|
||||||
|
#include "ArenaTeam.h"
|
||||||
#include "ProgressBar.h"
|
#include "ProgressBar.h"
|
||||||
#include "GridNotifiersImpl.h"
|
#include "GridNotifiersImpl.h"
|
||||||
#include "CellImpl.h"
|
#include "CellImpl.h"
|
||||||
@@ -374,6 +375,18 @@ void AchievementMgr::CheckAllAchievementCriteria()
|
|||||||
UpdateAchievementCriteria(AchievementCriteriaTypes(i));
|
UpdateAchievementCriteria(AchievementCriteriaTypes(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const uint32 achievIdByArenaSlot[MAX_ARENA_SLOT] = { 1057, 1107, 1108 };
|
||||||
|
static const uint32 achievIdForDangeon[][4] =
|
||||||
|
{
|
||||||
|
// ach_cr_id,is_dungeon,is_raid,is_heroic_dungeon
|
||||||
|
{ 321, true, true, true },
|
||||||
|
{ 916, false, true, false },
|
||||||
|
{ 917, false, true, false },
|
||||||
|
{ 918, true, false, false },
|
||||||
|
{ 2219, false, false, true },
|
||||||
|
{ 0, false, false, false }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function will be called whenever the user might have done a criteria relevant action
|
* this function will be called whenever the user might have done a criteria relevant action
|
||||||
*/
|
*/
|
||||||
@@ -408,7 +421,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
{
|
{
|
||||||
// std. case: increment at 1
|
// std. case: increment at 1
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
|
|
||||||
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
if(!miscvalue1)
|
if(!miscvalue1)
|
||||||
continue;
|
continue;
|
||||||
@@ -493,6 +505,79 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
continue;
|
continue;
|
||||||
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
break;
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
|
||||||
|
{
|
||||||
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
// skip wrong arena achievements, if not achievIdByArenaSlot then normal totla death counter
|
||||||
|
bool notfit = false;
|
||||||
|
for(int i = 0; i < MAX_ARENA_SLOT; ++i)
|
||||||
|
{
|
||||||
|
if(achievIdByArenaSlot[i] == achievement->ID)
|
||||||
|
{
|
||||||
|
BattleGround* bg = GetPlayer()->GetBattleGround();
|
||||||
|
if(!bg || ArenaTeam::GetSlotByType(bg->GetArenaType())!=i)
|
||||||
|
notfit = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(notfit)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
|
||||||
|
{
|
||||||
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Map const* map = GetPlayer()->GetMap();
|
||||||
|
if(!map->IsDungeon())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// search case
|
||||||
|
bool found = false;
|
||||||
|
for(int i = 0; achievIdForDangeon[i][0]; ++i)
|
||||||
|
{
|
||||||
|
if(achievIdForDangeon[i][0] == achievement->ID)
|
||||||
|
{
|
||||||
|
if(map->IsRaid())
|
||||||
|
{
|
||||||
|
// if raid accepted (ignore difficulty)
|
||||||
|
if(!achievIdForDangeon[i][2])
|
||||||
|
break; // for
|
||||||
|
}
|
||||||
|
else if(GetPlayer()->GetDifficulty()==DIFFICULTY_NORMAL)
|
||||||
|
{
|
||||||
|
// dungeon in normal mode accepted
|
||||||
|
if(!achievIdForDangeon[i][1])
|
||||||
|
break; // for
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// dungeon in heroic mode accepted
|
||||||
|
if(!achievIdForDangeon[i][3])
|
||||||
|
break; // for
|
||||||
|
}
|
||||||
|
|
||||||
|
found = true;
|
||||||
|
break; // for
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//FIXME: work only for instances where max==min for players
|
||||||
|
if(((InstanceMap*)map)->GetMaxPlayers() != achievementCriteria->death_in_dungeon.manLimit)
|
||||||
|
continue;
|
||||||
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
|
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
|
||||||
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
if(!miscvalue1)
|
if(!miscvalue1)
|
||||||
@@ -501,6 +586,17 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
continue;
|
continue;
|
||||||
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
break;
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
|
||||||
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// if team check required: must kill by opposition faction
|
||||||
|
if(achievement->ID==318 && miscvalue2==GetPlayer()->GetTeam())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
|
break;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
|
case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
|
||||||
{
|
{
|
||||||
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
@@ -518,6 +614,14 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
SetCriteriaProgress(achievementCriteria, miscvalue1);
|
SetCriteriaProgress(achievementCriteria, miscvalue1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
|
||||||
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
if(miscvalue2 != achievementCriteria->death_from.type)
|
||||||
|
continue;
|
||||||
|
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);
|
||||||
|
break;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
|
||||||
if(GetPlayer()->GetQuestRewardStatus(achievementCriteria->complete_quest.questID))
|
if(GetPlayer()->GetQuestRewardStatus(achievementCriteria->complete_quest.questID))
|
||||||
SetCriteriaProgress(achievementCriteria, 1);
|
SetCriteriaProgress(achievementCriteria, 1);
|
||||||
@@ -680,10 +784,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||||||
case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
|
case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
|
case ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
|
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
|
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
|
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
|
case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
|
case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA:
|
case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA:
|
||||||
@@ -836,8 +937,11 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
|||||||
// handle all statistic-only criteria here
|
// handle all statistic-only criteria here
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH:
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
|
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
|
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER:
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS:
|
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TALENTS:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER:
|
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL:
|
case ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_MAIL:
|
||||||
|
|||||||
@@ -230,7 +230,6 @@ void BattleGround::Update(uint32 diff)
|
|||||||
{
|
{
|
||||||
m_PrematureCountDown = true;
|
m_PrematureCountDown = true;
|
||||||
m_PrematureCountDownTimer = sBattleGroundMgr.GetPrematureFinishTime();
|
m_PrematureCountDownTimer = sBattleGroundMgr.GetPrematureFinishTime();
|
||||||
SendMessageToAll(LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING);
|
|
||||||
}
|
}
|
||||||
else if(m_PrematureCountDownTimer < diff)
|
else if(m_PrematureCountDownTimer < diff)
|
||||||
{
|
{
|
||||||
@@ -242,8 +241,17 @@ void BattleGround::Update(uint32 diff)
|
|||||||
{
|
{
|
||||||
uint32 newtime = m_PrematureCountDownTimer - diff;
|
uint32 newtime = m_PrematureCountDownTimer - diff;
|
||||||
// announce every minute
|
// announce every minute
|
||||||
if(m_PrematureCountDownTimer != sBattleGroundMgr.GetPrematureFinishTime() && newtime / 60000 != m_PrematureCountDownTimer / 60000)
|
if( newtime > (MINUTE * IN_MILISECONDS) )
|
||||||
SendMessageToAll(LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING);
|
{
|
||||||
|
if( newtime / (MINUTE * IN_MILISECONDS) != m_PrematureCountDownTimer / (MINUTE * IN_MILISECONDS) )
|
||||||
|
PSendMessageToAll(LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING, (uint32)(m_PrematureCountDownTimer / (MINUTE * IN_MILISECONDS)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//announce every 15 seconds
|
||||||
|
if( newtime / (15 * IN_MILISECONDS) != m_PrematureCountDownTimer / (15 * IN_MILISECONDS) )
|
||||||
|
PSendMessageToAll(LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS, (uint32)(m_PrematureCountDownTimer / IN_MILISECONDS));
|
||||||
|
}
|
||||||
m_PrematureCountDownTimer = newtime;
|
m_PrematureCountDownTimer = newtime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1047,7 +1055,7 @@ void BattleGround::RemoveFromBGFreeSlotQueue()
|
|||||||
// returns the number how many players can join battleground to MaxPlayersPerTeam
|
// returns the number how many players can join battleground to MaxPlayersPerTeam
|
||||||
uint32 BattleGround::GetFreeSlotsForTeam(uint32 Team) const
|
uint32 BattleGround::GetFreeSlotsForTeam(uint32 Team) const
|
||||||
{
|
{
|
||||||
//if BG is starting ... invite anyone
|
//return free slot count to MaxPlayerPerTeam
|
||||||
if (GetStatus() == STATUS_WAIT_JOIN || GetStatus() == STATUS_IN_PROGRESS)
|
if (GetStatus() == STATUS_WAIT_JOIN || GetStatus() == STATUS_IN_PROGRESS)
|
||||||
return (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0;
|
return (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0;
|
||||||
|
|
||||||
@@ -1414,6 +1422,18 @@ void BattleGround::SendMessageToAll(int32 entry)
|
|||||||
SendPacketToAll(&data);
|
SendPacketToAll(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//copied from void ChatHandler::PSendSysMessage(int32 entry, ...)
|
||||||
|
void BattleGround::PSendMessageToAll(int32 entry, ...)
|
||||||
|
{
|
||||||
|
const char *format = GetMangosString(entry);
|
||||||
|
va_list ap;
|
||||||
|
char str [2048];
|
||||||
|
va_start(ap, entry);
|
||||||
|
vsnprintf(str,2048,format, ap );
|
||||||
|
va_end(ap);
|
||||||
|
SendMessageToAll(str);
|
||||||
|
}
|
||||||
|
|
||||||
void BattleGround::EndNow()
|
void BattleGround::EndNow()
|
||||||
{
|
{
|
||||||
RemoveFromBGFreeSlotQueue();
|
RemoveFromBGFreeSlotQueue();
|
||||||
|
|||||||
@@ -402,6 +402,7 @@ class BattleGround
|
|||||||
|
|
||||||
void SendMessageToAll(char const* text);
|
void SendMessageToAll(char const* text);
|
||||||
void SendMessageToAll(int32 entry);
|
void SendMessageToAll(int32 entry);
|
||||||
|
void PSendMessageToAll(int32 entry, ... );
|
||||||
|
|
||||||
/* Raid Group */
|
/* Raid Group */
|
||||||
Group *GetBgRaid(uint32 TeamID) const { return TeamID == ALLIANCE ? m_BgRaids[BG_TEAM_ALLIANCE] : m_BgRaids[BG_TEAM_HORDE]; }
|
Group *GetBgRaid(uint32 TeamID) const { return TeamID == ALLIANCE ? m_BgRaids[BG_TEAM_ALLIANCE] : m_BgRaids[BG_TEAM_HORDE]; }
|
||||||
|
|||||||
+7
-2
@@ -654,7 +654,7 @@ enum TrinityStrings
|
|||||||
LANG_ARENA_NOT_ENOUGH_PLAYERS = 723, // "Your group does not have enough players to join this match."
|
LANG_ARENA_NOT_ENOUGH_PLAYERS = 723, // "Your group does not have enough players to join this match."
|
||||||
LANG_ARENA_GOLD_WINS = 724, // "The Gold Team wins!"
|
LANG_ARENA_GOLD_WINS = 724, // "The Gold Team wins!"
|
||||||
LANG_ARENA_GREEN_WINS = 725, // "The Green Team wins!"
|
LANG_ARENA_GREEN_WINS = 725, // "The Green Team wins!"
|
||||||
LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING = 726, // The battleground will end soon, because there aren't enough players. Get more ppl or win already!
|
// = 726, not used
|
||||||
LANG_BG_GROUP_OFFLINE_MEMBER = 727, // "Your group has an offline member. Please remove him before joining."
|
LANG_BG_GROUP_OFFLINE_MEMBER = 727, // "Your group has an offline member. Please remove him before joining."
|
||||||
LANG_BG_GROUP_MIXED_FACTION = 728, // "Your group has players from the opposing faction. You can't join the battleground as a group."
|
LANG_BG_GROUP_MIXED_FACTION = 728, // "Your group has players from the opposing faction. You can't join the battleground as a group."
|
||||||
LANG_BG_GROUP_MIXED_LEVELS = 729, // "Your group has players from different battleground brakets. You can't join as group."
|
LANG_BG_GROUP_MIXED_LEVELS = 729, // "Your group has players from different battleground brakets. You can't join as group."
|
||||||
@@ -676,7 +676,12 @@ enum TrinityStrings
|
|||||||
LANG_DIST_ARENA_POINTS_TEAM_START = 744,
|
LANG_DIST_ARENA_POINTS_TEAM_START = 744,
|
||||||
LANG_DIST_ARENA_POINTS_TEAM_END = 745,
|
LANG_DIST_ARENA_POINTS_TEAM_END = 745,
|
||||||
LANG_DIST_ARENA_POINTS_END = 746,
|
LANG_DIST_ARENA_POINTS_END = 746,
|
||||||
// Room for batleground/arena strings 747-799 not used
|
// = 747, not used
|
||||||
|
// = 748, not used
|
||||||
|
// = 749, not used
|
||||||
|
LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING = 750, // "Not enough players. This game will close in %u mins."
|
||||||
|
LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING_SECS = 751, // "Not enough players. This game will close in %u seconds."
|
||||||
|
// Room for batleground/arena strings 752-799 not used
|
||||||
|
|
||||||
// Room for BG/ARENA 750-769 not used
|
// Room for BG/ARENA 750-769 not used
|
||||||
|
|
||||||
|
|||||||
@@ -278,6 +278,13 @@ bool LootStoreItem::IsValid(LootStore const& store, uint32 entry) const
|
|||||||
store.GetName(), entry, itemid, chance);
|
store.GetName(), entry, itemid, chance);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( maxcount < mincountOrRef) // wrong max count
|
||||||
|
{
|
||||||
|
sLog.outErrorDb("Table '%s' entry %d item %d: max count (%u) less that min count (%i) - skipped", store.GetName(), entry, itemid, uint32(maxcount), mincountOrRef);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else // mincountOrRef < 0
|
else // mincountOrRef < 0
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-3
@@ -125,9 +125,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 cost = money + 30;
|
uint32 cost = items_count ? 30 * items_count : 30; // price hardcoded in client
|
||||||
if (items_count)
|
|
||||||
cost = 30 * items_count;
|
|
||||||
|
|
||||||
uint32 reqmoney = cost + money;
|
uint32 reqmoney = cost + money;
|
||||||
|
|
||||||
|
|||||||
+17
-9
@@ -898,6 +898,9 @@ void Player::StopMirrorTimer(MirrorTimerType Type)
|
|||||||
|
|
||||||
void Player::EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 damage)
|
void Player::EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 damage)
|
||||||
{
|
{
|
||||||
|
if(!isAlive() || isGameMaster())
|
||||||
|
return;
|
||||||
|
|
||||||
WorldPacket data(SMSG_ENVIRONMENTALDAMAGELOG, (21));
|
WorldPacket data(SMSG_ENVIRONMENTALDAMAGELOG, (21));
|
||||||
data << (uint64)guid;
|
data << (uint64)guid;
|
||||||
data << (uint8)(type!=DAMAGE_FALL_TO_VOID ? type : DAMAGE_FALL);
|
data << (uint8)(type!=DAMAGE_FALL_TO_VOID ? type : DAMAGE_FALL);
|
||||||
@@ -908,13 +911,18 @@ void Player::EnvironmentalDamage(uint64 guid, EnviromentalDamage type, uint32 da
|
|||||||
|
|
||||||
DealDamage(this, damage, NULL, SELF_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
DealDamage(this, damage, NULL, SELF_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||||
|
|
||||||
if(type==DAMAGE_FALL && !isAlive()) // DealDamage not apply item durability loss at self damage
|
if(!isAlive())
|
||||||
{
|
{
|
||||||
DEBUG_LOG("We are fall to death, loosing 10 percents durability");
|
if(type==DAMAGE_FALL) // DealDamage not apply item durability loss at self damage
|
||||||
DurabilityLossAll(0.10f,false);
|
{
|
||||||
// durability lost message
|
DEBUG_LOG("We are fall to death, loosing 10 percents durability");
|
||||||
WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0);
|
DurabilityLossAll(0.10f,false);
|
||||||
GetSession()->SendPacket(&data);
|
// durability lost message
|
||||||
|
WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0);
|
||||||
|
GetSession()->SendPacket(&data);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM, 1, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -998,9 +1006,7 @@ void Player::HandleLava()
|
|||||||
uint64 guid = GetGUID();
|
uint64 guid = GetGUID();
|
||||||
uint32 damage = urand(600, 700); // TODO: Get more detailed information about lava damage
|
uint32 damage = urand(600, 700); // TODO: Get more detailed information about lava damage
|
||||||
|
|
||||||
// if not gamemaster then deal damage
|
EnvironmentalDamage(guid, DAMAGE_LAVA, damage);
|
||||||
if ( !isGameMaster() )
|
|
||||||
EnvironmentalDamage(guid, DAMAGE_LAVA, damage);
|
|
||||||
|
|
||||||
m_breathTimer = 1*IN_MILISECONDS;
|
m_breathTimer = 1*IN_MILISECONDS;
|
||||||
}
|
}
|
||||||
@@ -1385,6 +1391,8 @@ void Player::setDeathState(DeathState s)
|
|||||||
if(!ressSpellId)
|
if(!ressSpellId)
|
||||||
ressSpellId = GetResurrectionSpellId();
|
ressSpellId = GetResurrectionSpellId();
|
||||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP, 1);
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP, 1);
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH, 1);
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
|
||||||
}
|
}
|
||||||
Unit::setDeathState(s);
|
Unit::setDeathState(s);
|
||||||
|
|
||||||
|
|||||||
+15
-12
@@ -743,6 +743,7 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
|
|||||||
|
|
||||||
if (pVictim->GetTypeId() == TYPEID_UNIT && !((Creature*)pVictim)->isPet() && !((Creature*)pVictim)->hasLootRecipient())
|
if (pVictim->GetTypeId() == TYPEID_UNIT && !((Creature*)pVictim)->isPet() && !((Creature*)pVictim)->hasLootRecipient())
|
||||||
((Creature*)pVictim)->SetLootRecipient(this);
|
((Creature*)pVictim)->SetLootRecipient(this);
|
||||||
|
|
||||||
if (health <= damage)
|
if (health <= damage)
|
||||||
{
|
{
|
||||||
DEBUG_LOG("DealDamage: victim just died");
|
DEBUG_LOG("DealDamage: victim just died");
|
||||||
@@ -820,12 +821,12 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
|
|||||||
((Creature*)this)->AI()->KilledUnit(pVictim);
|
((Creature*)this)->AI()->KilledUnit(pVictim);
|
||||||
|
|
||||||
// achievement stuff
|
// achievement stuff
|
||||||
if ( pVictim->GetTypeId() == TYPEID_PLAYER)
|
if (pVictim->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if(GetTypeId() == TYPEID_UNIT)
|
if (GetTypeId() == TYPEID_UNIT)
|
||||||
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, GetEntry());
|
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, GetEntry());
|
||||||
else if(GetTypeId() == TYPEID_PLAYER)
|
else if(GetTypeId() == TYPEID_PLAYER && pVictim != this)
|
||||||
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, 1);
|
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, 1, ((Player*)this)->GetTeam());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10% durability loss on death
|
// 10% durability loss on death
|
||||||
@@ -5561,6 +5562,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
|
|||||||
return false;
|
return false;
|
||||||
basepoints0 = triggerAmount * GetMaxHealth() / 100;
|
basepoints0 = triggerAmount * GetMaxHealth() / 100;
|
||||||
triggered_spell_id = 34299;
|
triggered_spell_id = 34299;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
// Healing Touch (Dreamwalker Raiment set)
|
// Healing Touch (Dreamwalker Raiment set)
|
||||||
case 28719:
|
case 28719:
|
||||||
@@ -5664,6 +5666,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
|
|||||||
{
|
{
|
||||||
triggered_spell_id = 60889;
|
triggered_spell_id = 60889;
|
||||||
basepoints0 = triggerAmount * GetMaxPower(POWER_MANA) / 100;
|
basepoints0 = triggerAmount * GetMaxPower(POWER_MANA) / 100;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -12506,14 +12509,14 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// achievement stuff
|
// achievement stuff
|
||||||
if ( pVictim->GetTypeId() == TYPEID_PLAYER)
|
if (pVictim->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if(GetTypeId() == TYPEID_UNIT)
|
if (GetTypeId() == TYPEID_UNIT)
|
||||||
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, GetEntry());
|
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, GetEntry());
|
||||||
else if(GetTypeId() == TYPEID_PLAYER)
|
else if(GetTypeId() == TYPEID_PLAYER && pVictim != this)
|
||||||
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, 1);
|
((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, 1, ((Player*)this)->GetTeam());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unit::SetControlled(bool apply, UnitState state)
|
void Unit::SetControlled(bool apply, UnitState state)
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 requiredType; // 2
|
uint32 requiredType; // 2
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0
|
// ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0
|
||||||
// TODO: also used for player deaths..
|
// TODO: also used for player deaths..
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@@ -83,7 +83,7 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 creatureCount; // 4
|
uint32 creatureCount; // 4
|
||||||
} kill_creature;
|
} kill_creature;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1
|
||||||
// TODO: there are further criterias instead just winning
|
// TODO: there are further criterias instead just winning
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@@ -91,27 +91,27 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 winCount; // 4
|
uint32 winCount; // 4
|
||||||
} win_bg;
|
} win_bg;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 level; // 4
|
uint32 level; // 4
|
||||||
} reach_level;
|
} reach_level;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 skillID; // 3
|
uint32 skillID; // 3
|
||||||
uint32 skillLevel; // 4
|
uint32 skillLevel; // 4
|
||||||
} reach_skill_level;
|
} reach_skill_level;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 linkedAchievement; // 3
|
uint32 linkedAchievement; // 3
|
||||||
} complete_achievement;
|
} complete_achievement;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
@@ -132,67 +132,73 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 questCount; // 4
|
uint32 questCount; // 4
|
||||||
} complete_quests_in_zone;
|
} complete_quests_in_zone;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 questCount; // 4
|
uint32 questCount; // 4
|
||||||
} complete_daily_quest;
|
} complete_daily_quest;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND= 15
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 mapID; // 3
|
uint32 mapID; // 3
|
||||||
} complete_battleground;
|
} complete_battleground;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP= 16
|
// ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP = 16
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 mapID; // 3
|
uint32 mapID; // 3
|
||||||
} death_at_map;
|
} death_at_map;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19
|
// ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON = 18
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32 manLimit; // 3
|
||||||
|
} death_in_dungeon;
|
||||||
|
|
||||||
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 groupSize; // 3 can be 5, 10 or 25
|
uint32 groupSize; // 3 can be 5, 10 or 25
|
||||||
} complete_raid;
|
} complete_raid;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20
|
// ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 creatureEntry; // 3
|
uint32 creatureEntry; // 3
|
||||||
} killed_by_creature;
|
} killed_by_creature;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING = 24
|
// ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING = 24
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 fallHeight; // 4
|
uint32 fallHeight; // 4
|
||||||
} fall_without_dying;
|
} fall_without_dying;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM = 26
|
// ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM = 26
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 type; // 0 - fatigue, 1 - drowning, 2 - falling, 3 - ??, 5 - fire and lava
|
uint32 type; // 3, see enum EnviromentalDamage
|
||||||
} deaths;
|
} death_from;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27
|
// ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 questID; // 3
|
uint32 questID; // 3
|
||||||
uint32 questCount; // 4
|
uint32 questCount; // 4
|
||||||
} complete_quest;
|
} complete_quest;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28
|
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2= 69
|
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2 = 69
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 spellID; // 3
|
uint32 spellID; // 3
|
||||||
uint32 spellCount; // 4
|
uint32 spellCount; // 4
|
||||||
} be_spell_target;
|
} be_spell_target;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL= 29
|
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL = 29
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110
|
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 spellID; // 3
|
uint32 spellID; // 3
|
||||||
@@ -206,32 +212,32 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 killCount; // 4
|
uint32 killCount; // 4
|
||||||
} honorable_kill_at_area;
|
} honorable_kill_at_area;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 mapID; // 3 Reference to Map.dbc
|
uint32 mapID; // 3 Reference to Map.dbc
|
||||||
} win_arena;
|
} win_arena;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33
|
// ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 mapID; // 3 Reference to Map.dbc
|
uint32 mapID; // 3 Reference to Map.dbc
|
||||||
} play_arena;
|
} play_arena;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 spellID; // 3 Reference to Map.dbc
|
uint32 spellID; // 3 Reference to Map.dbc
|
||||||
} learn_spell;
|
} learn_spell;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36
|
// ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 itemID; // 3
|
uint32 itemID; // 3
|
||||||
uint32 itemCount; // 4
|
uint32 itemCount; // 4
|
||||||
} own_item;
|
} own_item;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
@@ -239,62 +245,62 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 flag; // 5 4=in a row
|
uint32 flag; // 5 4=in a row
|
||||||
} win_rated_arena;
|
} win_rated_arena;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 teamtype; // 3 {2,3,5}
|
uint32 teamtype; // 3 {2,3,5}
|
||||||
} highest_team_rating;
|
} highest_team_rating;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39
|
// ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 teamtype; // 3 {2,3,5}
|
uint32 teamtype; // 3 {2,3,5}
|
||||||
uint32 teamrating; // 4
|
uint32 teamrating; // 4
|
||||||
} reach_team_rating;
|
} reach_team_rating;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 skillID; // 3
|
uint32 skillID; // 3
|
||||||
uint32 skillLevel; // 4 apprentice=1, journeyman=2, expert=3, artisan=4, master=5, grand master=6
|
uint32 skillLevel; // 4 apprentice=1, journeyman=2, expert=3, artisan=4, master=5, grand master=6
|
||||||
} learn_skill_level;
|
} learn_skill_level;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41
|
// ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 itemID; // 3
|
uint32 itemID; // 3
|
||||||
uint32 itemCount; // 4
|
uint32 itemCount; // 4
|
||||||
} use_item;
|
} use_item;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 itemID; // 3
|
uint32 itemID; // 3
|
||||||
uint32 itemCount; // 4
|
uint32 itemCount; // 4
|
||||||
} loot_item;
|
} loot_item;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43
|
// ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
// TODO: This rank is _NOT_ the index from AreaTable.dbc
|
// TODO: This rank is _NOT_ the index from AreaTable.dbc
|
||||||
uint32 areaReference; // 3
|
uint32 areaReference; // 3
|
||||||
} explore_area;
|
} explore_area;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK= 44
|
// ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK = 44
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
// TODO: This rank is _NOT_ the index from CharTitles.dbc
|
// TODO: This rank is _NOT_ the index from CharTitles.dbc
|
||||||
uint32 rank; // 3
|
uint32 rank; // 3
|
||||||
} own_rank;
|
} own_rank;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT= 45
|
// ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT = 45
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 numberOfSlots; // 4
|
uint32 numberOfSlots; // 4
|
||||||
} buy_bank_slot;
|
} buy_bank_slot;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION= 46
|
// ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION = 46
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 factionID; // 3
|
uint32 factionID; // 3
|
||||||
@@ -308,56 +314,56 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 numberOfExaltedFactions; // 4
|
uint32 numberOfExaltedFactions; // 4
|
||||||
} gain_exalted_reputation;
|
} gain_exalted_reputation;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48
|
// ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 numberOfVisits; // 4
|
uint32 numberOfVisits; // 4
|
||||||
} visit_barber;
|
} visit_barber;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
|
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
|
||||||
// TODO: where is the required itemlevel stored?
|
// TODO: where is the required itemlevel stored?
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 itemSlot; // 3
|
uint32 itemSlot; // 3
|
||||||
} equip_epic_item;
|
} equip_epic_item;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT= 50
|
// ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 rollValue; // 3
|
uint32 rollValue; // 3
|
||||||
uint32 count; // 4
|
uint32 count; // 4
|
||||||
} roll_need_on_loot;
|
} roll_need_on_loot;
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT= 51
|
// ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 rollValue; // 3
|
uint32 rollValue; // 3
|
||||||
uint32 count; // 4
|
uint32 count; // 4
|
||||||
} roll_greed_on_loot;
|
} roll_greed_on_loot;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52
|
// ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 classID; // 3
|
uint32 classID; // 3
|
||||||
uint32 count; // 4
|
uint32 count; // 4
|
||||||
} hk_class;
|
} hk_class;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53
|
// ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 raceID; // 3
|
uint32 raceID; // 3
|
||||||
uint32 count; // 4
|
uint32 count; // 4
|
||||||
} hk_race;
|
} hk_race;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54
|
// 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
|
struct
|
||||||
{
|
{
|
||||||
uint32 emoteID; // 3
|
uint32 emoteID; // 3
|
||||||
} do_emote;
|
} do_emote;
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE = 13
|
// ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE = 13
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE = 55
|
// ACHIEVEMENT_CRITERIA_TYPE_HEALING_DONE = 55
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS = 56
|
// ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS = 56
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
@@ -366,13 +372,13 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 mapid; // 6
|
uint32 mapid; // 6
|
||||||
} healing_done;
|
} healing_done;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57
|
// ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 itemID; // 3
|
uint32 itemID; // 3
|
||||||
} equip_item;
|
} equip_item;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD = 62
|
// ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD= 62
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
@@ -380,21 +386,21 @@ struct AchievementCriteriaEntry
|
|||||||
} quest_reward_money;
|
} quest_reward_money;
|
||||||
|
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY = 67
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY = 67
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 goldInCopper; // 4
|
uint32 goldInCopper; // 4
|
||||||
} loot_money;
|
} loot_money;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68
|
// ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 goEntry; // 3
|
uint32 goEntry; // 3
|
||||||
uint32 useCount; // 4
|
uint32 useCount; // 4
|
||||||
} use_gameobject;
|
} use_gameobject;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL= 70
|
// 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
|
struct
|
||||||
{
|
{
|
||||||
@@ -402,66 +408,66 @@ struct AchievementCriteriaEntry
|
|||||||
uint32 killCount; // 4
|
uint32 killCount; // 4
|
||||||
} special_pvp_kill;
|
} special_pvp_kill;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
|
// ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 goEntry; // 3
|
uint32 goEntry; // 3
|
||||||
uint32 lootCount; // 4
|
uint32 lootCount; // 4
|
||||||
} fish_in_gameobject;
|
} fish_in_gameobject;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS= 75
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 skillLine; // 3
|
uint32 skillLine; // 3
|
||||||
uint32 spellCount; // 4
|
uint32 spellCount; // 4
|
||||||
} learn_skilline_spell;
|
} learn_skilline_spell;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76
|
// ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
uint32 duelCount; // 4
|
uint32 duelCount; // 4
|
||||||
} win_duel;
|
} win_duel;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 powerType; // 3 mana=0, 1=rage, 3=energy, 6=runic power
|
uint32 powerType; // 3 mana=0, 1=rage, 3=energy, 6=runic power
|
||||||
} highest_power;
|
} highest_power;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 statType; // 3 4=spirit, 3=int, 2=stamina, 1=agi, 0=strength
|
uint32 statType; // 3 4=spirit, 3=int, 2=stamina, 1=agi, 0=strength
|
||||||
} highest_stat;
|
} highest_stat;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 spellSchool; // 3
|
uint32 spellSchool; // 3
|
||||||
} highest_spellpower;
|
} highest_spellpower;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING = 100
|
// ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING = 100
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 ratingType; // 3
|
uint32 ratingType; // 3
|
||||||
} highest_rating;
|
} highest_rating;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109
|
// ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 lootType; // 3 3=fishing, 2=pickpocket, 4=disentchant
|
uint32 lootType; // 3 3=fishing, 2=pickpocket, 4=disentchant
|
||||||
uint32 lootTypeCount; // 4
|
uint32 lootTypeCount; // 4
|
||||||
} loot_type;
|
} loot_type;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE= 112
|
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 skillLine; // 3
|
uint32 skillLine; // 3
|
||||||
uint32 spellCount; // 4
|
uint32 spellCount; // 4
|
||||||
} learn_skill_line;
|
} learn_skill_line;
|
||||||
|
|
||||||
// ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113
|
// ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint32 unused; // 3
|
uint32 unused; // 3
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7384"
|
#define REVISION_NR "7389"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|||||||
Reference in New Issue
Block a user