*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -37,7 +37,7 @@ enum BattleGroundSounds
|
||||
SOUND_HORDE_WINS = 8454,
|
||||
SOUND_ALLIANCE_WINS = 8455,
|
||||
SOUND_BG_START = 3439,
|
||||
SOUND_BG_START_L70ETC = 11803,
|
||||
SOUND_BG_START_L70ETC = 11803,
|
||||
};
|
||||
|
||||
enum BattleGroundQuests
|
||||
|
||||
+36
-36
@@ -54,7 +54,7 @@ void BattleGroundAV::HandleKillPlayer(Player *player, Player *killer)
|
||||
return;
|
||||
|
||||
BattleGround::HandleKillPlayer(player, killer);
|
||||
UpdateScore(player->GetTeam(),-1);
|
||||
UpdateScore(player->GetTeam(),-1);
|
||||
}
|
||||
|
||||
void BattleGroundAV::HandleKillUnit(Creature *unit, Player *killer)
|
||||
@@ -345,19 +345,19 @@ void BattleGroundAV::Update(uint32 diff)
|
||||
|
||||
//creatures
|
||||
sLog.outDebug("BG_AV start poputlating nodes");
|
||||
for(BG_AV_Nodes i= BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i )
|
||||
for(BG_AV_Nodes i= BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i )
|
||||
{
|
||||
if(m_Nodes[i].Owner)
|
||||
PopulateNode(i);
|
||||
PopulateNode(i);
|
||||
}
|
||||
//all creatures which don't get despawned through the script are static
|
||||
sLog.outDebug("BG_AV: start spawning static creatures");
|
||||
for(i=0; i < AV_STATICCPLACE_MAX; i++ )
|
||||
AddAVCreature(0,i+AV_CPLACE_MAX);
|
||||
//mainspiritguides:
|
||||
//mainspiritguides:
|
||||
sLog.outDebug("BG_AV: start spawning spiritguides creatures");
|
||||
AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
|
||||
AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
|
||||
AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
|
||||
AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
|
||||
//spawn the marshals (those who get deleted, if a tower gets destroyed)
|
||||
sLog.outDebug("BG_AV: start spawning marshal creatures");
|
||||
for(i=AV_NPC_A_MARSHAL_SOUTH; i<= AV_NPC_H_MARSHAL_WTOWER; i++)
|
||||
@@ -542,7 +542,7 @@ void BattleGroundAV::HandleAreaTrigger(Player *Source, uint32 Trigger)
|
||||
{
|
||||
case 95:
|
||||
case 2608:
|
||||
if(Source->GetTeam() != ALLIANCE)
|
||||
if(Source->GetTeam() != ALLIANCE)
|
||||
Source->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal");
|
||||
else
|
||||
Source->LeaveBattleground();
|
||||
@@ -559,7 +559,7 @@ void BattleGroundAV::HandleAreaTrigger(Player *Source, uint32 Trigger)
|
||||
case 3329:
|
||||
case 3330:
|
||||
case 3331:
|
||||
//Source->Unmount();
|
||||
//Source->Unmount();
|
||||
break;
|
||||
default:
|
||||
sLog.outDebug("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
|
||||
@@ -744,8 +744,8 @@ void BattleGroundAV::ChangeMineOwner(uint8 mine, uint32 team, bool initial)
|
||||
if(team == ALLIANCE || team == HORDE)
|
||||
{
|
||||
m_Mine_Reclaim_Timer[mine]=AV_MINE_RECLAIM_TIMER;
|
||||
char buf[256];
|
||||
sprintf(buf, GetTrinityString(LANG_BG_AV_MINE_TAKEN), GetTrinityString(( mine == AV_NORTH_MINE ) ? LANG_BG_AV_MINE_NORTH : LANG_BG_AV_MINE_SOUTH), ( team == ALLIANCE ) ? GetTrinityString(LANG_BG_AV_ALLY) : GetTrinityString(LANG_BG_AV_HORDE));
|
||||
char buf[256];
|
||||
sprintf(buf, GetTrinityString(LANG_BG_AV_MINE_TAKEN), GetTrinityString(( mine == AV_NORTH_MINE ) ? LANG_BG_AV_MINE_NORTH : LANG_BG_AV_MINE_SOUTH), ( team == ALLIANCE ) ? GetTrinityString(LANG_BG_AV_ALLY) : GetTrinityString(LANG_BG_AV_HORDE));
|
||||
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
|
||||
if(creature)
|
||||
YellToAll(creature,buf,LANG_UNIVERSAL);
|
||||
@@ -773,7 +773,7 @@ bool BattleGroundAV::PlayerCanDoMineQuest(int32 GOId,uint32 team)
|
||||
void BattleGroundAV::PopulateNode(BG_AV_Nodes node)
|
||||
{
|
||||
uint32 owner = m_Nodes[node].Owner;
|
||||
assert(owner);
|
||||
assert(owner);
|
||||
|
||||
uint32 c_place = AV_CPLACE_DEFENSE_STORM_AID + ( 4 * node );
|
||||
uint32 creatureid;
|
||||
@@ -782,7 +782,7 @@ void BattleGroundAV::PopulateNode(BG_AV_Nodes node)
|
||||
else
|
||||
{
|
||||
uint8 team2 = GetTeamIndexByTeamId(owner);
|
||||
if (m_Team_QuestStatus[team2][0] < 500 )
|
||||
if (m_Team_QuestStatus[team2][0] < 500 )
|
||||
creatureid = ( owner == ALLIANCE )? AV_NPC_A_GRAVEDEFENSE0 : AV_NPC_H_GRAVEDEFENSE0;
|
||||
else if ( m_Team_QuestStatus[team2][0] < 1000 )
|
||||
creatureid = ( owner == ALLIANCE )? AV_NPC_A_GRAVEDEFENSE1 : AV_NPC_H_GRAVEDEFENSE1;
|
||||
@@ -804,7 +804,7 @@ void BattleGroundAV::PopulateNode(BG_AV_Nodes node)
|
||||
}
|
||||
void BattleGroundAV::DePopulateNode(BG_AV_Nodes node)
|
||||
{
|
||||
uint32 c_place = AV_CPLACE_DEFENSE_STORM_AID + ( 4 * node );
|
||||
uint32 c_place = AV_CPLACE_DEFENSE_STORM_AID + ( 4 * node );
|
||||
for(uint8 i=0; i<4; i++)
|
||||
if( m_BgCreatures[c_place+i] )
|
||||
DelCreature(c_place+i);
|
||||
@@ -817,21 +817,21 @@ void BattleGroundAV::DePopulateNode(BG_AV_Nodes node)
|
||||
const BG_AV_Nodes BattleGroundAV::GetNodeThroughObject(uint32 object)
|
||||
{
|
||||
sLog.outDebug("bg_AV getnodethroughobject %i",object);
|
||||
if( object <= BG_AV_OBJECT_FLAG_A_STONEHEART_BUNKER )
|
||||
return BG_AV_Nodes(object);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_HUT )
|
||||
return BG_AV_Nodes(object - 11);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_WTOWER )
|
||||
return BG_AV_Nodes(object - 7);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_H_STONEHEART_BUNKER )
|
||||
return BG_AV_Nodes(object -22);
|
||||
if( object <= BG_AV_OBJECT_FLAG_H_FROSTWOLF_HUT )
|
||||
return BG_AV_Nodes(object - 33);
|
||||
if( object <= BG_AV_OBJECT_FLAG_H_FROSTWOLF_WTOWER )
|
||||
return BG_AV_Nodes(object - 29);
|
||||
if( object == BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE )
|
||||
return BG_AV_NODES_SNOWFALL_GRAVE;
|
||||
sLog.outError("BattleGroundAV: ERROR! GetPlace got a wrong object :(");
|
||||
if( object <= BG_AV_OBJECT_FLAG_A_STONEHEART_BUNKER )
|
||||
return BG_AV_Nodes(object);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_HUT )
|
||||
return BG_AV_Nodes(object - 11);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_A_FROSTWOLF_WTOWER )
|
||||
return BG_AV_Nodes(object - 7);
|
||||
if( object <= BG_AV_OBJECT_FLAG_C_H_STONEHEART_BUNKER )
|
||||
return BG_AV_Nodes(object -22);
|
||||
if( object <= BG_AV_OBJECT_FLAG_H_FROSTWOLF_HUT )
|
||||
return BG_AV_Nodes(object - 33);
|
||||
if( object <= BG_AV_OBJECT_FLAG_H_FROSTWOLF_WTOWER )
|
||||
return BG_AV_Nodes(object - 29);
|
||||
if( object == BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE )
|
||||
return BG_AV_NODES_SNOWFALL_GRAVE;
|
||||
sLog.outError("BattleGroundAV: ERROR! GetPlace got a wrong object :(");
|
||||
assert(false);
|
||||
return BG_AV_Nodes(0);
|
||||
}
|
||||
@@ -942,7 +942,7 @@ void BattleGroundAV::EventPlayerDefendsPoint(Player* player, uint32 object)
|
||||
SpawnBGObject(object, RESPAWN_ONE_DAY);
|
||||
|
||||
DefendNode(node,team);
|
||||
PopulateNode(node);
|
||||
PopulateNode(node);
|
||||
UpdateNodeWorldState(node);
|
||||
|
||||
if(IsTower(node))
|
||||
@@ -961,14 +961,14 @@ void BattleGroundAV::EventPlayerDefendsPoint(Player* player, uint32 object)
|
||||
SpawnBGObject(((team==ALLIANCE)?BG_AV_OBJECT_SNOW_EYECANDY_A : BG_AV_OBJECT_SNOW_EYECANDY_H)+i,RESPAWN_IMMEDIATELY);
|
||||
}
|
||||
}
|
||||
//send a nice message to all :)
|
||||
char buf[256];
|
||||
sprintf(buf, GetTrinityString(( IsTower(node) ) ? LANG_BG_AV_TOWER_DEFENDED : LANG_BG_AV_GRAVE_DEFENDED), GetNodeName(node),( team == ALLIANCE ) ? GetTrinityString(LANG_BG_AV_ALLY) : GetTrinityString(LANG_BG_AV_HORDE));
|
||||
//send a nice message to all :)
|
||||
char buf[256];
|
||||
sprintf(buf, GetTrinityString(( IsTower(node) ) ? LANG_BG_AV_TOWER_DEFENDED : LANG_BG_AV_GRAVE_DEFENDED), GetNodeName(node),( team == ALLIANCE ) ? GetTrinityString(LANG_BG_AV_ALLY) : GetTrinityString(LANG_BG_AV_HORDE));
|
||||
Creature* creature = GetBGCreature(AV_CPLACE_HERALD);
|
||||
if(creature)
|
||||
YellToAll(creature,buf,LANG_UNIVERSAL);
|
||||
//update the statistic for the defending player
|
||||
UpdatePlayerScore(player, ( IsTower(node) ) ? SCORE_TOWERS_DEFENDED : SCORE_GRAVEYARDS_DEFENDED, 1);
|
||||
//update the statistic for the defending player
|
||||
UpdatePlayerScore(player, ( IsTower(node) ) ? SCORE_TOWERS_DEFENDED : SCORE_GRAVEYARDS_DEFENDED, 1);
|
||||
if(IsTower(node))
|
||||
PlaySoundToAll(AV_SOUND_BOTH_TOWER_DEFEND);
|
||||
else
|
||||
@@ -1422,7 +1422,7 @@ void BattleGroundAV::ResetBGSubclass()
|
||||
{
|
||||
for(uint8 j=0; j<9; j++)
|
||||
m_Team_QuestStatus[i][j]=0;
|
||||
m_Team_Scores[i]=BG_AV_SCORE_INITIAL_POINTS;
|
||||
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
|
||||
@@ -1431,7 +1431,7 @@ void BattleGroundAV::ResetBGSubclass()
|
||||
}
|
||||
for(BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i <= BG_AV_NODES_STONEHEART_GRAVE; ++i) //alliance graves
|
||||
InitNode(i,ALLIANCE,false);
|
||||
for(BG_AV_Nodes i = BG_AV_NODES_DUNBALDAR_SOUTH; i <= BG_AV_NODES_STONEHEART_BUNKER; ++i) //alliance towers
|
||||
for(BG_AV_Nodes i = BG_AV_NODES_DUNBALDAR_SOUTH; i <= BG_AV_NODES_STONEHEART_BUNKER; ++i) //alliance towers
|
||||
InitNode(i,ALLIANCE,true);
|
||||
for(BG_AV_Nodes i = BG_AV_NODES_ICEBLOOD_GRAVE; i <= BG_AV_NODES_FROSTWOLF_HUT; ++i) //horde graves
|
||||
InitNode(i,HORDE,false);
|
||||
|
||||
@@ -573,7 +573,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||
|
||||
Player* pCurrChar = new Player(this);
|
||||
pCurrChar->GetMotionMaster()->Initialize();
|
||||
// for send server info and strings (config)
|
||||
// for send server info and strings (config)
|
||||
ChatHandler chH = ChatHandler(pCurrChar);
|
||||
|
||||
// "GetAccountId()==db stored account id" checked in LoadFromDB (prevent login not own character using cheating tools)
|
||||
@@ -641,7 +641,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||
SendPacket( &data );
|
||||
DEBUG_LOG( "WORLD: Sent motd (SMSG_MOTD)" );
|
||||
|
||||
// send server info
|
||||
// send server info
|
||||
if(sWorld.getConfig(CONFIG_ENABLE_SINFO_LOGIN) == 1)
|
||||
chH.PSendSysMessage(_FULLVERSION);
|
||||
|
||||
@@ -720,7 +720,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||
SendPacket( &data );
|
||||
}
|
||||
|
||||
// send new char string if not empty
|
||||
// send new char string if not empty
|
||||
if (!sWorld.GetNewCharString().empty())
|
||||
chH.PSendSysMessage(sWorld.GetNewCharString().c_str());
|
||||
}
|
||||
|
||||
+33
-33
@@ -160,12 +160,12 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{
|
||||
{ "show", SEC_GAMEMASTER, false, &ChatHandler::HandleWpShowCommand, "", NULL },
|
||||
{ "addwp", SEC_GAMEMASTER, false, &ChatHandler::HandleWpAddCommand, "", NULL },
|
||||
{ "load", SEC_GAMEMASTER, false, &ChatHandler::HandleWpLoadPathCommand, "", NULL },
|
||||
{ "modify", SEC_GAMEMASTER, false, &ChatHandler::HandleWpModifyCommand, "", NULL },
|
||||
{ "event", SEC_GAMEMASTER, false, &ChatHandler::HandleWpEventCommand, "", NULL },
|
||||
{ "unload", SEC_GAMEMASTER, false, &ChatHandler::HandleWpUnLoadPathCommand, "", NULL },
|
||||
{ "load", SEC_GAMEMASTER, false, &ChatHandler::HandleWpLoadPathCommand, "", NULL },
|
||||
{ "modify", SEC_GAMEMASTER, false, &ChatHandler::HandleWpModifyCommand, "", NULL },
|
||||
{ "event", SEC_GAMEMASTER, false, &ChatHandler::HandleWpEventCommand, "", NULL },
|
||||
{ "unload", SEC_GAMEMASTER, false, &ChatHandler::HandleWpUnLoadPathCommand, "", NULL },
|
||||
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
|
||||
@@ -325,8 +325,8 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "locales_npc_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesNpcTextCommand, "", NULL },
|
||||
{ "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
|
||||
{ "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
|
||||
{ "waypoint_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadWpScriptsCommand, "", NULL },
|
||||
{ "gm_tickets", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMTicketReloadCommand, "", NULL },
|
||||
{ "waypoint_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadWpScriptsCommand, "", NULL },
|
||||
{ "gm_tickets", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMTicketReloadCommand, "", NULL },
|
||||
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
@@ -364,7 +364,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "leader", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupLeaderCommand, "", NULL },
|
||||
{ "disband", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupDisbandCommand, "", NULL },
|
||||
{ "remove", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGroupRemoveCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
static ChatCommand lookupPlayerCommandTable[] =
|
||||
@@ -465,8 +465,8 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "unfollow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcUnFollowCommand, "", NULL },
|
||||
{ "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL },
|
||||
{ "yell", SEC_MODERATOR, false, &ChatHandler::HandleNpcYellCommand, "", NULL },
|
||||
{ "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempAddSpwCommand, "", NULL },
|
||||
{ "addformation", SEC_MODERATOR, false, &ChatHandler::HandleNpcAddFormationCommand, "", NULL },
|
||||
{ "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempAddSpwCommand, "", NULL },
|
||||
{ "addformation", SEC_MODERATOR, false, &ChatHandler::HandleNpcAddFormationCommand, "", NULL },
|
||||
|
||||
//{ TODO: fix or remove this commands
|
||||
{ "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNameCommand, "", NULL },
|
||||
@@ -498,7 +498,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "move", SEC_GAMEMASTER, false, &ChatHandler::HandleMoveObjectCommand, "", NULL },
|
||||
{ "near", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNearObjectCommand, "", NULL },
|
||||
{ "activate", SEC_GAMEMASTER, false, &ChatHandler::HandleActivateObjectCommand, "", NULL },
|
||||
{ "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempGameObjectCommand, "", NULL },
|
||||
{ "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempGameObjectCommand, "", NULL },
|
||||
{ "setphase", SEC_GAMEMASTER, false, &ChatHandler::HandleGOPhaseCommand, "", NULL },
|
||||
{ "target", SEC_GAMEMASTER, false, &ChatHandler::HandleTargetObjectCommand, "", NULL },
|
||||
{ "turn", SEC_GAMEMASTER, false, &ChatHandler::HandleTurnObjectCommand, "", NULL },
|
||||
@@ -533,26 +533,26 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
static ChatCommand ticketCommandTable[] =
|
||||
{
|
||||
{ "list", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListCommand, "", NULL },
|
||||
{ "onlinelist", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListOnlineCommand, "", NULL },
|
||||
{ "viewname", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByNameCommand, "", NULL },
|
||||
{ "viewid", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByIdCommand, "", NULL },
|
||||
{ "close", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCloseByIdCommand, "", NULL },
|
||||
{ "closedlist", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListClosedCommand, "", NULL },
|
||||
{ "delete", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMTicketDeleteByIdCommand, "", NULL },
|
||||
{ "assign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketAssignToCommand, "", NULL },
|
||||
{ "unassign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketUnAssignCommand, "", NULL },
|
||||
{ "comment", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCommentCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
static ChatCommand ticketCommandTable[] =
|
||||
{
|
||||
{ "list", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListCommand, "", NULL },
|
||||
{ "onlinelist", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListOnlineCommand, "", NULL },
|
||||
{ "viewname", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByNameCommand, "", NULL },
|
||||
{ "viewid", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByIdCommand, "", NULL },
|
||||
{ "close", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCloseByIdCommand, "", NULL },
|
||||
{ "closedlist", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListClosedCommand, "", NULL },
|
||||
{ "delete", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMTicketDeleteByIdCommand, "", NULL },
|
||||
{ "assign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketAssignToCommand, "", NULL },
|
||||
{ "unassign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketUnAssignCommand, "", NULL },
|
||||
{ "comment", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCommentCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
static ChatCommand commandTable[] =
|
||||
{
|
||||
{ "account", SEC_PLAYER, true, NULL, "", accountCommandTable },
|
||||
{ "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
|
||||
{ "ticket", SEC_MODERATOR, false, NULL, "", ticketCommandTable },
|
||||
{ "ticket", SEC_MODERATOR, false, NULL, "", ticketCommandTable },
|
||||
{ "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
|
||||
{ "go", SEC_MODERATOR, false, NULL, "", goCommandTable },
|
||||
{ "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable },
|
||||
@@ -563,11 +563,11 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||
{ "gobject", SEC_GAMEMASTER, false, NULL, "", gobjectCommandTable },
|
||||
{ "honor", SEC_GAMEMASTER, false, NULL, "", honorCommandTable },
|
||||
|
||||
//wp commands
|
||||
{ "path", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
|
||||
{ "loadpath", SEC_ADMINISTRATOR, false, &ChatHandler::HandleReloadAllPaths, "", NULL },
|
||||
//wp commands
|
||||
{ "path", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
|
||||
{ "loadpath", SEC_ADMINISTRATOR, false, &ChatHandler::HandleReloadAllPaths, "", NULL },
|
||||
|
||||
{ "quest", SEC_ADMINISTRATOR, false, NULL, "", questCommandTable },
|
||||
{ "quest", SEC_ADMINISTRATOR, false, NULL, "", questCommandTable },
|
||||
{ "reload", SEC_ADMINISTRATOR, true, NULL, "", reloadCommandTable },
|
||||
{ "list", SEC_ADMINISTRATOR, true, NULL, "", listCommandTable },
|
||||
{ "lookup", SEC_ADMINISTRATOR, true, NULL, "", lookupCommandTable },
|
||||
@@ -941,10 +941,10 @@ int ChatHandler::ParseCommands(const char* text)
|
||||
ASSERT(text);
|
||||
ASSERT(*text);
|
||||
|
||||
std::string fullcmd = text;
|
||||
std::string fullcmd = text;
|
||||
|
||||
//if(m_session->GetSecurity() == 0)
|
||||
// return 0;
|
||||
//if(m_session->GetSecurity() == 0)
|
||||
// return 0;
|
||||
|
||||
/// chat case (.command or !command format)
|
||||
if(m_session)
|
||||
|
||||
+22
-22
@@ -46,7 +46,7 @@ class ChatHandler
|
||||
public:
|
||||
explicit ChatHandler(WorldSession* session) : m_session(session) {}
|
||||
explicit ChatHandler(Player* player) : m_session(player->GetSession()) {}
|
||||
~ChatHandler() {}
|
||||
~ChatHandler() {}
|
||||
|
||||
static void FillMessageData( WorldPacket *data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit *speaker);
|
||||
|
||||
@@ -207,7 +207,7 @@ class ChatHandler
|
||||
bool HandleNpcUnFollowCommand(const char* args);
|
||||
bool HandleNpcWhisperCommand(const char* args);
|
||||
bool HandleNpcYellCommand(const char* args);
|
||||
bool HandleNpcAddFormationCommand(const char* args);
|
||||
bool HandleNpcAddFormationCommand(const char* args);
|
||||
|
||||
bool HandleReloadAllCommand(const char* args);
|
||||
bool HandleReloadAllAreaCommand(const char* args);
|
||||
@@ -222,7 +222,7 @@ class ChatHandler
|
||||
bool HandleReloadConfigCommand(const char* args);
|
||||
|
||||
bool HandleReloadWpScriptsCommand(const char* args);
|
||||
bool HandleReloadAreaTriggerTavernCommand(const char* args);
|
||||
bool HandleReloadAreaTriggerTavernCommand(const char* args);
|
||||
bool HandleReloadAreaTriggerTeleportCommand(const char* args);
|
||||
bool HandleReloadEventScriptsCommand(const char* args);
|
||||
bool HandleReloadCommandCommand(const char* args);
|
||||
@@ -418,18 +418,18 @@ class ChatHandler
|
||||
bool HandleResetAllCommand(const char * args);
|
||||
|
||||
|
||||
// GM ticket command handlers
|
||||
bool HandleGMTicketListCommand(const char* args);
|
||||
bool HandleGMTicketListOnlineCommand(const char* args);
|
||||
bool HandleGMTicketListClosedCommand(const char* args);
|
||||
bool HandleGMTicketGetByIdCommand(const char* args);
|
||||
bool HandleGMTicketGetByNameCommand(const char* args);
|
||||
bool HandleGMTicketCloseByIdCommand(const char* args);
|
||||
bool HandleGMTicketAssignToCommand(const char* args);
|
||||
bool HandleGMTicketUnAssignCommand(const char* args);
|
||||
bool HandleGMTicketCommentCommand(const char* args);
|
||||
bool HandleGMTicketDeleteByIdCommand(const char* args);
|
||||
bool HandleGMTicketReloadCommand(const char*);
|
||||
// GM ticket command handlers
|
||||
bool HandleGMTicketListCommand(const char* args);
|
||||
bool HandleGMTicketListOnlineCommand(const char* args);
|
||||
bool HandleGMTicketListClosedCommand(const char* args);
|
||||
bool HandleGMTicketGetByIdCommand(const char* args);
|
||||
bool HandleGMTicketGetByNameCommand(const char* args);
|
||||
bool HandleGMTicketCloseByIdCommand(const char* args);
|
||||
bool HandleGMTicketAssignToCommand(const char* args);
|
||||
bool HandleGMTicketUnAssignCommand(const char* args);
|
||||
bool HandleGMTicketCommentCommand(const char* args);
|
||||
bool HandleGMTicketDeleteByIdCommand(const char* args);
|
||||
bool HandleGMTicketReloadCommand(const char*);
|
||||
|
||||
bool HandleMaxSkillCommand(const char* args);
|
||||
bool HandleSetSkillCommand(const char* args);
|
||||
@@ -441,13 +441,13 @@ class ChatHandler
|
||||
bool HandleLockAccountCommand(const char* args);
|
||||
bool HandleRespawnCommand(const char* args);
|
||||
|
||||
//New Wp Commands
|
||||
bool HandleWpAddCommand(const char* args);
|
||||
//New Wp Commands
|
||||
bool HandleWpAddCommand(const char* args);
|
||||
bool HandleWpLoadPathCommand(const char* args);
|
||||
bool HandleWpUnLoadPathCommand(const char* args);
|
||||
bool HandleWpModifyCommand(const char* args);
|
||||
bool HandleWpUnLoadPathCommand(const char* args);
|
||||
bool HandleWpModifyCommand(const char* args);
|
||||
bool HandleWpEventCommand(const char* args);
|
||||
bool HandleWpShowCommand(const char* args);
|
||||
bool HandleWpShowCommand(const char* args);
|
||||
bool HandleReloadAllPaths(const char *args);
|
||||
|
||||
bool HandleFlyModeCommand(const char* args);
|
||||
@@ -470,12 +470,12 @@ class ChatHandler
|
||||
bool HandleComeToMeCommand(const char *args);
|
||||
bool HandleCombatStopCommand(const char *args);
|
||||
bool HandleCharDeleteCommand(const char *args);
|
||||
bool HandleSendMessageCommand(const char * args);
|
||||
bool HandleSendMessageCommand(const char * args);
|
||||
bool HandleFlushArenaPointsCommand(const char *args);
|
||||
bool HandlePlayAllCommand(const char* args);
|
||||
bool HandleRepairitemsCommand(const char* args);
|
||||
|
||||
bool HandleTempGameObjectCommand(const char* args);
|
||||
bool HandleTempGameObjectCommand(const char* args);
|
||||
bool HandleTempAddSpwCommand(const char* args);
|
||||
|
||||
//! Development Commands
|
||||
|
||||
@@ -39,14 +39,14 @@ class TRINITY_DLL_SPEC ConfusedMovementGenerator
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
|
||||
bool GetDestination(float &x, float &y, float &z) const
|
||||
bool GetDestination(float &x, float &y, float &z) const
|
||||
{
|
||||
if(i_destinationHolder.HasArrived()) return false;
|
||||
if(i_destinationHolder.HasArrived()) return false;
|
||||
i_destinationHolder.GetDestination(x,y,z);
|
||||
return true;
|
||||
}
|
||||
|
||||
MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; }
|
||||
MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; }
|
||||
private:
|
||||
void _InitSpecific(T &, bool &, bool &);
|
||||
TimeTracker i_nextMoveTime;
|
||||
|
||||
+31
-31
@@ -183,28 +183,28 @@ void Creature::AddToWorld()
|
||||
///- Register the creature for guid lookup
|
||||
if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
SearchFormation();
|
||||
SearchFormation();
|
||||
}
|
||||
|
||||
void Creature::RemoveFromWorld()
|
||||
{
|
||||
if(m_formationID)
|
||||
formation_mgr.DestroyGroup(m_formationID, GetGUID());
|
||||
formation_mgr.DestroyGroup(m_formationID, GetGUID());
|
||||
|
||||
///- Remove the creature from the accessor
|
||||
///- Remove the creature from the accessor
|
||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
||||
Unit::RemoveFromWorld();
|
||||
}
|
||||
|
||||
void Creature::SearchFormation()
|
||||
{
|
||||
uint32 lowguid = GetDBTableGUIDLow();
|
||||
uint32 lowguid = GetDBTableGUIDLow();
|
||||
|
||||
if(CreatureGroupMap.find(lowguid) != CreatureGroupMap.end())
|
||||
{
|
||||
m_formationID = CreatureGroupMap[lowguid]->leaderGUID;
|
||||
formation_mgr.UpdateCreatureGroup(m_formationID, this);
|
||||
}
|
||||
if(CreatureGroupMap.find(lowguid) != CreatureGroupMap.end())
|
||||
{
|
||||
m_formationID = CreatureGroupMap[lowguid]->leaderGUID;
|
||||
formation_mgr.UpdateCreatureGroup(m_formationID, this);
|
||||
}
|
||||
}
|
||||
|
||||
void Creature::RemoveCorpse()
|
||||
@@ -220,8 +220,8 @@ void Creature::RemoveCorpse()
|
||||
|
||||
float x,y,z,o;
|
||||
GetRespawnCoord(x, y, z, &o);
|
||||
SetHomePosition(x,y,z,o);
|
||||
GetMap()->CreatureRelocation(this,x,y,z,o);
|
||||
SetHomePosition(x,y,z,o);
|
||||
GetMap()->CreatureRelocation(this,x,y,z,o);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -414,7 +414,7 @@ void Creature::Update(uint32 diff)
|
||||
UpdateEntry(m_originalEntry);
|
||||
|
||||
CreatureInfo const *cinfo = GetCreatureInfo();
|
||||
SelectLevel(cinfo);
|
||||
SelectLevel(cinfo);
|
||||
|
||||
if (m_isDeadByDefault)
|
||||
{
|
||||
@@ -510,14 +510,14 @@ void Creature::Update(uint32 diff)
|
||||
if (m_regenTimer != 0)
|
||||
break;
|
||||
|
||||
if (!isInCombat())
|
||||
{
|
||||
if(HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER))
|
||||
SetUInt32Value(UNIT_DYNAMIC_FLAGS, GetCreatureInfo()->dynamicflags);
|
||||
RegenerateHealth();
|
||||
}
|
||||
else if(IsPolymorphed())
|
||||
RegenerateHealth();
|
||||
if (!isInCombat())
|
||||
{
|
||||
if(HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER))
|
||||
SetUInt32Value(UNIT_DYNAMIC_FLAGS, GetCreatureInfo()->dynamicflags);
|
||||
RegenerateHealth();
|
||||
}
|
||||
else if(IsPolymorphed())
|
||||
RegenerateHealth();
|
||||
|
||||
RegenerateMana();
|
||||
|
||||
@@ -973,7 +973,7 @@ void Creature::OnGossipSelect(Player* player, uint32 option)
|
||||
player->PlayerTalkClass->CloseGossip();
|
||||
player->PlayerTalkClass->SendTalking(textid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
case GOSSIP_OPTION_OUTDOORPVP:
|
||||
sOutdoorPvPMgr.HandleGossipOption(player, GetGUID(), option);
|
||||
break;
|
||||
@@ -1428,10 +1428,10 @@ bool Creature::LoadFromDB(uint32 guid, Map *map)
|
||||
sLog.outError("ERROR: Creature (guidlow %d, entry %d) not loaded. Suggested coordinates isn't valid (X: %f Y: %f)",GetGUIDLow(),GetEntry(),GetPositionX(),GetPositionY());
|
||||
return false;
|
||||
}
|
||||
//We should set first home position, because then AI calls home movement
|
||||
SetHomePosition(data->posX,data->posY,data->posZ,data->orientation);
|
||||
//We should set first home position, because then AI calls home movement
|
||||
SetHomePosition(data->posX,data->posY,data->posZ,data->orientation);
|
||||
|
||||
m_respawnradius = data->spawndist;
|
||||
m_respawnradius = data->spawndist;
|
||||
|
||||
m_respawnDelay = data->spawntimesecs;
|
||||
m_isDeadByDefault = data->is_dead;
|
||||
@@ -1676,11 +1676,11 @@ void Creature::setDeathState(DeathState s)
|
||||
SetLootRecipient(NULL);
|
||||
Unit::setDeathState(ALIVE);
|
||||
CreatureInfo const *cinfo = GetCreatureInfo();
|
||||
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
|
||||
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
|
||||
AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
SetUInt32Value(UNIT_NPC_FLAGS, cinfo->npcflag);
|
||||
clearUnitState(UNIT_STAT_ALL_STATE);
|
||||
i_motionMaster.Initialize();
|
||||
i_motionMaster.Initialize();
|
||||
SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool));
|
||||
LoadCreaturesAddon(true);
|
||||
}
|
||||
@@ -1692,9 +1692,9 @@ bool Creature::FallGround()
|
||||
if (getDeathState() == DEAD_FALLING)
|
||||
return false;
|
||||
|
||||
float x, y, z;
|
||||
GetPosition(x, y, z);
|
||||
float ground_Z = GetMap()->GetVmapHeight(x, y, z, true);
|
||||
float x, y, z;
|
||||
GetPosition(x, y, z);
|
||||
float ground_Z = GetMap()->GetVmapHeight(x, y, z, true);
|
||||
if (fabs(ground_Z - z) < 0.1f)
|
||||
return false;
|
||||
|
||||
@@ -2056,8 +2056,8 @@ bool Creature::LoadCreaturesAddon(bool reload)
|
||||
SetUnitMovementFlags(cainfo->move_flags);
|
||||
|
||||
//Load Path
|
||||
if (cainfo->path_id != 0)
|
||||
m_path_id = cainfo->path_id;
|
||||
if (cainfo->path_id != 0)
|
||||
m_path_id = cainfo->path_id;
|
||||
|
||||
if(cainfo->auras)
|
||||
{
|
||||
|
||||
+16
-16
@@ -281,7 +281,7 @@ struct CreatureDataAddon
|
||||
{
|
||||
uint32 guidOrEntry;
|
||||
uint32 path_id;
|
||||
uint32 mount;
|
||||
uint32 mount;
|
||||
uint32 bytes0;
|
||||
uint32 bytes1;
|
||||
uint32 bytes2;
|
||||
@@ -626,18 +626,18 @@ class TRINITY_DLL_SPEC Creature : public Unit
|
||||
|
||||
uint32 GetGlobalCooldown() const { return m_GlobalCooldown; }
|
||||
|
||||
uint32 GetWaypointPath(){return m_path_id;}
|
||||
void LoadPath(uint32 pathid) { m_path_id = pathid; }
|
||||
uint32 GetWaypointPath(){return m_path_id;}
|
||||
void LoadPath(uint32 pathid) { m_path_id = pathid; }
|
||||
|
||||
uint32 GetCurrentWaypointID(){return m_waypointID;}
|
||||
void UpdateWaypointID(uint32 wpID){m_waypointID = wpID;}
|
||||
uint32 GetCurrentWaypointID(){return m_waypointID;}
|
||||
void UpdateWaypointID(uint32 wpID){m_waypointID = wpID;}
|
||||
|
||||
void SearchFormation();
|
||||
bool IsFormationLeader() {return (GetDBTableGUIDLow() && GetDBTableGUIDLow() == m_formationID);}
|
||||
uint32 GetFormationID(){return m_formationID;}
|
||||
void SearchFormation();
|
||||
bool IsFormationLeader() {return (GetDBTableGUIDLow() && GetDBTableGUIDLow() == m_formationID);}
|
||||
uint32 GetFormationID(){return m_formationID;}
|
||||
|
||||
Unit *SelectVictim();
|
||||
protected:
|
||||
protected:
|
||||
bool CreateFromProto(uint32 guidlow,uint32 Entry,uint32 team, const CreatureData *data = NULL);
|
||||
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
|
||||
|
||||
@@ -685,17 +685,17 @@ class TRINITY_DLL_SPEC Creature : public Unit
|
||||
float mHome_X;
|
||||
float mHome_Y;
|
||||
float mHome_Z;
|
||||
float mHome_O;
|
||||
float mHome_O;
|
||||
|
||||
private:
|
||||
//WaypointMovementGenerator vars
|
||||
uint32 m_waypointID;
|
||||
uint32 m_path_id;
|
||||
//WaypointMovementGenerator vars
|
||||
uint32 m_waypointID;
|
||||
uint32 m_path_id;
|
||||
|
||||
//Formation var
|
||||
uint32 m_formationID;
|
||||
//Formation var
|
||||
uint32 m_formationID;
|
||||
|
||||
GridReference<Creature> m_gridRef;
|
||||
GridReference<Creature> m_gridRef;
|
||||
CreatureInfo const* m_creatureInfo; // in heroic mode can different from ObjMgr::GetCreatureTemplate(GetEntry())
|
||||
};
|
||||
|
||||
|
||||
+115
-115
@@ -33,182 +33,182 @@ UNORDERED_MAP<uint32, FormationMember*> CreatureGroupMap;
|
||||
|
||||
void CreatureGroupManager::UpdateCreatureGroup(uint32 group_id, Creature *member)
|
||||
{
|
||||
if(CreatureGroupHolder.find(group_id) != CreatureGroupHolder.end())
|
||||
{
|
||||
sLog.outDebug("Group found: %u, inserting creature GUID: %u", group_id, member->GetGUIDLow());
|
||||
CreatureGroupHolder[group_id]->AddMember(member);
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog.outDebug("Group not found: %u. Creating new group.", group_id);
|
||||
CreatureGroup* formation = new CreatureGroup;
|
||||
CreatureGroupHolder[group_id] = formation;
|
||||
formation->AddMember(member);
|
||||
}
|
||||
if(CreatureGroupHolder.find(group_id) != CreatureGroupHolder.end())
|
||||
{
|
||||
sLog.outDebug("Group found: %u, inserting creature GUID: %u", group_id, member->GetGUIDLow());
|
||||
CreatureGroupHolder[group_id]->AddMember(member);
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog.outDebug("Group not found: %u. Creating new group.", group_id);
|
||||
CreatureGroup* formation = new CreatureGroup;
|
||||
CreatureGroupHolder[group_id] = formation;
|
||||
formation->AddMember(member);
|
||||
}
|
||||
}
|
||||
|
||||
void CreatureGroupManager::DestroyGroup(uint32 group_id, uint64 guid)
|
||||
{
|
||||
if(CreatureGroupHolder.find(group_id) != CreatureGroupHolder.end())
|
||||
{
|
||||
sLog.outDebug("Deleting member pointer to GUID: %u from group %u", group_id, guid);
|
||||
CreatureGroupHolder[group_id]->RemoveMember(guid);
|
||||
if(CreatureGroupHolder.find(group_id) != CreatureGroupHolder.end())
|
||||
{
|
||||
sLog.outDebug("Deleting member pointer to GUID: %u from group %u", group_id, guid);
|
||||
CreatureGroupHolder[group_id]->RemoveMember(guid);
|
||||
|
||||
if(CreatureGroupHolder[group_id]->isEmpty())
|
||||
{
|
||||
sLog.outDebug("Deleting group %u", group_id);
|
||||
delete CreatureGroupHolder[group_id];
|
||||
CreatureGroupHolder.erase(group_id);
|
||||
}
|
||||
}
|
||||
if(CreatureGroupHolder[group_id]->isEmpty())
|
||||
{
|
||||
sLog.outDebug("Deleting group %u", group_id);
|
||||
delete CreatureGroupHolder[group_id];
|
||||
CreatureGroupHolder.erase(group_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CreatureGroupManager::LoadCreatureFormations()
|
||||
{
|
||||
//Clear existing map
|
||||
CreatureGroupMap.clear();
|
||||
//Clear existing map
|
||||
CreatureGroupMap.clear();
|
||||
|
||||
//Check Integrity of the table
|
||||
QueryResult *result = WorldDatabase.PQuery("SELECT MAX(`leaderGUID`) FROM `creature_formations`");
|
||||
//Check Integrity of the table
|
||||
QueryResult *result = WorldDatabase.PQuery("SELECT MAX(`leaderGUID`) FROM `creature_formations`");
|
||||
|
||||
if(!result)
|
||||
if(!result)
|
||||
{
|
||||
sLog.outErrorDb(" an error occured while loading the table `creature_formations` ( maybe it doesn't exist ?)\n");
|
||||
return;
|
||||
}
|
||||
delete result;
|
||||
delete result;
|
||||
|
||||
//Get group data
|
||||
result = WorldDatabase.PQuery("SELECT `leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leaderGUID`");
|
||||
//Get group data
|
||||
result = WorldDatabase.PQuery("SELECT `leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leaderGUID`");
|
||||
|
||||
if(!result)
|
||||
if(!result)
|
||||
{
|
||||
sLog.outErrorDb("The table `creature_formations` is empty or corrupted");
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 total_records = result->GetRowCount(), lastLeaderGUID = 0;
|
||||
barGoLink bar( total_records);
|
||||
barGoLink bar( total_records);
|
||||
Field *fields;
|
||||
|
||||
FormationMember *group_member;
|
||||
//Loading data...
|
||||
do
|
||||
FormationMember *group_member;
|
||||
//Loading data...
|
||||
do
|
||||
{
|
||||
fields = result->Fetch();
|
||||
|
||||
bar.step();
|
||||
bar.step();
|
||||
//Load group member data
|
||||
group_member = new FormationMember;
|
||||
group_member->leaderGUID = fields[0].GetUInt32();
|
||||
group_member->memberGUID = fields[1].GetUInt32();
|
||||
group_member->groupAI = fields[4].GetUInt8();
|
||||
//If creature is group leader we may skip loading of dist/angle
|
||||
if(group_member->leaderGUID != group_member->memberGUID)
|
||||
{
|
||||
group_member->follow_dist = fields[2].GetUInt32();
|
||||
group_member->follow_angle = fields[3].GetUInt32();
|
||||
}
|
||||
group_member = new FormationMember;
|
||||
group_member->leaderGUID = fields[0].GetUInt32();
|
||||
group_member->memberGUID = fields[1].GetUInt32();
|
||||
group_member->groupAI = fields[4].GetUInt8();
|
||||
//If creature is group leader we may skip loading of dist/angle
|
||||
if(group_member->leaderGUID != group_member->memberGUID)
|
||||
{
|
||||
group_member->follow_dist = fields[2].GetUInt32();
|
||||
group_member->follow_angle = fields[3].GetUInt32();
|
||||
}
|
||||
|
||||
CreatureGroupMap[group_member->memberGUID] = group_member;
|
||||
CreatureGroupMap[group_member->memberGUID] = group_member;
|
||||
|
||||
if(lastLeaderGUID != group_member->leaderGUID)
|
||||
lastLeaderGUID = group_member->leaderGUID;
|
||||
}
|
||||
while(result->NextRow()) ;
|
||||
if(lastLeaderGUID != group_member->leaderGUID)
|
||||
lastLeaderGUID = group_member->leaderGUID;
|
||||
}
|
||||
while(result->NextRow()) ;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u creatures in formations", total_records );
|
||||
sLog.outString();
|
||||
//Free some heap
|
||||
delete result;
|
||||
sLog.outString( ">> Loaded %u creatures in formations", total_records );
|
||||
sLog.outString();
|
||||
//Free some heap
|
||||
delete result;
|
||||
}
|
||||
|
||||
void CreatureGroup::AddMember(Creature *member)
|
||||
{
|
||||
sLog.outDebug("Adding unit GUID: %u.", member->GetGUIDLow());
|
||||
sLog.outDebug("Adding unit GUID: %u.", member->GetGUIDLow());
|
||||
|
||||
uint64 guid = member->GetGUID();
|
||||
//We first search creature member if exist
|
||||
if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end())
|
||||
return;
|
||||
//Check is that shit is a leader
|
||||
if(member->IsFormationLeader())
|
||||
{
|
||||
sLog.outDebug("Unit GUID: %u is formation leader. Adding group.", member->GetGUIDLow());
|
||||
m_leader = member;
|
||||
}
|
||||
//Add to the club
|
||||
CreatureGroupMembers[guid] = member;
|
||||
sLog.outDebug("Unit GUID: %u added.", member->GetGUID());
|
||||
uint64 guid = member->GetGUID();
|
||||
//We first search creature member if exist
|
||||
if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end())
|
||||
return;
|
||||
//Check is that shit is a leader
|
||||
if(member->IsFormationLeader())
|
||||
{
|
||||
sLog.outDebug("Unit GUID: %u is formation leader. Adding group.", member->GetGUIDLow());
|
||||
m_leader = member;
|
||||
}
|
||||
//Add to the club
|
||||
CreatureGroupMembers[guid] = member;
|
||||
sLog.outDebug("Unit GUID: %u added.", member->GetGUID());
|
||||
}
|
||||
|
||||
void CreatureGroup::RemoveMember(uint64 guid)
|
||||
{
|
||||
if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end())
|
||||
CreatureGroupMembers.erase(guid);
|
||||
if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end())
|
||||
CreatureGroupMembers.erase(guid);
|
||||
}
|
||||
|
||||
void CreatureGroup::MemberHasAttacked(Creature *member)
|
||||
{
|
||||
uint8 groupAI = CreatureGroupMap[member->GetDBTableGUIDLow()]->groupAI;;
|
||||
uint8 groupAI = CreatureGroupMap[member->GetDBTableGUIDLow()]->groupAI;;
|
||||
|
||||
for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
|
||||
{
|
||||
sLog.outDebug("AI:%u:Group member found: %u, attacked by %s.", groupAI, itr->second->GetGUIDLow(), member->getVictim()->GetName());
|
||||
if(itr->second)
|
||||
{
|
||||
switch(groupAI)
|
||||
{
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
if(!member->IsFormationLeader())
|
||||
return;
|
||||
}
|
||||
//Attack if everything is OK
|
||||
itr->second->AI()->AttackStart(member->getVictim());
|
||||
}
|
||||
}
|
||||
for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
|
||||
{
|
||||
sLog.outDebug("AI:%u:Group member found: %u, attacked by %s.", groupAI, itr->second->GetGUIDLow(), member->getVictim()->GetName());
|
||||
if(itr->second)
|
||||
{
|
||||
switch(groupAI)
|
||||
{
|
||||
case 0:
|
||||
return;
|
||||
case 1:
|
||||
if(!member->IsFormationLeader())
|
||||
return;
|
||||
}
|
||||
//Attack if everything is OK
|
||||
itr->second->AI()->AttackStart(member->getVictim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CreatureGroup::LeaderMovedInEvade()
|
||||
{
|
||||
for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
|
||||
{
|
||||
if(itr->second && itr->second->isAlive() && !itr->second->isInCombat() && !itr->second->getVictim())
|
||||
SetMemberDestination(itr->second);
|
||||
}
|
||||
for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
|
||||
{
|
||||
if(itr->second && itr->second->isAlive() && !itr->second->isInCombat() && !itr->second->getVictim())
|
||||
SetMemberDestination(itr->second);
|
||||
}
|
||||
}
|
||||
|
||||
void CreatureGroup::SetMemberDestination(Creature *member)
|
||||
{
|
||||
if(!member || !m_leader || member->IsFormationLeader())
|
||||
return;
|
||||
if(!member || !m_leader || member->IsFormationLeader())
|
||||
return;
|
||||
|
||||
float x,y,z;
|
||||
uint32 lowguid = member->GetGUIDLow();
|
||||
float x,y,z;
|
||||
uint32 lowguid = member->GetGUIDLow();
|
||||
|
||||
UNORDERED_MAP<uint32, FormationMember*>::iterator itr2 = CreatureGroupMap.find(lowguid);
|
||||
UNORDERED_MAP<uint32, FormationMember*>::iterator itr2 = CreatureGroupMap.find(lowguid);
|
||||
|
||||
if(m_leader->GetMotionMaster()->GetDestination(x,y,z) && itr2 != CreatureGroupMap.end())
|
||||
{
|
||||
float dist, angle, pathangle;
|
||||
if(m_leader->GetMotionMaster()->GetDestination(x,y,z) && itr2 != CreatureGroupMap.end())
|
||||
{
|
||||
float dist, angle, pathangle;
|
||||
|
||||
angle = CreatureGroupMap[lowguid]->follow_angle;
|
||||
dist = CreatureGroupMap[lowguid]->follow_dist;
|
||||
pathangle = atan2(m_leader->GetPositionY()-y, m_leader->GetPositionX()-x);
|
||||
angle = CreatureGroupMap[lowguid]->follow_angle;
|
||||
dist = CreatureGroupMap[lowguid]->follow_dist;
|
||||
pathangle = atan2(m_leader->GetPositionY()-y, m_leader->GetPositionX()-x);
|
||||
|
||||
x = x+cos(angle+pathangle)*dist;
|
||||
y = y+sin(angle+pathangle)*dist;
|
||||
x = x+cos(angle+pathangle)*dist;
|
||||
y = y+sin(angle+pathangle)*dist;
|
||||
|
||||
member->GetMotionMaster()->Clear();
|
||||
member->GetMotionMaster()->Clear();
|
||||
|
||||
if(member->GetDistance(m_leader) < dist+MAX_DESYNC)
|
||||
member->SetUnitMovementFlags(m_leader->GetUnitMovementFlags());
|
||||
else
|
||||
member->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
if(member->GetDistance(m_leader) < dist+MAX_DESYNC)
|
||||
member->SetUnitMovementFlags(m_leader->GetUnitMovementFlags());
|
||||
else
|
||||
member->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
|
||||
member->GetMotionMaster()->MovePoint(0, x, y, z);
|
||||
}
|
||||
member->GetMotionMaster()->MovePoint(0, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
+20
-20
@@ -27,35 +27,35 @@
|
||||
|
||||
struct FormationMember
|
||||
{
|
||||
float follow_dist;
|
||||
float follow_angle;
|
||||
uint32 memberGUID;
|
||||
uint32 leaderGUID;
|
||||
uint8 groupAI;
|
||||
float follow_dist;
|
||||
float follow_angle;
|
||||
uint32 memberGUID;
|
||||
uint32 leaderGUID;
|
||||
uint8 groupAI;
|
||||
};
|
||||
|
||||
class CreatureGroupManager
|
||||
{
|
||||
public:
|
||||
void UpdateCreatureGroup(uint32 group_id, Creature *member);
|
||||
void DestroyGroup(uint32 group_id, uint64 guid);
|
||||
void LoadCreatureFormations();
|
||||
public:
|
||||
void UpdateCreatureGroup(uint32 group_id, Creature *member);
|
||||
void DestroyGroup(uint32 group_id, uint64 guid);
|
||||
void LoadCreatureFormations();
|
||||
};
|
||||
|
||||
class CreatureGroup
|
||||
{
|
||||
UNORDERED_MAP<uint64, Creature*>CreatureGroupMembers;
|
||||
Creature *m_leader; //Important do not forget sometimes to work with pointers instead synonims :D:D
|
||||
UNORDERED_MAP<uint64, Creature*>CreatureGroupMembers;
|
||||
Creature *m_leader; //Important do not forget sometimes to work with pointers instead synonims :D:D
|
||||
|
||||
public:
|
||||
CreatureGroup() : m_leader(NULL) {}
|
||||
~CreatureGroup(){sLog.outDebug("Destroying group");}
|
||||
void AddMember(Creature *);
|
||||
void RemoveMember(uint64 guid);
|
||||
void LeaderMovedInEvade();
|
||||
void MemberHasAttacked(Creature *);
|
||||
void SetMemberDestination(Creature *);
|
||||
bool isEmpty() {return CreatureGroupMembers.empty();}
|
||||
public:
|
||||
CreatureGroup() : m_leader(NULL) {}
|
||||
~CreatureGroup(){sLog.outDebug("Destroying group");}
|
||||
void AddMember(Creature *);
|
||||
void RemoveMember(uint64 guid);
|
||||
void LeaderMovedInEvade();
|
||||
void MemberHasAttacked(Creature *);
|
||||
void SetMemberDestination(Creature *);
|
||||
bool isEmpty() {return CreatureGroupMembers.empty();}
|
||||
};
|
||||
|
||||
typedef UNORDERED_MAP<uint32, CreatureGroup*> CreatureGroupHolderType;
|
||||
|
||||
@@ -62,7 +62,7 @@ bool FleeingMovementGenerator<Creature>::GetDestination(float &x, float &y, floa
|
||||
template<>
|
||||
bool FleeingMovementGenerator<Player>::GetDestination(float &x, float &y, float &z) const
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
||||
@@ -37,7 +37,7 @@ class TRINITY_DLL_SPEC FleeingMovementGenerator
|
||||
void Finalize(T &);
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
bool GetDestination(float &x, float &y, float &z) const;
|
||||
bool GetDestination(float &x, float &y, float &z) const;
|
||||
|
||||
MovementGeneratorType GetMovementGeneratorType() { return FLEEING_MOTION_TYPE; }
|
||||
|
||||
|
||||
@@ -632,13 +632,13 @@ namespace Trinity
|
||||
float i_range;
|
||||
};
|
||||
|
||||
class CreatureWithDbGUIDCheck
|
||||
class CreatureWithDbGUIDCheck
|
||||
{
|
||||
public:
|
||||
CreatureWithDbGUIDCheck(WorldObject const* obj, uint32 lowguid) : i_obj(obj), i_lowguid(lowguid) {}
|
||||
bool operator()(Creature* u)
|
||||
{
|
||||
return u->GetDBTableGUIDLow() == i_lowguid;
|
||||
return u->GetDBTableGUIDLow() == i_lowguid;
|
||||
}
|
||||
private:
|
||||
WorldObject const* i_obj;
|
||||
|
||||
+26
-26
@@ -226,10 +226,10 @@ class TRINITY_DLL_SPEC Group
|
||||
return (mslot1->group==slot2->group);
|
||||
}
|
||||
|
||||
bool HasFreeSlotSubGroup(uint8 subgroup) const
|
||||
{
|
||||
return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAXGROUPSIZE);
|
||||
}
|
||||
bool HasFreeSlotSubGroup(uint8 subgroup) const
|
||||
{
|
||||
return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAXGROUPSIZE);
|
||||
}
|
||||
|
||||
bool SameSubGroup(Player const* member1, Player const* member2) const;
|
||||
|
||||
@@ -305,8 +305,8 @@ class TRINITY_DLL_SPEC Group
|
||||
void SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
|
||||
void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r);
|
||||
void GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature);
|
||||
void NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature);
|
||||
void MasterLoot(const uint64& playerGUID, Loot *loot, Creature *creature);
|
||||
void NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature);
|
||||
void MasterLoot(const uint64& playerGUID, Loot *loot, Creature *creature);
|
||||
Rolls::iterator GetRoll(uint64 Guid)
|
||||
{
|
||||
Rolls::iterator iter;
|
||||
@@ -349,17 +349,17 @@ class TRINITY_DLL_SPEC Group
|
||||
|
||||
void _homebindIfInstance(Player *player);
|
||||
|
||||
void _initRaidSubGroupsCounter()
|
||||
{
|
||||
// Sub group counters initialization
|
||||
if (!m_subGroupsCounts)
|
||||
m_subGroupsCounts = new uint8[MAXRAIDSIZE / MAXGROUPSIZE];
|
||||
void _initRaidSubGroupsCounter()
|
||||
{
|
||||
// Sub group counters initialization
|
||||
if (!m_subGroupsCounts)
|
||||
m_subGroupsCounts = new uint8[MAXRAIDSIZE / MAXGROUPSIZE];
|
||||
|
||||
memset((void*)m_subGroupsCounts, 0, (MAXRAIDSIZE / MAXGROUPSIZE)*sizeof(uint8));
|
||||
memset((void*)m_subGroupsCounts, 0, (MAXRAIDSIZE / MAXGROUPSIZE)*sizeof(uint8));
|
||||
|
||||
for (member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
|
||||
++m_subGroupsCounts[itr->group];
|
||||
}
|
||||
for (member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr)
|
||||
++m_subGroupsCounts[itr->group];
|
||||
}
|
||||
|
||||
member_citerator _getMemberCSlot(uint64 Guid) const
|
||||
{
|
||||
@@ -381,17 +381,17 @@ class TRINITY_DLL_SPEC Group
|
||||
return m_memberSlots.end();
|
||||
}
|
||||
|
||||
void SubGroupCounterIncrease(uint8 subgroup)
|
||||
{
|
||||
if (m_subGroupsCounts)
|
||||
++m_subGroupsCounts[subgroup];
|
||||
}
|
||||
void SubGroupCounterIncrease(uint8 subgroup)
|
||||
{
|
||||
if (m_subGroupsCounts)
|
||||
++m_subGroupsCounts[subgroup];
|
||||
}
|
||||
|
||||
void SubGroupCounterDecrease(uint8 subgroup)
|
||||
{
|
||||
if (m_subGroupsCounts)
|
||||
--m_subGroupsCounts[subgroup];
|
||||
}
|
||||
void SubGroupCounterDecrease(uint8 subgroup)
|
||||
{
|
||||
if (m_subGroupsCounts)
|
||||
--m_subGroupsCounts[subgroup];
|
||||
}
|
||||
|
||||
MemberSlotList m_memberSlots;
|
||||
GroupRefManager m_memberMgr;
|
||||
@@ -409,6 +409,6 @@ class TRINITY_DLL_SPEC Group
|
||||
uint64 m_looterGuid;
|
||||
Rolls RollId;
|
||||
BoundInstancesMap m_boundInstances[TOTAL_DIFFICULTIES];
|
||||
uint8* m_subGroupsCounts;
|
||||
uint8* m_subGroupsCounts;
|
||||
};
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -361,7 +361,7 @@ bool Guild::FillPlayerData(uint64 guid, MemberSlot* memslot)
|
||||
}
|
||||
else
|
||||
{
|
||||
PCachePlayerInfo pInfo = objmgr.GetPlayerInfoFromCache(GUID_LOPART(guid));
|
||||
PCachePlayerInfo pInfo = objmgr.GetPlayerInfoFromCache(GUID_LOPART(guid));
|
||||
if(pInfo)
|
||||
{
|
||||
plName = pInfo->sPlayerName;
|
||||
@@ -412,7 +412,7 @@ bool Guild::FillPlayerData(uint64 guid, MemberSlot* memslot)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
memslot->name = plName;
|
||||
memslot->level = plLevel;
|
||||
|
||||
@@ -70,10 +70,10 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
|
||||
// restore orientation of not moving creature at returning to home
|
||||
if(owner.GetDefaultMovementType()==IDLE_MOTION_TYPE)
|
||||
{
|
||||
owner.SetOrientation(ori);
|
||||
WorldPacket packet;
|
||||
owner.BuildHeartBeatMsg(&packet);
|
||||
owner.SendMessageToSet(&packet, false);
|
||||
owner.SetOrientation(ori);
|
||||
WorldPacket packet;
|
||||
owner.BuildHeartBeatMsg(&packet);
|
||||
owner.SendMessageToSet(&packet, false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ class TRINITY_DLL_SPEC HomeMovementGenerator<Creature>
|
||||
void _setTargetLocation(Creature &);
|
||||
DestinationHolder< Traveller<Creature> > i_destinationHolder;
|
||||
|
||||
float ori;
|
||||
float ori;
|
||||
uint32 i_travel_timer;
|
||||
};
|
||||
#endif
|
||||
|
||||
+21
-21
@@ -271,9 +271,9 @@ enum TrinityStrings
|
||||
LANG_COMMAND_WHISPERON = 285,
|
||||
LANG_COMMAND_WHISPEROFF = 286,
|
||||
LANG_COMMAND_CREATGUIDNOTFOUND = 287,
|
||||
// TICKET STRINGS NEED REWRITE // 288-296 FREE
|
||||
// TICKET STRINGS NEED REWRITE // 288-296 FREE
|
||||
|
||||
// END
|
||||
// END
|
||||
LANG_COMMAND_SPAWNDIST = 297,
|
||||
LANG_COMMAND_SPAWNTIME = 298,
|
||||
LANG_COMMAND_MODIFY_HONOR = 299,
|
||||
@@ -798,24 +798,24 @@ enum TrinityStrings
|
||||
|
||||
// FREE IDS 1200-9999
|
||||
|
||||
// Ticket Strings 2000-2029
|
||||
LANG_COMMAND_TICKETNEW = 2000,
|
||||
// Ticket Strings 2000-2029
|
||||
LANG_COMMAND_TICKETNEW = 2000,
|
||||
LANG_COMMAND_TICKETUPDATED = 2001,
|
||||
LANG_COMMAND_TICKETPLAYERABANDON = 2002,
|
||||
LANG_COMMAND_TICKETCLOSED = 2003,
|
||||
LANG_COMMAND_TICKETDELETED = 2004,
|
||||
LANG_COMMAND_TICKETNOTEXIST = 2005,
|
||||
LANG_COMMAND_TICKETCLOSEFIRST = 2006,
|
||||
LANG_COMMAND_TICKETALREADYASSIGNED = 2007,
|
||||
LANG_COMMAND_TICKETRELOAD = 2008,
|
||||
LANG_COMMAND_TICKETSHOWLIST = 2009,
|
||||
LANG_COMMAND_TICKETSHOWONLINELIST = 2010,
|
||||
LANG_COMMAND_TICKETSHOWCLOSEDLIST = 2011,
|
||||
LANG_COMMAND_TICKETASSIGNERROR_A = 2012,
|
||||
LANG_COMMAND_TICKETASSIGNERROR_B = 2013,
|
||||
LANG_COMMAND_TICKETNOTASSIGNED = 2014,
|
||||
LANG_COMMAND_TICKETUNASSIGNSECURITY = 2015,
|
||||
LANG_COMMAND_TICKETCANNOTCLOSE = 2016,
|
||||
LANG_COMMAND_TICKETPLAYERABANDON = 2002,
|
||||
LANG_COMMAND_TICKETCLOSED = 2003,
|
||||
LANG_COMMAND_TICKETDELETED = 2004,
|
||||
LANG_COMMAND_TICKETNOTEXIST = 2005,
|
||||
LANG_COMMAND_TICKETCLOSEFIRST = 2006,
|
||||
LANG_COMMAND_TICKETALREADYASSIGNED = 2007,
|
||||
LANG_COMMAND_TICKETRELOAD = 2008,
|
||||
LANG_COMMAND_TICKETSHOWLIST = 2009,
|
||||
LANG_COMMAND_TICKETSHOWONLINELIST = 2010,
|
||||
LANG_COMMAND_TICKETSHOWCLOSEDLIST = 2011,
|
||||
LANG_COMMAND_TICKETASSIGNERROR_A = 2012,
|
||||
LANG_COMMAND_TICKETASSIGNERROR_B = 2013,
|
||||
LANG_COMMAND_TICKETNOTASSIGNED = 2014,
|
||||
LANG_COMMAND_TICKETUNASSIGNSECURITY = 2015,
|
||||
LANG_COMMAND_TICKETCANNOTCLOSE = 2016,
|
||||
LANG_COMMAND_TICKETLISTGUID = 2017,
|
||||
LANG_COMMAND_TICKETLISTNAME = 2018,
|
||||
LANG_COMMAND_TICKETLISTAGE = 2019,
|
||||
@@ -907,8 +907,8 @@ enum TrinityStrings
|
||||
LANG_OPVP_EP_FLIGHT_CGT = 10053,
|
||||
LANG_OPVP_ZM_GOSSIP_ALLIANCE = 10054,
|
||||
LANG_OPVP_ZM_GOSSIP_HORDE = 10055,
|
||||
LANG_NO_ENTER_HALL_OF_LEGENDS = 10056,
|
||||
LANG_NO_ENTER_CHAMPIONS_HALL = 10057,
|
||||
LANG_NO_ENTER_HALL_OF_LEGENDS = 10056,
|
||||
LANG_NO_ENTER_CHAMPIONS_HALL = 10057,
|
||||
|
||||
// Use for custom patches 11000-11999
|
||||
|
||||
|
||||
+26
-26
@@ -36,17 +36,17 @@
|
||||
|
||||
bool ChatHandler::HandleHelpCommand(const char* args)
|
||||
{
|
||||
char* cmd = strtok((char*)args, " ");
|
||||
char* cmd = strtok((char*)args, " ");
|
||||
if(!cmd)
|
||||
{
|
||||
ShowHelpForCommand(getCommandTable(), "help");
|
||||
ShowHelpForCommand(getCommandTable(), "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!ShowHelpForCommand(getCommandTable(), cmd))
|
||||
SendSysMessage(LANG_NO_HELP_CMD);
|
||||
}
|
||||
{
|
||||
ShowHelpForCommand(getCommandTable(), "help");
|
||||
ShowHelpForCommand(getCommandTable(), "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!ShowHelpForCommand(getCommandTable(), cmd))
|
||||
SendSysMessage(LANG_NO_HELP_CMD);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -163,8 +163,8 @@ bool ChatHandler::HandleGMListIngameCommand(const char* /*args*/)
|
||||
for(; itr != m.end(); ++itr)
|
||||
{
|
||||
if (itr->second->GetSession()->GetSecurity() &&
|
||||
(itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST)) &&
|
||||
(!m_session || itr->second->IsVisibleGloballyFor(m_session->GetPlayer())) )
|
||||
(itr->second->isGameMaster() || sWorld.getConfig(CONFIG_GM_IN_GM_LIST)) &&
|
||||
(!m_session || itr->second->IsVisibleGloballyFor(m_session->GetPlayer())) )
|
||||
{
|
||||
if(first)
|
||||
{
|
||||
@@ -201,14 +201,14 @@ bool ChatHandler::HandlePasswordCommand(const char* args)
|
||||
if (strcmp(new_pass, new_pass_c) != 0)
|
||||
{
|
||||
SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH);
|
||||
SetSentErrorMessage (true);
|
||||
return false;
|
||||
}
|
||||
SetSentErrorMessage (true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!accmgr.CheckPassword (m_session->GetAccountId(), password_old))
|
||||
{
|
||||
SendSysMessage (LANG_COMMAND_WRONGOLDPASSWORD);
|
||||
SetSentErrorMessage (true);
|
||||
if (!accmgr.CheckPassword (m_session->GetAccountId(), password_old))
|
||||
{
|
||||
SendSysMessage (LANG_COMMAND_WRONGOLDPASSWORD);
|
||||
SetSentErrorMessage (true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -219,11 +219,11 @@ bool ChatHandler::HandlePasswordCommand(const char* args)
|
||||
case AOR_OK:
|
||||
SendSysMessage(LANG_COMMAND_PASSWORD);
|
||||
break;
|
||||
case AOR_PASS_TOO_LONG:
|
||||
SendSysMessage(LANG_PASSWORD_TOO_LONG);
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
case AOR_NAME_NOT_EXIST: // not possible case, don't want get account name for output
|
||||
case AOR_PASS_TOO_LONG:
|
||||
SendSysMessage(LANG_PASSWORD_TOO_LONG);
|
||||
SetSentErrorMessage(true);
|
||||
return false;
|
||||
case AOR_NAME_NOT_EXIST: // not possible case, don't want get account name for output
|
||||
default:
|
||||
SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD);
|
||||
SetSentErrorMessage(true);
|
||||
@@ -263,6 +263,6 @@ bool ChatHandler::HandleLockAccountCommand(const char* args)
|
||||
/// Display the 'Message of the day' for the realm
|
||||
bool ChatHandler::HandleServerMotdCommand(const char* /*args*/)
|
||||
{
|
||||
PSendSysMessage(LANG_MOTD_CURRENT, sWorld.GetMotd());
|
||||
return true;
|
||||
PSendSysMessage(LANG_MOTD_CURRENT, sWorld.GetMotd());
|
||||
return true;
|
||||
}
|
||||
|
||||
+213
-213
@@ -282,345 +282,345 @@ std::string ChatHandler::PGetParseString(int32 entry, ...)
|
||||
}
|
||||
bool ChatHandler::HandleGMTicketListCommand(const char* args)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWLIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed != 0)
|
||||
continue;
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWLIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed != 0)
|
||||
continue;
|
||||
std::string gmname;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, (*itr)->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, (*itr)->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(time(NULL) - (*itr)->timestamp, true, false)).c_str());
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
SendSysMessage(ss.str().c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed != 0 || !objmgr.GetPlayer((*itr)->playerGuid))
|
||||
continue;
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed != 0 || !objmgr.GetPlayer((*itr)->playerGuid))
|
||||
continue;
|
||||
|
||||
std::string gmname;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, (*itr)->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, (*itr)->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(time(NULL) - (*itr)->timestamp, true, false)).c_str());
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
SendSysMessage(ss.str().c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketListClosedCommand(const char* args)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWCLOSEDLIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed == 0)
|
||||
continue;
|
||||
SendSysMessage(LANG_COMMAND_TICKETSHOWCLOSEDLIST);
|
||||
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
|
||||
{
|
||||
if((*itr)->closed == 0)
|
||||
continue;
|
||||
|
||||
std::string gmname;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, (*itr)->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, (*itr)->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(time(NULL) - (*itr)->timestamp, true, false)).c_str());
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID((*itr)->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
SendSysMessage(ss.str().c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketGetByIdCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
uint64 tguid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
uint64 tguid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string gmname;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(time(NULL) - ticket->timestamp, true, false)).c_str());
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTMESSAGE, ticket->message.c_str());
|
||||
if(ticket->comment != "")
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTCOMMENT, ticket->comment.c_str());
|
||||
}
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTMESSAGE, ticket->message.c_str());
|
||||
if(ticket->comment != "")
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTCOMMENT, ticket->comment.c_str());
|
||||
}
|
||||
SendSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByName(args);
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByName(args);
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string gmname;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(time(NULL) - ticket->timestamp, true, false)).c_str());
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTMESSAGE, ticket->message.c_str());
|
||||
if(ticket->comment != "")
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTCOMMENT, ticket->comment.c_str());
|
||||
}
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTMESSAGE, ticket->message.c_str());
|
||||
if(ticket->comment != "")
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTCOMMENT, ticket->comment.c_str());
|
||||
}
|
||||
SendSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
uint64 tguid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket && ticket->assignedToGM != 0 && ticket->assignedToGM != m_session->GetPlayer()->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
std::stringstream ss;
|
||||
uint64 tguid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket && ticket->assignedToGM != 0 && ticket->assignedToGM != m_session->GetPlayer()->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETCLOSED, m_session->GetPlayer()->GetName());
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
ticketmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID());
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
ticketmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID());
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
|
||||
if(!plr || !plr->IsInWorld())
|
||||
return true;
|
||||
if(!plr || !plr->IsInWorld())
|
||||
return true;
|
||||
|
||||
// send abandon ticket
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
plr->GetSession()->SendPacket( &data );
|
||||
return true;
|
||||
// send abandon ticket
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
plr->GetSession()->SendPacket( &data );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
char* tguid = strtok((char*)args, " ");
|
||||
uint64 ticketGuid = atoi(tguid);
|
||||
char* targetgm = strtok( NULL, " ");
|
||||
char* tguid = strtok((char*)args, " ");
|
||||
uint64 ticketGuid = atoi(tguid);
|
||||
char* targetgm = strtok( NULL, " ");
|
||||
|
||||
if(!targetgm)
|
||||
return false;
|
||||
if(!targetgm)
|
||||
return false;
|
||||
|
||||
std::string targm = targetgm;
|
||||
std::string targm = targetgm;
|
||||
|
||||
if(!normalizePlayerName(targm))
|
||||
return true;
|
||||
if(!normalizePlayerName(targm))
|
||||
return true;
|
||||
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
std::string gmname;
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
std::string gmname;
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
uint64 tarGUID = objmgr.GetPlayerGUIDByName(targm.c_str());
|
||||
uint64 accid = objmgr.GetPlayerAccountIdByGUID(tarGUID);
|
||||
QueryResult *result = LoginDatabase.PQuery("SELECT `gmlevel` FROM `account` WHERE `id` = '%u'", accid);
|
||||
if(!tarGUID|| !result || result->Fetch()->GetUInt32() < SEC_MODERATOR)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM == tarGUID)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
objmgr.GetPlayerNameByGUID(tarGUID, gmname);
|
||||
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid, gmname.c_str());
|
||||
return true;
|
||||
}
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
uint64 tarGUID = objmgr.GetPlayerGUIDByName(targm.c_str());
|
||||
uint64 accid = objmgr.GetPlayerAccountIdByGUID(tarGUID);
|
||||
QueryResult *result = LoginDatabase.PQuery("SELECT `gmlevel` FROM `account` WHERE `id` = '%u'", accid);
|
||||
if(!tarGUID|| !result || result->Fetch()->GetUInt32() < SEC_MODERATOR)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM == tarGUID)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
objmgr.GetPlayerNameByGUID(tarGUID, gmname);
|
||||
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid, gmname.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
ticket->assignedToGM = tarGUID;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
std::stringstream ss;
|
||||
ticket->assignedToGM = tarGUID;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
uint64 ticketGuid = atoi(args);
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
uint64 ticketGuid = atoi(args);
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket|| ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM == 0)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
if(!ticket|| ticket->closed != 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM == 0)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string gmname;
|
||||
objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname);
|
||||
Player *plr = objmgr.GetPlayer(ticket->assignedToGM);
|
||||
if(plr && plr->IsInWorld() && plr->GetSession()->GetSecurity() > cplr->GetSession()->GetSecurity())
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY);
|
||||
return true;
|
||||
}
|
||||
std::string gmname;
|
||||
objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname);
|
||||
Player *plr = objmgr.GetPlayer(ticket->assignedToGM);
|
||||
if(plr && plr->IsInWorld() && plr->GetSession()->GetSecurity() > cplr->GetSession()->GetSecurity())
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::stringstream ss;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTUNASSIGNED, cplr->GetName());
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
ticket->assignedToGM = 0;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
return true;
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
ticket->assignedToGM = 0;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
if(!*args)
|
||||
return false;
|
||||
|
||||
char* tguid = strtok((char*)args, " ");
|
||||
uint64 ticketGuid = atoi(tguid);
|
||||
char* comment = strtok( NULL, "\n");
|
||||
char* tguid = strtok((char*)args, " ");
|
||||
uint64 ticketGuid = atoi(tguid);
|
||||
char* comment = strtok( NULL, "\n");
|
||||
|
||||
if(!comment)
|
||||
return false;
|
||||
if(!comment)
|
||||
return false;
|
||||
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
Player *cplr = m_session->GetPlayer();
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
if(!ticket || ticket->closed != 0)
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
|
||||
{
|
||||
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string gmname;
|
||||
objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname);
|
||||
ticket->comment = comment;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
std::stringstream ss;
|
||||
std::string gmname;
|
||||
objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname);
|
||||
ticket->comment = comment;
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
if(objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname))
|
||||
{
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, gmname.c_str());
|
||||
}
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, cplr->GetName(), ticket->comment.c_str());
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
|
||||
{
|
||||
if(!*args)
|
||||
return false;
|
||||
uint64 ticketGuid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
if(!*args)
|
||||
return false;
|
||||
uint64 ticketGuid = atoi(args);
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
|
||||
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->closed == 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST);
|
||||
return true;
|
||||
}
|
||||
if(!ticket)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||
return true;
|
||||
}
|
||||
if(ticket->closed == 0)
|
||||
{
|
||||
SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::stringstream ss;
|
||||
std::stringstream ss;
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
|
||||
ss << PGetParseString(LANG_COMMAND_TICKETDELETED, m_session->GetPlayer()->GetName());
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
ticketmgr.DeleteGMTicketPermanently(ticket->guid);
|
||||
if(plr && plr->IsInWorld())
|
||||
{
|
||||
// Force abandon ticket
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
plr->GetSession()->SendPacket( &data );
|
||||
}
|
||||
SendGlobalGMSysMessage(ss.str().c_str());
|
||||
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
|
||||
ticketmgr.DeleteGMTicketPermanently(ticket->guid);
|
||||
if(plr && plr->IsInWorld())
|
||||
{
|
||||
// Force abandon ticket
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
plr->GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
||||
ticket = NULL;
|
||||
return true;
|
||||
ticket = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleGMTicketReloadCommand(const char*)
|
||||
{
|
||||
ticketmgr.LoadGMTickets();
|
||||
return true;
|
||||
ticketmgr.LoadGMTickets();
|
||||
return true;
|
||||
}
|
||||
|
||||
//Enable\Dissable Invisible mode
|
||||
@@ -638,7 +638,7 @@ bool ChatHandler::HandleVisibleCommand(const char* args)
|
||||
{
|
||||
m_session->GetPlayer()->SetGMVisible(true);
|
||||
m_session->SendNotification(LANG_INVISIBLE_VISIBLE);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (argstr == "off")
|
||||
|
||||
+539
-539
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -501,7 +501,7 @@ bool ChatHandler::HandleReloadAllScriptsCommand(const char*)
|
||||
SendGlobalGMSysMessage("DB tables `*_scripts` reloaded.");
|
||||
HandleReloadDbScriptStringCommand("a");
|
||||
HandleReloadWpScriptsCommand("a");
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ChatHandler::HandleReloadAllSpellCommand(const char*)
|
||||
@@ -951,9 +951,9 @@ bool ChatHandler::HandleReloadWpScriptsCommand(const char* arg)
|
||||
if(*arg!='a')
|
||||
sLog.outString( "Re-Loading Scripts from `waypoint_scripts`...");
|
||||
|
||||
objmgr.LoadWaypointScripts();
|
||||
objmgr.LoadWaypointScripts();
|
||||
|
||||
if(*arg!='a')
|
||||
if(*arg!='a')
|
||||
SendGlobalGMSysMessage("DB table `waypoint_scripts` reloaded.");
|
||||
|
||||
return true;
|
||||
|
||||
+16
-16
@@ -1271,22 +1271,22 @@ float Map::GetHeight(float x, float y, float z, bool pUseVmaps) const
|
||||
|
||||
float Map::GetVmapHeight(float x, float y, float z, bool useMaps) const
|
||||
{
|
||||
float mapHeight;
|
||||
float vmapHeight;
|
||||
if (useMaps)
|
||||
{
|
||||
mapHeight = GetHeight(x, y, z, false);
|
||||
if (fabs(mapHeight - z) < 0.1)
|
||||
return mapHeight;
|
||||
}
|
||||
else
|
||||
mapHeight = INVALID_HEIGHT;
|
||||
VMAP::IVMapManager* vmgr = VMAP::VMapFactory::createOrGetVMapManager();
|
||||
if (vmgr->isLineOfSightCalcEnabled())
|
||||
bool result = vmgr->getObjectHitPos(GetId(), x, y, z + 2.0f, x, y, mapHeight, x, y, vmapHeight, 0);
|
||||
else
|
||||
return INVALID_HEIGHT;
|
||||
return vmapHeight;
|
||||
float mapHeight;
|
||||
float vmapHeight;
|
||||
if (useMaps)
|
||||
{
|
||||
mapHeight = GetHeight(x, y, z, false);
|
||||
if (fabs(mapHeight - z) < 0.1)
|
||||
return mapHeight;
|
||||
}
|
||||
else
|
||||
mapHeight = INVALID_HEIGHT;
|
||||
VMAP::IVMapManager* vmgr = VMAP::VMapFactory::createOrGetVMapManager();
|
||||
if (vmgr->isLineOfSightCalcEnabled())
|
||||
bool result = vmgr->getObjectHitPos(GetId(), x, y, z + 2.0f, x, y, mapHeight, x, y, vmapHeight, 0);
|
||||
else
|
||||
return INVALID_HEIGHT;
|
||||
return vmapHeight;
|
||||
}
|
||||
|
||||
uint16 Map::GetAreaFlag(float x, float y, float z) const
|
||||
|
||||
@@ -862,7 +862,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
|
||||
missingItem = at->requiredItem2;
|
||||
|
||||
uint32 missingKey = 0;
|
||||
uint32 missingHeroicQuest = 0;
|
||||
uint32 missingHeroicQuest = 0;
|
||||
if(GetPlayer()->GetDifficulty() == DIFFICULTY_HEROIC)
|
||||
{
|
||||
if(at->heroicKey)
|
||||
@@ -874,7 +874,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
|
||||
else if(at->heroicKey2 && !GetPlayer()->HasItemCount(at->heroicKey2, 1))
|
||||
missingKey = at->heroicKey2;
|
||||
|
||||
if(at->heroicQuest && !GetPlayer()->GetQuestRewardStatus(at->heroicQuest))
|
||||
if(at->heroicQuest && !GetPlayer()->GetQuestRewardStatus(at->heroicQuest))
|
||||
missingHeroicQuest = at->heroicQuest;
|
||||
}
|
||||
|
||||
@@ -889,7 +889,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
|
||||
SendAreaTriggerMessage(GetTrinityString(LANG_LEVEL_MINREQUIRED_AND_ITEM), at->requiredLevel, objmgr.GetItemPrototype(missingItem)->Name1);
|
||||
else if(missingKey)
|
||||
GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY, DIFFICULTY_HEROIC);
|
||||
else if(missingHeroicQuest)
|
||||
else if(missingHeroicQuest)
|
||||
SendAreaTriggerMessage(at->heroicQuestFailedText.c_str());
|
||||
else if(missingQuest)
|
||||
SendAreaTriggerMessage(at->requiredFailedText.c_str());
|
||||
|
||||
+11
-11
@@ -178,7 +178,7 @@ void MotionMaster::MoveIdle(MovementSlot slot)
|
||||
void
|
||||
MotionMaster::MoveRandom(float spawndist)
|
||||
{
|
||||
if(i_owner->GetTypeId()==TYPEID_UNIT)
|
||||
if(i_owner->GetTypeId()==TYPEID_UNIT)
|
||||
{
|
||||
DEBUG_LOG("Creature (GUID: %u) start moving random", i_owner->GetGUIDLow() );
|
||||
Mutate(new RandomMovementGenerator<Creature>(spawndist), MOTION_SLOT_IDLE);
|
||||
@@ -402,10 +402,10 @@ void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot)
|
||||
|
||||
void MotionMaster::MovePath(uint32 path_id, bool repeatable)
|
||||
{
|
||||
if(!path_id)
|
||||
return;
|
||||
//We set waypoint movement as new default movement generator
|
||||
// clear ALL movement generators (including default)
|
||||
if(!path_id)
|
||||
return;
|
||||
//We set waypoint movement as new default movement generator
|
||||
// clear ALL movement generators (including default)
|
||||
/*while(!empty())
|
||||
{
|
||||
MovementGenerator *curr = top();
|
||||
@@ -415,13 +415,13 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
|
||||
delete curr;
|
||||
}*/
|
||||
|
||||
//i_owner->GetTypeId()==TYPEID_PLAYER ?
|
||||
//Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
|
||||
Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable), MOTION_SLOT_IDLE);
|
||||
//i_owner->GetTypeId()==TYPEID_PLAYER ?
|
||||
//Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
|
||||
Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable), MOTION_SLOT_IDLE);
|
||||
|
||||
DEBUG_LOG("%s (GUID: %u) start moving over path(Id:%u, repeatable: %s)",
|
||||
i_owner->GetTypeId()==TYPEID_PLAYER ? "Player" : "Creature",
|
||||
i_owner->GetGUIDLow(), path_id, repeatable ? "YES" : "NO" );
|
||||
DEBUG_LOG("%s (GUID: %u) start moving over path(Id:%u, repeatable: %s)",
|
||||
i_owner->GetTypeId()==TYPEID_PLAYER ? "Player" : "Creature",
|
||||
i_owner->GetGUIDLow(), path_id, repeatable ? "YES" : "NO" );
|
||||
}
|
||||
|
||||
void MotionMaster::propagateSpeedChange()
|
||||
|
||||
@@ -123,7 +123,7 @@ class TRINITY_DLL_SPEC MotionMaster //: private std::stack<MovementGenerator *>
|
||||
void MoveIdle(MovementSlot slot = MOTION_SLOT_ACTIVE);
|
||||
void MoveTargetedHome();
|
||||
void MoveRandom(float spawndist = 0.0f);
|
||||
void MoveFollow(Unit* target, float dist, float angle);
|
||||
void MoveFollow(Unit* target, float dist, float angle);
|
||||
void MoveChase(Unit* target, float dist = 0.0f, float angle = 0.0f);
|
||||
void MoveConfused();
|
||||
void MoveFleeing(Unit* enemy);
|
||||
@@ -131,7 +131,7 @@ class TRINITY_DLL_SPEC MotionMaster //: private std::stack<MovementGenerator *>
|
||||
void MoveCharge(float x, float y, float z);
|
||||
void MoveTaxiFlight(uint32 path, uint32 pathnode);
|
||||
void MoveDistract(uint32 time);
|
||||
void MovePath(uint32 path_id, bool repeatable);
|
||||
void MovePath(uint32 path_id, bool repeatable);
|
||||
|
||||
MovementGeneratorType GetCurrentMovementGeneratorType() const;
|
||||
|
||||
|
||||
+4
-4
@@ -1629,8 +1629,8 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pCreature->SetHomePosition(x, y, z, ang);
|
||||
pCreature->Summon(spwtype, despwtime);
|
||||
pCreature->SetHomePosition(x, y, z, ang);
|
||||
pCreature->Summon(spwtype, despwtime);
|
||||
|
||||
if(GetTypeId()==TYPEID_UNIT && ((Creature*)this)->AI())
|
||||
((Creature*)this)->AI()->JustSummoned(pCreature);
|
||||
@@ -1703,9 +1703,9 @@ void WorldObject::GetNearPoint(WorldObject const* searcher, float &x, float &y,
|
||||
{
|
||||
GetNearPoint2D(x,y,distance2d+searcher_size,absAngle);
|
||||
|
||||
z = GetPositionZ();
|
||||
z = GetPositionZ();
|
||||
|
||||
UpdateGroundPositionZ(x,y,z);
|
||||
UpdateGroundPositionZ(x,y,z);
|
||||
}
|
||||
|
||||
void WorldObject::GetGroundPoint(float &x, float &y, float &z, float dist, float angle)
|
||||
|
||||
+11
-11
@@ -5396,9 +5396,9 @@ void ObjectMgr::LoadAreaTriggerTeleports()
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, heroic_required_quest_done, heroic_required_failed_quest_text, required_quest_done, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport");
|
||||
if( !result )
|
||||
if( !result )
|
||||
{
|
||||
|
||||
barGoLink bar( 1 );
|
||||
@@ -5485,14 +5485,14 @@ void ObjectMgr::LoadAreaTriggerTeleports()
|
||||
}
|
||||
}
|
||||
|
||||
if(at.heroicQuest)
|
||||
{
|
||||
if(!mQuestTemplates[at.heroicQuest])
|
||||
{
|
||||
sLog.outErrorDb("Required Heroic Quest %u not exist for trigger %u, remove heroic quest done requirement.",at.heroicQuest,Trigger_ID);
|
||||
at.heroicQuest = 0;
|
||||
}
|
||||
}
|
||||
if(at.heroicQuest)
|
||||
{
|
||||
if(!mQuestTemplates[at.heroicQuest])
|
||||
{
|
||||
sLog.outErrorDb("Required Heroic Quest %u not exist for trigger %u, remove heroic quest done requirement.",at.heroicQuest,Trigger_ID);
|
||||
at.heroicQuest = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(at.requiredQuest)
|
||||
{
|
||||
@@ -7937,4 +7937,4 @@ void ObjectMgr::LoadTransportEvents()
|
||||
sLog.outString( "\n>> Loaded %u transport events \n", result->GetRowCount() );
|
||||
|
||||
delete result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ struct AreaTrigger
|
||||
uint32 requiredItem2;
|
||||
uint32 heroicKey;
|
||||
uint32 heroicKey2;
|
||||
uint32 heroicQuest;
|
||||
uint32 heroicQuest;
|
||||
std::string heroicQuestFailedText;
|
||||
uint32 requiredQuest;
|
||||
std::string requiredFailedText;
|
||||
@@ -323,9 +323,9 @@ class ObjectMgr
|
||||
|
||||
typedef std::vector<std::string> ScriptNameMap;
|
||||
|
||||
UNORDERED_MAP<uint32, uint32> TransportEventMap;
|
||||
UNORDERED_MAP<uint32, uint32> TransportEventMap;
|
||||
|
||||
Player* GetPlayer(const char* name) const { return ObjectAccessor::Instance().FindPlayerByName(name);}
|
||||
Player* GetPlayer(const char* name) const { return ObjectAccessor::Instance().FindPlayerByName(name);}
|
||||
Player* GetPlayer(uint64 guid) const { return ObjectAccessor::FindPlayer(guid); }
|
||||
|
||||
static GameObjectInfo const *GetGameObjectInfo(uint32 id) { return sGOStorage.LookupEntry<GameObjectInfo>(id); }
|
||||
@@ -529,13 +529,13 @@ class ObjectMgr
|
||||
void LoadQuestStartScripts();
|
||||
void LoadEventScripts();
|
||||
void LoadSpellScripts();
|
||||
void LoadWaypointScripts();
|
||||
void LoadWaypointScripts();
|
||||
|
||||
void LoadTransportEvents();
|
||||
void LoadTransportEvents();
|
||||
|
||||
bool LoadTrinityStrings(DatabaseType& db, char const* table, int32 min_value, int32 max_value);
|
||||
bool LoadTrinityStrings() { return LoadTrinityStrings(WorldDatabase,"trinity_string",MIN_TRINITY_STRING_ID,MAX_TRINITY_STRING_ID); }
|
||||
void LoadDbScriptStrings();
|
||||
void LoadDbScriptStrings();
|
||||
void LoadPetCreateSpells();
|
||||
void LoadCreatureLocales();
|
||||
void LoadCreatureTemplates();
|
||||
@@ -707,7 +707,7 @@ class ObjectMgr
|
||||
}
|
||||
const char *GetTrinityString(int32 entry, int locale_idx) const;
|
||||
const char *GetTrinityStringForDBCLocale(int32 entry) const { return GetTrinityString(entry,DBCLocaleIndex); }
|
||||
int32 GetDBCLocaleIndex() const { return DBCLocaleIndex; }
|
||||
int32 GetDBCLocaleIndex() const { return DBCLocaleIndex; }
|
||||
void SetDBCLocaleIndex(uint32 lang) { DBCLocaleIndex = GetIndexForLocale(LocaleConstant(lang)); }
|
||||
|
||||
void AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance);
|
||||
|
||||
@@ -547,7 +547,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||
/*0x204*/ { "CMSG_DECHARGE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x205*/ { "CMSG_GMTICKET_CREATE", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketCreateOpcode },
|
||||
/*0x206*/ { "SMSG_GMTICKET_CREATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateOpcode },
|
||||
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateOpcode },
|
||||
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_LOGGEDIN, &WorldSession::HandleRequestAccountData },
|
||||
|
||||
+6
-6
@@ -1578,15 +1578,15 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
|
||||
if(!InBattleGround() && mEntry->IsBattleGroundOrArena())
|
||||
return false;
|
||||
|
||||
// 449 - Champions' Hall (Alliance) // 450 - Hall of Legends (Horde)
|
||||
if(mapid == 449 && GetTeam()==HORDE)
|
||||
// 449 - Champions' Hall (Alliance) // 450 - Hall of Legends (Horde)
|
||||
if(mapid == 449 && GetTeam()==HORDE)
|
||||
{
|
||||
GetSession()->SendNotification(LANG_NO_ENTER_CHAMPIONS_HALL);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(mapid == 450 && GetTeam() == ALLIANCE)
|
||||
{
|
||||
if(mapid == 450 && GetTeam() == ALLIANCE)
|
||||
{
|
||||
GetSession()->SendNotification(LANG_NO_ENTER_HALL_OF_LEGENDS);
|
||||
return false;
|
||||
}
|
||||
@@ -16079,8 +16079,8 @@ void Player::SaveToDB()
|
||||
ss << ", '";
|
||||
ss << m_taxi.SaveTaxiDestinationsToString();
|
||||
|
||||
ss << "', '0', ";
|
||||
ss << GetSession()->GetLatency();
|
||||
ss << "', '0', ";
|
||||
ss << GetSession()->GetLatency();
|
||||
ss << ", ";
|
||||
ss << GetBattleGroundId();
|
||||
ss << ", ";
|
||||
|
||||
@@ -75,11 +75,11 @@ enum DumpTableType
|
||||
|
||||
enum DumpReturn
|
||||
{
|
||||
DUMP_SUCCESS,
|
||||
DUMP_FILE_OPEN_ERROR,
|
||||
DUMP_TOO_MANY_CHARS,
|
||||
DUMP_UNEXPECTED_END,
|
||||
DUMP_FILE_BROKEN,
|
||||
DUMP_SUCCESS,
|
||||
DUMP_FILE_OPEN_ERROR,
|
||||
DUMP_TOO_MANY_CHARS,
|
||||
DUMP_UNEXPECTED_END,
|
||||
DUMP_FILE_BROKEN,
|
||||
};
|
||||
|
||||
class PlayerDump
|
||||
|
||||
@@ -123,9 +123,9 @@ RandomMovementGenerator<Creature>::Initialize(Creature &creature)
|
||||
if(!creature.isAlive())
|
||||
return;
|
||||
|
||||
wander_distance = creature.GetRespawnRadius();
|
||||
wander_distance = creature.GetRespawnRadius();
|
||||
|
||||
if (creature.canFly())
|
||||
if (creature.canFly())
|
||||
creature.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2);
|
||||
else
|
||||
creature.SetUnitMovementFlags(irand(0,RUNNING_CHANCE_RANDOMMV) > 0 ? MOVEMENTFLAG_WALK_MODE : MOVEMENTFLAG_NONE );
|
||||
|
||||
@@ -30,16 +30,16 @@ class TRINITY_DLL_SPEC RandomMovementGenerator
|
||||
: public MovementGeneratorMedium< T, RandomMovementGenerator<T> >
|
||||
{
|
||||
public:
|
||||
// Wander dist is related on db spawn dist. So what if we wanna set eandom movement on summoned creature?!
|
||||
RandomMovementGenerator(float spawn_dist = 0.0f) : i_nextMoveTime(0), wander_distance(spawn_dist) {}
|
||||
// Wander dist is related on db spawn dist. So what if we wanna set eandom movement on summoned creature?!
|
||||
RandomMovementGenerator(float spawn_dist = 0.0f) : i_nextMoveTime(0), wander_distance(spawn_dist) {}
|
||||
|
||||
void _setRandomLocation(T &);
|
||||
void _setRandomLocation(T &);
|
||||
void Initialize(T &);
|
||||
void Finalize(T &);
|
||||
void Reset(T &);
|
||||
bool Update(T &, const uint32 &);
|
||||
bool GetDestination(float &x, float &y, float &z) const;
|
||||
void UpdateMapPosition(uint32 mapid, float &x ,float &y, float &z)
|
||||
void UpdateMapPosition(uint32 mapid, float &x ,float &y, float &z)
|
||||
{
|
||||
i_destinationHolder.GetLocationNow(mapid, x,y,z);
|
||||
}
|
||||
@@ -49,6 +49,6 @@ class TRINITY_DLL_SPEC RandomMovementGenerator
|
||||
|
||||
DestinationHolder< Traveller<T> > i_destinationHolder;
|
||||
float wander_distance;
|
||||
uint32 i_nextMove;
|
||||
uint32 i_nextMove;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -58,7 +58,7 @@ bool LoadScriptingModule(char const* libName)
|
||||
|
||||
if( !(testScript->ScriptsInit =(scriptCallScriptsInit )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsInit" ))
|
||||
||!(testScript->ScriptsFree =(scriptCallScriptsFree )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsFree" ))
|
||||
||!(testScript->ScriptsVersion =(scriptCallScriptsVersion )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsVersion" ))
|
||||
||!(testScript->ScriptsVersion =(scriptCallScriptsVersion )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"ScriptsVersion" ))
|
||||
||!(testScript->GossipHello =(scriptCallGossipHello )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"GossipHello" ))
|
||||
||!(testScript->GOChooseReward =(scriptCallGOChooseReward )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"GOChooseReward" ))
|
||||
||!(testScript->QuestAccept =(scriptCallQuestAccept )TRINITY_GET_PROC_ADDR(testScript->hScriptsLib,"QuestAccept" ))
|
||||
@@ -96,7 +96,7 @@ bool LoadScriptingModule(char const* libName)
|
||||
Script=testScript;
|
||||
Script->ScriptsInit();
|
||||
|
||||
sWorld.SetScriptsVersion(Script->ScriptsVersion());
|
||||
sWorld.SetScriptsVersion(Script->ScriptsVersion());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ typedef struct
|
||||
{
|
||||
scriptCallScriptsInit ScriptsInit;
|
||||
scriptCallScriptsFree ScriptsFree;
|
||||
scriptCallScriptsVersion ScriptsVersion;
|
||||
scriptCallScriptsVersion ScriptsVersion;
|
||||
|
||||
scriptCallGossipHello GossipHello;
|
||||
scriptCallGOChooseReward GOChooseReward;
|
||||
|
||||
@@ -2280,17 +2280,17 @@ enum ResponseCodes
|
||||
/// Ban function modes
|
||||
enum BanMode
|
||||
{
|
||||
BAN_ACCOUNT,
|
||||
BAN_CHARACTER,
|
||||
BAN_IP
|
||||
BAN_ACCOUNT,
|
||||
BAN_CHARACTER,
|
||||
BAN_IP
|
||||
};
|
||||
|
||||
/// Ban function return codes
|
||||
enum BanReturn
|
||||
{
|
||||
BAN_SUCCESS,
|
||||
BAN_SYNTAX_ERROR,
|
||||
BAN_NOTFOUND
|
||||
BAN_SUCCESS,
|
||||
BAN_SYNTAX_ERROR,
|
||||
BAN_NOTFOUND
|
||||
};
|
||||
|
||||
// indexes of BattlemasterList.dbc
|
||||
|
||||
@@ -3517,8 +3517,8 @@ void Spell::EffectDispel(uint32 i)
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(j->first);
|
||||
data << uint32(spellInfo->Id); // Spell Id
|
||||
data << uint8(0); // 0 - dispelled !=0 cleansed
|
||||
//Why are Aura's Removed by EffIndex? Auras should be removed as a whole.....
|
||||
unitTarget->RemoveAurasDueToSpellByDispel(spellInfo->Id, j->second, m_caster);
|
||||
//Why are Aura's Removed by EffIndex? Auras should be removed as a whole.....
|
||||
unitTarget->RemoveAurasDueToSpellByDispel(spellInfo->Id, j->second, m_caster);
|
||||
}
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
|
||||
|
||||
+17
-17
@@ -328,27 +328,27 @@ void WorldSession::HandleCancelAuraOpcode( WorldPacket& recvPacket)
|
||||
if(!IsPositiveSpell(spellId) || (spellInfo->Attributes & SPELL_ATTR_CANT_CANCEL))
|
||||
return;
|
||||
|
||||
// lifebloom must delete final heal effect
|
||||
if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && (spellInfo->SpellFamilyFlags[1] & 0x10) )
|
||||
{
|
||||
Unit::AuraMap::iterator iter;
|
||||
while((iter = _player->m_Auras.find(Unit::spellEffectPair(spellId, 1))) != _player->m_Auras.end())
|
||||
{
|
||||
_player->m_modAuras[SPELL_AURA_DUMMY].remove(iter->second);
|
||||
// lifebloom must delete final heal effect
|
||||
if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && (spellInfo->SpellFamilyFlags[1] & 0x10) )
|
||||
{
|
||||
Unit::AuraMap::iterator iter;
|
||||
while((iter = _player->m_Auras.find(Unit::spellEffectPair(spellId, 1))) != _player->m_Auras.end())
|
||||
{
|
||||
_player->m_modAuras[SPELL_AURA_DUMMY].remove(iter->second);
|
||||
|
||||
Aura* Aur = iter->second;
|
||||
_player->m_Auras.erase(iter);
|
||||
++_player->m_removedAuras; // internal count used by unit update
|
||||
Aura* Aur = iter->second;
|
||||
_player->m_Auras.erase(iter);
|
||||
++_player->m_removedAuras; // internal count used by unit update
|
||||
|
||||
delete Aur;
|
||||
delete Aur;
|
||||
|
||||
if( _player->m_Auras.empty() )
|
||||
iter = _player->m_Auras.end();
|
||||
else
|
||||
iter = _player->m_Auras.begin();
|
||||
if( _player->m_Auras.empty() )
|
||||
iter = _player->m_Auras.end();
|
||||
else
|
||||
iter = _player->m_Auras.begin();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// channeled spell case (it currently casted then)
|
||||
if(IsChanneledSpell(spellInfo))
|
||||
|
||||
+17
-17
@@ -2264,29 +2264,29 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
break;
|
||||
case 41376: // Spite
|
||||
case 39992: // Needle Spine
|
||||
case 29576: //Multi-Shot
|
||||
case 40816: //Saber Lash
|
||||
case 37790: //Spread Shot
|
||||
case 46771: //Flame Sear
|
||||
case 45248: //Shadow Blades
|
||||
case 29576: //Multi-Shot
|
||||
case 40816: //Saber Lash
|
||||
case 37790: //Spread Shot
|
||||
case 46771: //Flame Sear
|
||||
case 45248: //Shadow Blades
|
||||
case 41303: // Soul Drain
|
||||
spellInfo->MaxAffectedTargets = 3;
|
||||
break;
|
||||
case 38310: //Multi-Shot
|
||||
spellInfo->MaxAffectedTargets = 4;
|
||||
break;
|
||||
case 38310: //Multi-Shot
|
||||
spellInfo->MaxAffectedTargets = 4;
|
||||
break;
|
||||
case 42005: // Bloodboil
|
||||
case 38296: //Spitfire Totem
|
||||
case 37676: //Insidious Whisper
|
||||
case 46009: //Negative Energy
|
||||
case 38296: //Spitfire Totem
|
||||
case 37676: //Insidious Whisper
|
||||
case 46009: //Negative Energy
|
||||
spellInfo->MaxAffectedTargets = 5;
|
||||
break;
|
||||
case 40827: //Sinful Beam
|
||||
case 40859: //Sinister Beam
|
||||
case 40860: //Vile Beam
|
||||
case 40861: //Wicked Beam
|
||||
spellInfo->MaxAffectedTargets = 10;
|
||||
break;
|
||||
case 40827: //Sinful Beam
|
||||
case 40859: //Sinister Beam
|
||||
case 40860: //Vile Beam
|
||||
case 40861: //Wicked Beam
|
||||
spellInfo->MaxAffectedTargets = 10;
|
||||
break;
|
||||
case 8122: case 8124: case 10888: case 10890: // Psychic Scream
|
||||
case 12494: // Frostbite
|
||||
spellInfo->Attributes |= SPELL_ATTR_BREAKABLE_BY_DAMAGE;
|
||||
|
||||
+91
-91
@@ -33,158 +33,158 @@
|
||||
|
||||
void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
|
||||
{
|
||||
// always do a packet check
|
||||
// always do a packet check
|
||||
CHECK_PACKET_SIZE(recv_data, 4*4+1+2*4);
|
||||
|
||||
uint32 map;
|
||||
uint32 map;
|
||||
float x, y, z;
|
||||
std::string ticketText = "";
|
||||
std::string ticketText2 = "";
|
||||
GM_Ticket *ticket = new GM_Ticket;
|
||||
std::string ticketText2 = "";
|
||||
GM_Ticket *ticket = new GM_Ticket;
|
||||
|
||||
WorldPacket data(SMSG_GMTICKET_CREATE, 4);
|
||||
WorldPacket data(SMSG_GMTICKET_CREATE, 4);
|
||||
|
||||
// recv Data
|
||||
//TODO: Add map coordinates to tickets.
|
||||
// recv Data
|
||||
//TODO: Add map coordinates to tickets.
|
||||
recv_data >> map;
|
||||
recv_data >> x;
|
||||
recv_data >> y;
|
||||
recv_data >> z;
|
||||
recv_data >> ticketText;
|
||||
|
||||
// get additional data, rarely used
|
||||
recv_data >> ticketText2;
|
||||
// get additional data, rarely used
|
||||
recv_data >> ticketText2;
|
||||
|
||||
// assign values
|
||||
ticket->name = GetPlayer()->GetName();
|
||||
ticket->guid = ticketmgr.GenerateTicketID();
|
||||
ticket->playerGuid = GetPlayer()->GetGUID();
|
||||
ticket->message = ticketText;
|
||||
ticket->timestamp = time(NULL);
|
||||
ticket->closed = 0;
|
||||
ticket->assignedToGM = 0;
|
||||
ticket->comment = "";
|
||||
// assign values
|
||||
ticket->name = GetPlayer()->GetName();
|
||||
ticket->guid = ticketmgr.GenerateTicketID();
|
||||
ticket->playerGuid = GetPlayer()->GetGUID();
|
||||
ticket->message = ticketText;
|
||||
ticket->timestamp = time(NULL);
|
||||
ticket->closed = 0;
|
||||
ticket->assignedToGM = 0;
|
||||
ticket->comment = "";
|
||||
|
||||
// remove ticket by player, shouldn't happen
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
|
||||
// remove ticket by player, shouldn't happen
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
|
||||
|
||||
// add ticket
|
||||
ticketmgr.AddGMTicket(ticket, false);
|
||||
// add ticket
|
||||
ticketmgr.AddGMTicket(ticket, false);
|
||||
|
||||
// Response - no errors
|
||||
data << uint32(2);
|
||||
// Response - no errors
|
||||
data << uint32(2);
|
||||
|
||||
// Send ticket creation
|
||||
SendPacket(&data);
|
||||
// Send ticket creation
|
||||
SendPacket(&data);
|
||||
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETNEW, ticket->name.c_str(), ticket->guid);
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETNEW, ticket->name.c_str(), ticket->guid);
|
||||
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data)
|
||||
{
|
||||
// always do a packet check
|
||||
CHECK_PACKET_SIZE(recv_data,1);
|
||||
// always do a packet check
|
||||
CHECK_PACKET_SIZE(recv_data,1);
|
||||
|
||||
std::string message = "";
|
||||
time_t t = time(NULL);
|
||||
std::string message = "";
|
||||
time_t t = time(NULL);
|
||||
|
||||
WorldPacket data(SMSG_GMTICKET_UPDATETEXT, 4);
|
||||
WorldPacket data(SMSG_GMTICKET_UPDATETEXT, 4);
|
||||
|
||||
// recv Data
|
||||
recv_data >> message;
|
||||
// recv Data
|
||||
recv_data >> message;
|
||||
|
||||
// Update Ticket
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
// Update Ticket
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
|
||||
// Check if player has a GM Ticket yet
|
||||
if(!ticket)
|
||||
{
|
||||
// Response - error couldnt find existing Ticket
|
||||
data << uint32(1);
|
||||
// Check if player has a GM Ticket yet
|
||||
if(!ticket)
|
||||
{
|
||||
// Response - error couldnt find existing Ticket
|
||||
data << uint32(1);
|
||||
|
||||
// Send packet
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
// Send packet
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
ticket->message = message;
|
||||
ticket->timestamp = (uint32)t;
|
||||
ticket->message = message;
|
||||
ticket->timestamp = (uint32)t;
|
||||
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
ticketmgr.UpdateGMTicket(ticket);
|
||||
|
||||
// Response - no errors
|
||||
data << uint32(2);
|
||||
// Response - no errors
|
||||
data << uint32(2);
|
||||
|
||||
// Send packet
|
||||
SendPacket(&data);
|
||||
// Send packet
|
||||
SendPacket(&data);
|
||||
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETUPDATED, GetPlayer()->GetName(), ticket->guid);
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETUPDATED, GetPlayer()->GetName(), ticket->guid);
|
||||
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/)
|
||||
{
|
||||
// NO recv_data, NO packet check size
|
||||
// NO recv_data, NO packet check size
|
||||
|
||||
GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
|
||||
// CHeck for Ticket
|
||||
if(ticket)
|
||||
{
|
||||
// Remove Tickets from Player
|
||||
// CHeck for Ticket
|
||||
if(ticket)
|
||||
{
|
||||
// Remove Tickets from Player
|
||||
|
||||
// Response - no errors
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
// Response - no errors
|
||||
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
|
||||
data << uint32(9);
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
|
||||
}
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
|
||||
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/)
|
||||
{
|
||||
// NO recv_data NO packet size check
|
||||
// NO recv_data NO packet size check
|
||||
|
||||
WorldPacket data(SMSG_GMTICKET_GETTICKET, 400);
|
||||
WorldPacket data(SMSG_GMTICKET_GETTICKET, 400);
|
||||
|
||||
// get Current Ticket
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
// get Current Ticket
|
||||
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
|
||||
|
||||
// check for existing ticket
|
||||
if(!ticket)
|
||||
{
|
||||
data << uint32(10);
|
||||
// send packet
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
// check for existing ticket
|
||||
if(!ticket)
|
||||
{
|
||||
data << uint32(10);
|
||||
// send packet
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Send current Ticket
|
||||
data << uint32(6); // unk ?
|
||||
data << ticket->message.c_str();
|
||||
// Send current Ticket
|
||||
data << uint32(6); // unk ?
|
||||
data << ticket->message.c_str();
|
||||
|
||||
SendPacket(&data);
|
||||
SendPacket(&data);
|
||||
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/)
|
||||
{
|
||||
// NO recv_data NO packet size check
|
||||
// NO recv_data NO packet size check
|
||||
|
||||
WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4);
|
||||
WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4);
|
||||
|
||||
// Response - System is working Fine
|
||||
// Response - System is working Fine
|
||||
|
||||
// No need for checks, ticket system is active
|
||||
// in case of disactivity, this should be set to (0)
|
||||
// No need for checks, ticket system is active
|
||||
// in case of disactivity, this should be set to (0)
|
||||
|
||||
data << uint32(1);
|
||||
data << uint32(1);
|
||||
|
||||
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
// Send Packet
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
+115
-115
@@ -30,179 +30,179 @@ INSTANTIATE_SINGLETON_1( TicketMgr );
|
||||
|
||||
GM_Ticket* TicketMgr::GetGMTicket(uint64 ticketGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GM_Ticket* TicketMgr::GetGMTicketByPlayer(uint64 playerGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GM_Ticket* TicketMgr::GetGMTicketByName(const char* name)
|
||||
{
|
||||
std::string pname = name;
|
||||
if(!normalizePlayerName(pname))
|
||||
return NULL;
|
||||
std::string pname = name;
|
||||
if(!normalizePlayerName(pname))
|
||||
return NULL;
|
||||
|
||||
Player *plr = objmgr.GetPlayer(pname.c_str());
|
||||
if(!plr)
|
||||
return NULL;
|
||||
Player *plr = objmgr.GetPlayer(pname.c_str());
|
||||
if(!plr)
|
||||
return NULL;
|
||||
|
||||
uint64 playerGuid = plr->GetGUID();
|
||||
uint64 playerGuid = plr->GetGUID();
|
||||
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
return (*i);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void TicketMgr::AddGMTicket(GM_Ticket *ticket, bool startup)
|
||||
{
|
||||
ASSERT( ticket );
|
||||
GM_TicketList.push_back(ticket);
|
||||
ASSERT( ticket );
|
||||
GM_TicketList.push_back(ticket);
|
||||
|
||||
// save
|
||||
if(!startup)
|
||||
SaveGMTicket(ticket);
|
||||
// save
|
||||
if(!startup)
|
||||
SaveGMTicket(ticket);
|
||||
}
|
||||
|
||||
void TicketMgr::DeleteGMTicketPermanently(uint64 ticketGuid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid)
|
||||
{
|
||||
i = GM_TicketList.erase(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
++i;
|
||||
}
|
||||
}
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid)
|
||||
{
|
||||
i = GM_TicketList.erase(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
// delete database record
|
||||
CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE guid= '%u'", ticketGuid);
|
||||
// delete database record
|
||||
CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE guid= '%u'", ticketGuid);
|
||||
}
|
||||
|
||||
|
||||
void TicketMgr::LoadGMTickets()
|
||||
{
|
||||
InitTicketID();
|
||||
// Delete all out of object holder
|
||||
GM_TicketList.clear();
|
||||
QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" );
|
||||
GM_Ticket *ticket;
|
||||
InitTicketID();
|
||||
// Delete all out of object holder
|
||||
GM_TicketList.clear();
|
||||
QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" );
|
||||
GM_Ticket *ticket;
|
||||
|
||||
if(!result)
|
||||
return;
|
||||
if(!result)
|
||||
return;
|
||||
|
||||
// Assign values from SQL to the object holder
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
ticket = new GM_Ticket;
|
||||
ticket->guid = fields[0].GetUInt64();
|
||||
ticket->playerGuid = fields[1].GetUInt64();
|
||||
ticket->name = fields[2].GetString();
|
||||
ticket->message = fields[3].GetString();
|
||||
ticket->timestamp = fields[4].GetUInt32();
|
||||
ticket->closed = fields[5].GetUInt16();
|
||||
ticket->assignedToGM = fields[6].GetUInt64();
|
||||
ticket->comment = fields[7].GetString();
|
||||
// Assign values from SQL to the object holder
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
ticket = new GM_Ticket;
|
||||
ticket->guid = fields[0].GetUInt64();
|
||||
ticket->playerGuid = fields[1].GetUInt64();
|
||||
ticket->name = fields[2].GetString();
|
||||
ticket->message = fields[3].GetString();
|
||||
ticket->timestamp = fields[4].GetUInt32();
|
||||
ticket->closed = fields[5].GetUInt16();
|
||||
ticket->assignedToGM = fields[6].GetUInt64();
|
||||
ticket->comment = fields[7].GetString();
|
||||
|
||||
AddGMTicket(ticket, true);
|
||||
AddGMTicket(ticket, true);
|
||||
|
||||
} while( result->NextRow() );
|
||||
} while( result->NextRow() );
|
||||
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETRELOAD, result->GetRowCount());
|
||||
sWorld.SendGMText(LANG_COMMAND_TICKETRELOAD, result->GetRowCount());
|
||||
|
||||
delete result;
|
||||
delete result;
|
||||
}
|
||||
|
||||
void TicketMgr::RemoveGMTicket(uint64 ticketGuid, uint64 GMguid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = GMguid;
|
||||
SaveGMTicket((*i));
|
||||
}
|
||||
++i;
|
||||
}
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->guid == ticketGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = GMguid;
|
||||
SaveGMTicket((*i));
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TicketMgr::RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid)
|
||||
{
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = GMguid;
|
||||
SaveGMTicket((*i));
|
||||
}
|
||||
++i;
|
||||
}
|
||||
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
|
||||
{
|
||||
if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
|
||||
{
|
||||
(*i)->closed = GMguid;
|
||||
SaveGMTicket((*i));
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
void TicketMgr::SaveGMTicket(GM_Ticket* ticket)
|
||||
{
|
||||
std::string msg = ticket->message;
|
||||
std::string msg = ticket->message;
|
||||
CharacterDatabase.escape_string(msg);
|
||||
std::stringstream ss;
|
||||
ss << "REPLACE INTO `gm_tickets` (`guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES('";
|
||||
ss << ticket->guid << "', '";
|
||||
ss << ticket->playerGuid << "', '";
|
||||
ss << ticket->name << "', '";
|
||||
ss << msg << "', '" ;
|
||||
ss << ticket->timestamp << "', '";
|
||||
ss << ticket->closed << "', '";
|
||||
ss << ticket->assignedToGM << "', '";
|
||||
ss << ticket->comment << "');";
|
||||
std::stringstream ss;
|
||||
ss << "REPLACE INTO `gm_tickets` (`guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES('";
|
||||
ss << ticket->guid << "', '";
|
||||
ss << ticket->playerGuid << "', '";
|
||||
ss << ticket->name << "', '";
|
||||
ss << msg << "', '" ;
|
||||
ss << ticket->timestamp << "', '";
|
||||
ss << ticket->closed << "', '";
|
||||
ss << ticket->assignedToGM << "', '";
|
||||
ss << ticket->comment << "');";
|
||||
CharacterDatabase.BeginTransaction();
|
||||
CharacterDatabase.Execute(ss.str().c_str());
|
||||
CharacterDatabase.CommitTransaction();
|
||||
CharacterDatabase.Execute(ss.str().c_str());
|
||||
CharacterDatabase.CommitTransaction();
|
||||
|
||||
}
|
||||
|
||||
void TicketMgr::UpdateGMTicket(GM_Ticket *ticket)
|
||||
{
|
||||
SaveGMTicket(ticket);
|
||||
SaveGMTicket(ticket);
|
||||
}
|
||||
|
||||
void TicketMgr::InitTicketID()
|
||||
{
|
||||
QueryResult *result = CharacterDatabase.Query("SELECT MAX(guid) FROM gm_tickets");
|
||||
if(result)
|
||||
{
|
||||
m_ticketid = result->Fetch()[0].GetUInt64();
|
||||
delete result;
|
||||
}
|
||||
QueryResult *result = CharacterDatabase.Query("SELECT MAX(guid) FROM gm_tickets");
|
||||
if(result)
|
||||
{
|
||||
m_ticketid = result->Fetch()[0].GetUInt64();
|
||||
delete result;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 TicketMgr::GenerateTicketID()
|
||||
{
|
||||
return ++m_ticketid;
|
||||
return ++m_ticketid;
|
||||
}
|
||||
|
||||
+28
-28
@@ -29,14 +29,14 @@
|
||||
|
||||
struct GM_Ticket
|
||||
{
|
||||
uint64 guid;
|
||||
uint64 playerGuid;
|
||||
std::string name;
|
||||
std::string message;
|
||||
uint64 timestamp;
|
||||
uint16 closed;
|
||||
uint64 assignedToGM;
|
||||
std::string comment;
|
||||
uint64 guid;
|
||||
uint64 playerGuid;
|
||||
std::string name;
|
||||
std::string message;
|
||||
uint64 timestamp;
|
||||
uint16 closed;
|
||||
uint64 assignedToGM;
|
||||
std::string comment;
|
||||
};
|
||||
|
||||
// Map Typedef
|
||||
@@ -44,31 +44,31 @@ typedef std::list<GM_Ticket*> GmTicketList
|
||||
|
||||
class TicketMgr
|
||||
{
|
||||
public:
|
||||
TicketMgr(){m_ticketid = 1;} //constructor
|
||||
~TicketMgr(){} //destructor
|
||||
public:
|
||||
TicketMgr(){m_ticketid = 1;} //constructor
|
||||
~TicketMgr(){} //destructor
|
||||
|
||||
// Object Holder
|
||||
GmTicketList GM_TicketList;
|
||||
// Object Holder
|
||||
GmTicketList GM_TicketList;
|
||||
|
||||
void AddGMTicket(GM_Ticket *ticket, bool startup);
|
||||
void DeleteAllRemovedGMTickets();
|
||||
void DeleteGMTicketPermanently(uint64 ticketGuid);
|
||||
void LoadGMTickets();
|
||||
void RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid);
|
||||
void RemoveGMTicket(uint64 ticketGuid, uint64 GMguid);
|
||||
void UpdateGMTicket(GM_Ticket *ticket);
|
||||
void SaveGMTicket(GM_Ticket* ticket);
|
||||
void AddGMTicket(GM_Ticket *ticket, bool startup);
|
||||
void DeleteAllRemovedGMTickets();
|
||||
void DeleteGMTicketPermanently(uint64 ticketGuid);
|
||||
void LoadGMTickets();
|
||||
void RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid);
|
||||
void RemoveGMTicket(uint64 ticketGuid, uint64 GMguid);
|
||||
void UpdateGMTicket(GM_Ticket *ticket);
|
||||
void SaveGMTicket(GM_Ticket* ticket);
|
||||
|
||||
uint64 GenerateTicketID();
|
||||
void InitTicketID();
|
||||
GM_Ticket* GetGMTicket(uint64 ticketGuid);
|
||||
GM_Ticket* GetGMTicketByPlayer(uint64 playerGuid);
|
||||
GM_Ticket* GetGMTicketByName(const char *name);
|
||||
uint64 GenerateTicketID();
|
||||
void InitTicketID();
|
||||
GM_Ticket* GetGMTicket(uint64 ticketGuid);
|
||||
GM_Ticket* GetGMTicketByPlayer(uint64 playerGuid);
|
||||
GM_Ticket* GetGMTicketByName(const char *name);
|
||||
|
||||
|
||||
protected:
|
||||
uint64 m_ticketid;
|
||||
protected:
|
||||
uint64 m_ticketid;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+28
-28
@@ -404,8 +404,8 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
|
||||
|
||||
// sLog.outString("T: %d, x: %f, y: %f, z: %f, t:%d", t, pos.x, pos.y, pos.z, teleport);
|
||||
/*
|
||||
if(keyFrames[i+1].delay > 5)
|
||||
pos.delayed = true;
|
||||
if(keyFrames[i+1].delay > 5)
|
||||
pos.delayed = true;
|
||||
*/
|
||||
//if (teleport)
|
||||
m_WayPoints[t] = pos;
|
||||
@@ -488,9 +488,9 @@ bool Transport::RemovePassenger(Player* passenger)
|
||||
|
||||
void Transport::CheckForEvent(uint32 entry, uint32 wp_id)
|
||||
{
|
||||
uint32 key = entry*100+wp_id;
|
||||
if(objmgr.TransportEventMap.find(key) != objmgr.TransportEventMap.end())
|
||||
sWorld.ScriptsStart(sEventScripts, objmgr.TransportEventMap[key], this, NULL);
|
||||
uint32 key = entry*100+wp_id;
|
||||
if(objmgr.TransportEventMap.find(key) != objmgr.TransportEventMap.end())
|
||||
sWorld.ScriptsStart(sEventScripts, objmgr.TransportEventMap[key], this, NULL);
|
||||
}
|
||||
|
||||
void Transport::Update(uint32 /*p_time*/)
|
||||
@@ -515,25 +515,25 @@ void Transport::Update(uint32 /*p_time*/)
|
||||
Relocate(m_curr->second.x, m_curr->second.y, m_curr->second.z);
|
||||
}
|
||||
/*
|
||||
if(m_curr->second.delayed)
|
||||
{
|
||||
switch (GetEntry())
|
||||
{
|
||||
case 176495:
|
||||
case 164871:
|
||||
case 175080:
|
||||
SendPlaySound(11804, false); break; // ZeppelinDocked
|
||||
case 20808:
|
||||
case 181646:
|
||||
case 176231:
|
||||
case 176244:
|
||||
case 176310:
|
||||
case 177233:
|
||||
SendPlaySound(5495, false);break; // BoatDockingWarning
|
||||
default:
|
||||
SendPlaySound(5154, false); break; // ShipDocked
|
||||
}
|
||||
}
|
||||
if(m_curr->second.delayed)
|
||||
{
|
||||
switch (GetEntry())
|
||||
{
|
||||
case 176495:
|
||||
case 164871:
|
||||
case 175080:
|
||||
SendPlaySound(11804, false); break; // ZeppelinDocked
|
||||
case 20808:
|
||||
case 181646:
|
||||
case 176231:
|
||||
case 176244:
|
||||
case 176310:
|
||||
case 177233:
|
||||
SendPlaySound(5495, false);break; // BoatDockingWarning
|
||||
default:
|
||||
SendPlaySound(5154, false); break; // ShipDocked
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
for(PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end();)
|
||||
@@ -556,8 +556,8 @@ void Transport::Update(uint32 /*p_time*/)
|
||||
if ((sLog.getLogFilter() & LOG_FILTER_TRANSPORT_MOVES)==0)
|
||||
sLog.outDetail("%s moved to %f %f %f %d", this->m_name.c_str(), m_curr->second.x, m_curr->second.y, m_curr->second.z, m_curr->second.mapid);
|
||||
|
||||
//Transport Event System
|
||||
CheckForEvent(this->GetEntry(), m_curr->second.id);
|
||||
sLog.outDetail("%s is at wp id: %u", this->m_name.c_str(), m_curr->second.id);
|
||||
}
|
||||
//Transport Event System
|
||||
CheckForEvent(this->GetEntry(), m_curr->second.id);
|
||||
sLog.outDetail("%s is at wp id: %u", this->m_name.c_str(), m_curr->second.id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ class Transport : private GameObject
|
||||
void Update(uint32 p_time);
|
||||
bool AddPassenger(Player* passenger);
|
||||
bool RemovePassenger(Player* passenger);
|
||||
void CheckForEvent(uint32 entry, uint32 wp_id);
|
||||
void CheckForEvent(uint32 entry, uint32 wp_id);
|
||||
|
||||
typedef std::set<Player*> PlayerSet;
|
||||
PlayerSet const& GetPassengers() const { return m_passengers; }
|
||||
@@ -95,7 +95,7 @@ class Transport : private GameObject
|
||||
float y;
|
||||
float z;
|
||||
bool teleport;
|
||||
uint32 id;
|
||||
uint32 id;
|
||||
};
|
||||
|
||||
typedef std::map<uint32, WayPoint> WayPointMap;
|
||||
|
||||
@@ -80,11 +80,11 @@ template<>
|
||||
inline void Traveller<Creature>::MoveTo(float x, float y, float z, uint32 t)
|
||||
{
|
||||
//Call for creature group update
|
||||
if(i_traveller.IsFormationLeader() && !i_traveller.isInCombat() &&
|
||||
CreatureGroupHolder.find(i_traveller.GetFormationID()) != CreatureGroupHolder.end())
|
||||
CreatureGroupHolder[i_traveller.GetFormationID()]->LeaderMovedInEvade();
|
||||
if(i_traveller.IsFormationLeader() && !i_traveller.isInCombat() &&
|
||||
CreatureGroupHolder.find(i_traveller.GetFormationID()) != CreatureGroupHolder.end())
|
||||
CreatureGroupHolder[i_traveller.GetFormationID()]->LeaderMovedInEvade();
|
||||
|
||||
i_traveller.AI_SendMoveToPacket(x, y, z, t, i_traveller.GetUnitMovementFlags(), 0);
|
||||
i_traveller.AI_SendMoveToPacket(x, y, z, t, i_traveller.GetUnitMovementFlags(), 0);
|
||||
}
|
||||
|
||||
// specialization for players
|
||||
|
||||
+53
-53
@@ -421,9 +421,9 @@ void Unit::GetRandomContactPoint( const Unit* obj, float &x, float &y, float &z,
|
||||
// sLog.outError("Creature entry %u has invalid combat_reach", ((Creature*)this)->GetEntry());
|
||||
combat_reach = DEFAULT_COMBAT_REACH;
|
||||
}
|
||||
uint32 attacker_number = getAttackers().size();
|
||||
uint32 attacker_number = getAttackers().size();
|
||||
if(attacker_number > 0) --attacker_number;
|
||||
GetNearPoint(obj,x,y,z,obj->GetCombatReach(), distance2dMin+(distance2dMax-distance2dMin)*rand_norm()
|
||||
GetNearPoint(obj,x,y,z,obj->GetCombatReach(), distance2dMin+(distance2dMax-distance2dMin)*rand_norm()
|
||||
, GetAngle(obj) + (attacker_number ? (M_PI/2 - M_PI * rand_norm()) * (float)attacker_number / combat_reach / 3 : 0));
|
||||
}
|
||||
|
||||
@@ -543,34 +543,34 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
|
||||
|
||||
//Script Event damage taken
|
||||
if( pVictim->GetTypeId()== TYPEID_UNIT && ((Creature *)pVictim)->AI() )
|
||||
{
|
||||
((Creature *)pVictim)->AI()->DamageTaken(this, damage);
|
||||
{
|
||||
((Creature *)pVictim)->AI()->DamageTaken(this, damage);
|
||||
|
||||
// Set tagging
|
||||
if(!pVictim->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER) && !((Creature*)pVictim)->isPet())
|
||||
{
|
||||
//Set Loot
|
||||
switch(GetTypeId())
|
||||
{
|
||||
case TYPEID_PLAYER:
|
||||
{
|
||||
((Creature *)pVictim)->SetLootRecipient(this);
|
||||
//Set tagged
|
||||
((Creature *)pVictim)->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER);
|
||||
break;
|
||||
}
|
||||
case TYPEID_UNIT:
|
||||
{
|
||||
if(((Creature*)this)->isPet())
|
||||
{
|
||||
((Creature *)pVictim)->SetLootRecipient(this->GetOwner());
|
||||
((Creature *)pVictim)->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Set tagging
|
||||
if(!pVictim->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER) && !((Creature*)pVictim)->isPet())
|
||||
{
|
||||
//Set Loot
|
||||
switch(GetTypeId())
|
||||
{
|
||||
case TYPEID_PLAYER:
|
||||
{
|
||||
((Creature *)pVictim)->SetLootRecipient(this);
|
||||
//Set tagged
|
||||
((Creature *)pVictim)->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER);
|
||||
break;
|
||||
}
|
||||
case TYPEID_UNIT:
|
||||
{
|
||||
if(((Creature*)this)->isPet())
|
||||
{
|
||||
((Creature *)pVictim)->SetLootRecipient(this->GetOwner());
|
||||
((Creature *)pVictim)->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_OTHER_TAGGER);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (damagetype != NODAMAGE)
|
||||
{
|
||||
@@ -3064,7 +3064,7 @@ uint32 Unit::GetWeaponSkillValue (WeaponAttackType attType, Unit const* target)
|
||||
if(attType != BASE_ATTACK && !item )
|
||||
{
|
||||
if(attType == RANGED_ATTACK && getClass() == CLASS_PALADIN) //hammer
|
||||
return GetMaxSkillValueForLevel();
|
||||
return GetMaxSkillValueForLevel();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -7868,22 +7868,22 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
|
||||
|
||||
/*switch(spellProto->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_GENERIC:
|
||||
// Siphon Essence - 0%
|
||||
if(spellProto->AttributesEx == 268435456 && spellProto->SpellIconID == 2027)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
// Goblin Rocket Launcher - 0%
|
||||
else if (spellProto->SpellIconID == 184 && spellProto->Attributes == 4259840)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
// Darkmoon Card: Vengeance - 0.1%
|
||||
else if (spellProto->SpellVisual[0] == 9850 && spellProto->SpellIconID == 2230)
|
||||
{
|
||||
CastingTime = 3.5;
|
||||
}
|
||||
case SPELLFAMILY_GENERIC:
|
||||
// Siphon Essence - 0%
|
||||
if(spellProto->AttributesEx == 268435456 && spellProto->SpellIconID == 2027)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
// Goblin Rocket Launcher - 0%
|
||||
else if (spellProto->SpellIconID == 184 && spellProto->Attributes == 4259840)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
// Darkmoon Card: Vengeance - 0.1%
|
||||
else if (spellProto->SpellVisual[0] == 9850 && spellProto->SpellIconID == 2230)
|
||||
{
|
||||
CastingTime = 3.5;
|
||||
}
|
||||
case SPELLFAMILY_MAGE:
|
||||
// Ignite - do not modify, it is (8*Rank)% damage of procing Spell
|
||||
if(spellProto->Id==12654)
|
||||
@@ -8465,7 +8465,7 @@ uint32 Unit::SpellHealingBonus(Unit *pVictim, SpellEntry const *spellProto, uint
|
||||
if (spellProto->Id == 15290 || spellProto->Id == 39373 ||
|
||||
spellProto->Id == 33778 || spellProto->Id == 379 ||
|
||||
spellProto->Id == 38395 || spellProto->Id == 40972 ||
|
||||
spellProto->Id == 22845 || spellProto->Id == 33504 ||
|
||||
spellProto->Id == 22845 || spellProto->Id == 33504 ||
|
||||
spellProto->Id == 34299)
|
||||
return healamount;
|
||||
|
||||
@@ -8575,12 +8575,12 @@ uint32 Unit::SpellHealingBonus(Unit *pVictim, SpellEntry const *spellProto, uint
|
||||
DotFactor = damagetype == DOT ? 0.705f : 1.0f;
|
||||
CastingTime = damagetype == DOT ? 3500 : 1010;
|
||||
}
|
||||
// Improved Leader of the Pack
|
||||
else if (spellProto->AttributesEx2 == 536870912 && spellProto->SpellIconID == 312
|
||||
&& spellProto->AttributesEx3 == 33554432)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
// Improved Leader of the Pack
|
||||
else if (spellProto->AttributesEx2 == 536870912 && spellProto->SpellIconID == 312
|
||||
&& spellProto->AttributesEx3 == 33554432)
|
||||
{
|
||||
CastingTime = 0;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_PRIEST:
|
||||
// Holy Nova - 14%
|
||||
|
||||
@@ -41,10 +41,10 @@ void WaypointStore::Load()
|
||||
exit(1); // Stop server at loading non exited table or not accessable table
|
||||
}
|
||||
|
||||
records = (*result)[0].GetUInt32();
|
||||
records = (*result)[0].GetUInt32();
|
||||
delete result;
|
||||
|
||||
result = WorldDatabase.PQuery("SELECT `id`,`point`,`position_x`,`position_y`,`position_z`,`move_flag`,`delay`,`action`,`action_chance` FROM `waypoint_data` ORDER BY `id`, `point`");
|
||||
result = WorldDatabase.PQuery("SELECT `id`,`point`,`position_x`,`position_y`,`position_z`,`move_flag`,`delay`,`action`,`action_chance` FROM `waypoint_data` ORDER BY `id`, `point`");
|
||||
if(!result)
|
||||
{
|
||||
sLog.outErrorDb("The table `creature_addon` is empty or corrupted");
|
||||
@@ -54,21 +54,21 @@ void WaypointStore::Load()
|
||||
WaypointPath* path_data;
|
||||
uint32 total_records = result->GetRowCount();
|
||||
|
||||
barGoLink bar( total_records);
|
||||
barGoLink bar( total_records);
|
||||
Field *fields;
|
||||
uint32 last_id = 0;
|
||||
|
||||
do
|
||||
do
|
||||
{
|
||||
fields = result->Fetch();
|
||||
uint32 id = fields[0].GetUInt32();
|
||||
bar.step();
|
||||
WaypointData *wp = new WaypointData;
|
||||
|
||||
if(last_id != id)
|
||||
path_data = new WaypointPath;
|
||||
if(last_id != id)
|
||||
path_data = new WaypointPath;
|
||||
|
||||
float x,y,z;
|
||||
float x,y,z;
|
||||
x = fields[2].GetFloat();
|
||||
y = fields[3].GetFloat();
|
||||
z = fields[4].GetFloat();
|
||||
@@ -85,14 +85,14 @@ void WaypointStore::Load()
|
||||
wp->event_id = fields[7].GetUInt32();
|
||||
wp->event_chance = fields[8].GetUInt8();
|
||||
|
||||
path_data->push_back(wp);
|
||||
path_data->push_back(wp);
|
||||
|
||||
if(id != last_id)
|
||||
waypoint_map[id] = path_data;
|
||||
if(id != last_id)
|
||||
waypoint_map[id] = path_data;
|
||||
|
||||
last_id = id;
|
||||
last_id = id;
|
||||
|
||||
} while(result->NextRow()) ;
|
||||
} while(result->NextRow()) ;
|
||||
|
||||
|
||||
delete result;
|
||||
@@ -101,35 +101,35 @@ void WaypointStore::Load()
|
||||
void WaypointStore::UpdatePath(uint32 id)
|
||||
{
|
||||
|
||||
if(waypoint_map.find(id)!= waypoint_map.end())
|
||||
waypoint_map[id]->clear();
|
||||
if(waypoint_map.find(id)!= waypoint_map.end())
|
||||
waypoint_map[id]->clear();
|
||||
|
||||
QueryResult *result;
|
||||
QueryResult *result;
|
||||
|
||||
result = WorldDatabase.PQuery("SELECT `id`,`point`,`position_x`,`position_y`,`position_z`,`move_flag`,`delay`,`action`,`action_chance` FROM `waypoint_data` WHERE id = %u ORDER BY `point`", id);
|
||||
|
||||
if(!result)
|
||||
return;
|
||||
if(!result)
|
||||
return;
|
||||
|
||||
WaypointPath* path_data;
|
||||
WaypointPath* path_data;
|
||||
|
||||
path_data = new WaypointPath;
|
||||
path_data = new WaypointPath;
|
||||
|
||||
Field *fields;
|
||||
Field *fields;
|
||||
|
||||
do
|
||||
do
|
||||
{
|
||||
fields = result->Fetch();
|
||||
fields = result->Fetch();
|
||||
uint32 id = fields[0].GetUInt32();
|
||||
|
||||
WaypointData *wp = new WaypointData;
|
||||
|
||||
float x,y,z;
|
||||
float x,y,z;
|
||||
x = fields[2].GetFloat();
|
||||
y = fields[3].GetFloat();
|
||||
z = fields[4].GetFloat();
|
||||
|
||||
Trinity::NormalizeMapCoord(x);
|
||||
Trinity::NormalizeMapCoord(x);
|
||||
Trinity::NormalizeMapCoord(y);
|
||||
|
||||
wp->id = fields[1].GetUInt32();
|
||||
@@ -141,11 +141,11 @@ void WaypointStore::UpdatePath(uint32 id)
|
||||
wp->event_id = fields[7].GetUInt32();
|
||||
wp->event_chance = fields[8].GetUInt8();
|
||||
|
||||
path_data->push_back(wp);
|
||||
path_data->push_back(wp);
|
||||
|
||||
}while (result->NextRow());
|
||||
}while (result->NextRow());
|
||||
|
||||
waypoint_map[id] = path_data;
|
||||
waypoint_map[id] = path_data;
|
||||
|
||||
delete result;
|
||||
delete result;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
struct WaypointData
|
||||
{
|
||||
uint32 id;
|
||||
uint32 id;
|
||||
float x,y,z;
|
||||
bool run;
|
||||
uint32 delay;
|
||||
@@ -39,21 +39,21 @@ extern UNORDERED_MAP<uint32, WaypointPath*> waypoint_map;
|
||||
class WaypointStore
|
||||
{
|
||||
private :
|
||||
uint32 records;
|
||||
uint32 records;
|
||||
|
||||
public:
|
||||
public:
|
||||
void UpdatePath(uint32 id);
|
||||
void Load();
|
||||
void Load();
|
||||
void Free();
|
||||
|
||||
WaypointPath* GetPath(uint32 id)
|
||||
{
|
||||
if(waypoint_map.find(id) != waypoint_map.end())
|
||||
if(waypoint_map.find(id) != waypoint_map.end())
|
||||
return waypoint_map[id];
|
||||
else return 0;
|
||||
}
|
||||
else return 0;
|
||||
}
|
||||
|
||||
inline uint32 GetRecordsCount() { return records; }
|
||||
inline uint32 GetRecordsCount() { return records; }
|
||||
};
|
||||
|
||||
extern WaypointStore WaypointMgr;
|
||||
|
||||
@@ -62,14 +62,14 @@ bool WaypointMovementGenerator<Creature>::GetDestination(float &x, float &y, flo
|
||||
template<>
|
||||
bool WaypointMovementGenerator<Player>::GetDestination(float &x, float &y, float &z) const
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
template<>
|
||||
void WaypointMovementGenerator<Creature>::Reset(Creature &unit)
|
||||
{
|
||||
StopedByPlayer = true;
|
||||
i_nextMoveTime.Reset(0);
|
||||
StopedByPlayer = true;
|
||||
i_nextMoveTime.Reset(0);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -78,16 +78,16 @@ void WaypointMovementGenerator<Player>::Reset(Player &unit){}
|
||||
template<>
|
||||
void WaypointMovementGenerator<Creature>::InitTraveller(Creature &unit, const WaypointData &node)
|
||||
{
|
||||
node.run ? unit.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE):
|
||||
unit.AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
node.run ? unit.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE):
|
||||
unit.AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
|
||||
unit.SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
unit.SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
|
||||
unit.SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
unit.SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
|
||||
|
||||
if(unit.canFly())
|
||||
unit.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2);
|
||||
unit.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2);
|
||||
|
||||
unit.addUnitState(UNIT_STAT_ROAMING);
|
||||
unit.addUnitState(UNIT_STAT_ROAMING);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -101,13 +101,13 @@ WaypointMovementGenerator<Creature>::Initialize(Creature &u)
|
||||
if(!path_id)
|
||||
path_id = u.GetWaypointPath();
|
||||
waypoints = WaypointMgr.GetPath(path_id);
|
||||
i_currentNode = 0;
|
||||
i_currentNode = 0;
|
||||
if(waypoints && waypoints->size())
|
||||
{
|
||||
node = waypoints->front();
|
||||
Traveller<Creature> traveller(u);
|
||||
InitTraveller(u, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
InitTraveller(u, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||
}
|
||||
else
|
||||
@@ -121,7 +121,7 @@ template<class T>
|
||||
bool
|
||||
WaypointMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -131,84 +131,84 @@ WaypointMovementGenerator<Creature>::Update(Creature &unit, const uint32 &diff)
|
||||
if(!&unit)
|
||||
return true;
|
||||
|
||||
if(!path_id)
|
||||
return false;
|
||||
if(!path_id)
|
||||
return false;
|
||||
|
||||
// Waypoint movement can be switched on/off
|
||||
// Waypoint movement can be switched on/off
|
||||
// This is quite handy for escort quests and other stuff
|
||||
if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED))
|
||||
return true;
|
||||
if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED))
|
||||
return true;
|
||||
|
||||
// Clear the generator if the path doesn't exist
|
||||
if(!waypoints || !waypoints->size())
|
||||
return false;
|
||||
|
||||
Traveller<Creature> traveller(unit);
|
||||
Traveller<Creature> traveller(unit);
|
||||
|
||||
i_nextMoveTime.Update(diff);
|
||||
i_nextMoveTime.Update(diff);
|
||||
i_destinationHolder.UpdateTraveller(traveller, diff, false, true);
|
||||
|
||||
if(i_nextMoveTime.Passed())
|
||||
{
|
||||
if(unit.IsStopped())
|
||||
{
|
||||
if(StopedByPlayer)
|
||||
{
|
||||
if(i_nextMoveTime.Passed())
|
||||
{
|
||||
if(unit.IsStopped())
|
||||
{
|
||||
if(StopedByPlayer)
|
||||
{
|
||||
assert(node);
|
||||
InitTraveller(unit, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||
StopedByPlayer = false;
|
||||
return true;
|
||||
}
|
||||
InitTraveller(unit, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||
StopedByPlayer = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if(i_currentNode == waypoints->size() - 1) //If that's our last waypoint
|
||||
{
|
||||
if(repeating) //If the movement is repeating
|
||||
i_currentNode = 0; //Start moving all over again
|
||||
else
|
||||
{
|
||||
unit.SetHomePosition(node->x, node->y, node->z, unit.GetOrientation());
|
||||
unit.GetMotionMaster()->Initialize();
|
||||
return false; //Clear the waypoint movement
|
||||
}
|
||||
}
|
||||
else
|
||||
i_currentNode++;
|
||||
if(i_currentNode == waypoints->size() - 1) //If that's our last waypoint
|
||||
{
|
||||
if(repeating) //If the movement is repeating
|
||||
i_currentNode = 0; //Start moving all over again
|
||||
else
|
||||
{
|
||||
unit.SetHomePosition(node->x, node->y, node->z, unit.GetOrientation());
|
||||
unit.GetMotionMaster()->Initialize();
|
||||
return false; //Clear the waypoint movement
|
||||
}
|
||||
}
|
||||
else
|
||||
i_currentNode++;
|
||||
|
||||
node = waypoints->at(i_currentNode);
|
||||
InitTraveller(unit, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||
}
|
||||
else
|
||||
{
|
||||
//Determine waittime
|
||||
if(node->delay)
|
||||
i_nextMoveTime.Reset(node->delay);
|
||||
node = waypoints->at(i_currentNode);
|
||||
InitTraveller(unit, *node);
|
||||
i_destinationHolder.SetDestination(traveller, node->x, node->y, node->z);
|
||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||
}
|
||||
else
|
||||
{
|
||||
//Determine waittime
|
||||
if(node->delay)
|
||||
i_nextMoveTime.Reset(node->delay);
|
||||
|
||||
if(node->event_id && rand()%100 < node->event_chance)
|
||||
sWorld.ScriptsStart(sWaypointScripts, node->event_id, &unit, NULL);
|
||||
if(node->event_id && rand()%100 < node->event_chance)
|
||||
sWorld.ScriptsStart(sWaypointScripts, node->event_id, &unit, NULL);
|
||||
|
||||
MovementInform(unit);
|
||||
unit.UpdateWaypointID(i_currentNode);
|
||||
unit.clearUnitState(UNIT_STAT_MOVING);
|
||||
unit.Relocate(node->x, node->y, node->z);
|
||||
}
|
||||
MovementInform(unit);
|
||||
unit.UpdateWaypointID(i_currentNode);
|
||||
unit.clearUnitState(UNIT_STAT_MOVING);
|
||||
unit.Relocate(node->x, node->y, node->z);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(unit.IsStopped() && !i_destinationHolder.HasArrived())
|
||||
{
|
||||
if(!StopedByPlayer)
|
||||
{
|
||||
i_destinationHolder.IncreaseTravelTime(STOP_TIME_FOR_PLAYER);
|
||||
i_nextMoveTime.Reset(STOP_TIME_FOR_PLAYER);
|
||||
StopedByPlayer = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
else
|
||||
{
|
||||
if(unit.IsStopped() && !i_destinationHolder.HasArrived())
|
||||
{
|
||||
if(!StopedByPlayer)
|
||||
{
|
||||
i_destinationHolder.IncreaseTravelTime(STOP_TIME_FOR_PLAYER);
|
||||
i_nextMoveTime.Reset(STOP_TIME_FOR_PLAYER);
|
||||
StopedByPlayer = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template void WaypointMovementGenerator<Player>::Initialize(Player &);
|
||||
|
||||
@@ -65,23 +65,23 @@ template<class T>
|
||||
class TRINITY_DLL_SPEC WaypointMovementGenerator
|
||||
: public MovementGeneratorMedium< T, WaypointMovementGenerator<T> >, public PathMovementBase<T>
|
||||
{
|
||||
public:
|
||||
WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true) :
|
||||
i_nextMoveTime(0), path_id(_path_id), repeating(_repeating), StopedByPlayer(false), node(NULL) {}
|
||||
public:
|
||||
WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true) :
|
||||
i_nextMoveTime(0), path_id(_path_id), repeating(_repeating), StopedByPlayer(false), node(NULL) {}
|
||||
|
||||
void Initialize(T &);
|
||||
void Initialize(T &);
|
||||
void Finalize(T &);
|
||||
void MovementInform(T &);
|
||||
void InitTraveller(T &, const WaypointData &);
|
||||
void GeneratePathId(T &);
|
||||
void Reset(T &unit);
|
||||
void MovementInform(T &);
|
||||
void InitTraveller(T &, const WaypointData &);
|
||||
void GeneratePathId(T &);
|
||||
void Reset(T &unit);
|
||||
bool Update(T &, const uint32 &);
|
||||
bool GetDestination(float &x, float &y, float &z) const;
|
||||
MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; }
|
||||
bool GetDestination(float &x, float &y, float &z) const;
|
||||
MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; }
|
||||
|
||||
private:
|
||||
WaypointData *node;
|
||||
uint32 path_id;
|
||||
private:
|
||||
WaypointData *node;
|
||||
uint32 path_id;
|
||||
TimeTrackerSmall i_nextMoveTime;
|
||||
WaypointPath *waypoints;
|
||||
bool repeating, StopedByPlayer;
|
||||
@@ -112,7 +112,7 @@ public PathMovementBase<Player>
|
||||
bool HasArrived() const { return (i_currentNode >= i_path.Size()); }
|
||||
void SetCurrentNodeAfterTeleport();
|
||||
void SkipCurrentNode() { ++i_currentNode; }
|
||||
bool GetDestination(float& x, float& y, float& z) const { i_destinationHolder.GetDestination(x,y,z); return true; }
|
||||
bool GetDestination(float& x, float& y, float& z) const { i_destinationHolder.GetDestination(x,y,z); return true; }
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
+104
-104
@@ -73,7 +73,7 @@ volatile bool World::m_stopEvent = false;
|
||||
uint8 World::m_ExitCode = SHUTDOWN_EXIT_CODE;
|
||||
volatile uint32 World::m_worldLoopCounter = 0;
|
||||
|
||||
float World::m_MaxVisibleDistance = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_MaxVisibleDistance = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_MaxVisibleDistanceForCreature = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_MaxVisibleDistanceForPlayer = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_MaxVisibleDistanceForObject = DEFAULT_VISIBILITY_DISTANCE;
|
||||
@@ -410,7 +410,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
SetPlayerLimit( sConfig.GetIntDefault("PlayerLimit", DEFAULT_PLAYER_LIMIT), true );
|
||||
SetMotd( sConfig.GetStringDefault("Motd", "Welcome to the Massive Network Game Object Server." ) );
|
||||
|
||||
///- Get string for new logins (newly created characters)
|
||||
///- Get string for new logins (newly created characters)
|
||||
SetNewCharString(sConfig.GetStringDefault("PlayerStart.String", ""));
|
||||
|
||||
///- Send server info on login?
|
||||
@@ -1359,10 +1359,10 @@ void World::SetInitialWorldSettings()
|
||||
sLog.outString();
|
||||
WaypointMgr.Load();
|
||||
|
||||
sLog.outString( "Loading Creature Formations..." );
|
||||
formation_mgr.LoadCreatureFormations();
|
||||
sLog.outString( "Loading Creature Formations..." );
|
||||
formation_mgr.LoadCreatureFormations();
|
||||
|
||||
sLog.outString( "Loading GM tickets...");
|
||||
sLog.outString( "Loading GM tickets...");
|
||||
ticketmgr.LoadGMTickets();
|
||||
|
||||
///- Handle outdated emails (delete/return)
|
||||
@@ -1377,7 +1377,7 @@ void World::SetInitialWorldSettings()
|
||||
objmgr.LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data)
|
||||
objmgr.LoadGameObjectScripts(); // must be after load Creature/Gameobject(Template/Data)
|
||||
objmgr.LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data)
|
||||
objmgr.LoadWaypointScripts();
|
||||
objmgr.LoadWaypointScripts();
|
||||
sLog.outString( ">>> Scripts loaded" );
|
||||
sLog.outString();
|
||||
|
||||
@@ -1441,8 +1441,8 @@ void World::SetInitialWorldSettings()
|
||||
sLog.outString( "Loading Transports..." );
|
||||
MapManager::Instance().LoadTransports();
|
||||
|
||||
sLog.outString( "Loading Transports Events..." );
|
||||
objmgr.LoadTransportEvents();
|
||||
sLog.outString( "Loading Transports Events..." );
|
||||
objmgr.LoadTransportEvents();
|
||||
|
||||
sLog.outString("Deleting expired bans..." );
|
||||
LoginDatabase.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate");
|
||||
@@ -1740,7 +1740,7 @@ void World::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source,
|
||||
return;
|
||||
|
||||
// prepare static data
|
||||
uint64 sourceGUID = source ? source->GetGUID() : (uint64)0; //some script commands doesn't have source
|
||||
uint64 sourceGUID = source ? source->GetGUID() : (uint64)0; //some script commands doesn't have source
|
||||
uint64 targetGUID = target ? target->GetGUID() : (uint64)0;
|
||||
uint64 ownerGUID = (source->GetTypeId()==TYPEID_ITEM) ? ((Item*)source)->GetOwnerGUID() : (uint64)0;
|
||||
|
||||
@@ -1826,22 +1826,22 @@ void World::ScriptsProcess()
|
||||
source = HashMapHolder<Player>::Find(step.sourceGUID);
|
||||
break;
|
||||
case HIGHGUID_GAMEOBJECT:
|
||||
source = HashMapHolder<GameObject>::Find(step.sourceGUID);
|
||||
source = HashMapHolder<GameObject>::Find(step.sourceGUID);
|
||||
break;
|
||||
case HIGHGUID_CORPSE:
|
||||
source = HashMapHolder<Corpse>::Find(step.sourceGUID);
|
||||
break;
|
||||
case HIGHGUID_MO_TRANSPORT:
|
||||
for (MapManager::TransportSet::iterator iter = MapManager::Instance().m_Transports.begin(); iter != MapManager::Instance().m_Transports.end(); ++iter)
|
||||
{
|
||||
if((*iter)->GetGUID() == step.sourceGUID)
|
||||
{
|
||||
source = reinterpret_cast<Object*>(*iter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case HIGHGUID_MO_TRANSPORT:
|
||||
for (MapManager::TransportSet::iterator iter = MapManager::Instance().m_Transports.begin(); iter != MapManager::Instance().m_Transports.end(); ++iter)
|
||||
{
|
||||
if((*iter)->GetGUID() == step.sourceGUID)
|
||||
{
|
||||
source = reinterpret_cast<Object*>(*iter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
sLog.outError("*_script source with unsupported high guid value %u",GUID_HIPART(step.sourceGUID));
|
||||
break;
|
||||
}
|
||||
@@ -2386,9 +2386,9 @@ void World::ScriptsProcess()
|
||||
break;
|
||||
}
|
||||
|
||||
case SCRIPT_COMMAND_LOAD_PATH:
|
||||
{
|
||||
if(!source)
|
||||
case SCRIPT_COMMAND_LOAD_PATH:
|
||||
{
|
||||
if(!source)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_START_MOVE is tried to apply to NON-existing unit.");
|
||||
break;
|
||||
@@ -2400,98 +2400,98 @@ void World::ScriptsProcess()
|
||||
break;
|
||||
}
|
||||
|
||||
if(!WaypointMgr.GetPath(step.script->datalong))
|
||||
{
|
||||
if(!WaypointMgr.GetPath(step.script->datalong))
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_START_MOVE source mover has an invallid path, skipping.", step.script->datalong2);
|
||||
break;
|
||||
}
|
||||
|
||||
dynamic_cast<Unit*>(source)->GetMotionMaster()->MovePath(step.script->datalong, step.script->datalong2);
|
||||
break;
|
||||
}
|
||||
dynamic_cast<Unit*>(source)->GetMotionMaster()->MovePath(step.script->datalong, step.script->datalong2);
|
||||
break;
|
||||
}
|
||||
|
||||
case SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT:
|
||||
{
|
||||
if(!step.script->datalong || !step.script->datalong2)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_CALLSCRIPT calls invallid db_script_id or lowguid not present: skipping.");
|
||||
break;
|
||||
}
|
||||
//our target
|
||||
Creature* target = NULL;
|
||||
case SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT:
|
||||
{
|
||||
if(!step.script->datalong || !step.script->datalong2)
|
||||
{
|
||||
sLog.outError("SCRIPT_COMMAND_CALLSCRIPT calls invallid db_script_id or lowguid not present: skipping.");
|
||||
break;
|
||||
}
|
||||
//our target
|
||||
Creature* target = NULL;
|
||||
|
||||
if(source) //using grid searcher
|
||||
{
|
||||
CellPair p(Trinity::ComputeCellPair(((Unit*)source)->GetPositionX(), ((Unit*)source)->GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
if(source) //using grid searcher
|
||||
{
|
||||
CellPair p(Trinity::ComputeCellPair(((Unit*)source)->GetPositionX(), ((Unit*)source)->GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
|
||||
//sLog.outDebug("Attempting to find Creature: Db GUID: %i", step.script->datalong);
|
||||
Trinity::CreatureWithDbGUIDCheck target_check(((Unit*)source), step.script->datalong);
|
||||
Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(((Unit*)source), target, target_check);
|
||||
//sLog.outDebug("Attempting to find Creature: Db GUID: %i", step.script->datalong);
|
||||
Trinity::CreatureWithDbGUIDCheck target_check(((Unit*)source), step.script->datalong);
|
||||
Trinity::CreatureSearcher<Trinity::CreatureWithDbGUIDCheck> checker(((Unit*)source), target, target_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
|
||||
CellLock<GridReadGuard> cell_lock(cell, p);
|
||||
cell_lock->Visit(cell_lock, unit_checker, *(((Unit*)source)->GetMap()));
|
||||
}
|
||||
else //check hashmap holders
|
||||
{
|
||||
if(CreatureData const* data = objmgr.GetCreatureData(step.script->datalong))
|
||||
target = ObjectAccessor::GetObjectInWorld<Creature>(data->mapid, data->posX, data->posY, MAKE_NEW_GUID(step.script->datalong, data->id, HIGHGUID_UNIT), target);
|
||||
}
|
||||
//sLog.outDebug("attempting to pass target...");
|
||||
if(!target)
|
||||
break;
|
||||
//sLog.outDebug("target passed");
|
||||
//Lets choose our ScriptMap map
|
||||
ScriptMapMap *datamap = NULL;
|
||||
switch(step.script->dataint)
|
||||
{
|
||||
case 1://QUEST END SCRIPTMAP
|
||||
datamap = &sQuestEndScripts;
|
||||
break;
|
||||
case 2://QUEST START SCRIPTMAP
|
||||
datamap = &sQuestStartScripts;
|
||||
break;
|
||||
case 3://SPELLS SCRIPTMAP
|
||||
datamap = &sSpellScripts;
|
||||
break;
|
||||
case 4://GAMEOBJECTS SCRIPTMAP
|
||||
datamap = &sGameObjectScripts;
|
||||
break;
|
||||
case 5://EVENTS SCRIPTMAP
|
||||
datamap = &sEventScripts;
|
||||
break;
|
||||
case 6://WAYPOINTS SCRIPTMAP
|
||||
datamap = &sWaypointScripts;
|
||||
break;
|
||||
default:
|
||||
sLog.outError("SCRIPT_COMMAND_CALLSCRIPT ERROR: no scriptmap present... ignoring");
|
||||
break;
|
||||
}
|
||||
//if no scriptmap present...
|
||||
if(!datamap)
|
||||
break;
|
||||
TypeContainerVisitor<Trinity::CreatureSearcher <Trinity::CreatureWithDbGUIDCheck>, GridTypeMapContainer > unit_checker(checker);
|
||||
CellLock<GridReadGuard> cell_lock(cell, p);
|
||||
cell_lock->Visit(cell_lock, unit_checker, *(((Unit*)source)->GetMap()));
|
||||
}
|
||||
else //check hashmap holders
|
||||
{
|
||||
if(CreatureData const* data = objmgr.GetCreatureData(step.script->datalong))
|
||||
target = ObjectAccessor::GetObjectInWorld<Creature>(data->mapid, data->posX, data->posY, MAKE_NEW_GUID(step.script->datalong, data->id, HIGHGUID_UNIT), target);
|
||||
}
|
||||
//sLog.outDebug("attempting to pass target...");
|
||||
if(!target)
|
||||
break;
|
||||
//sLog.outDebug("target passed");
|
||||
//Lets choose our ScriptMap map
|
||||
ScriptMapMap *datamap = NULL;
|
||||
switch(step.script->dataint)
|
||||
{
|
||||
case 1://QUEST END SCRIPTMAP
|
||||
datamap = &sQuestEndScripts;
|
||||
break;
|
||||
case 2://QUEST START SCRIPTMAP
|
||||
datamap = &sQuestStartScripts;
|
||||
break;
|
||||
case 3://SPELLS SCRIPTMAP
|
||||
datamap = &sSpellScripts;
|
||||
break;
|
||||
case 4://GAMEOBJECTS SCRIPTMAP
|
||||
datamap = &sGameObjectScripts;
|
||||
break;
|
||||
case 5://EVENTS SCRIPTMAP
|
||||
datamap = &sEventScripts;
|
||||
break;
|
||||
case 6://WAYPOINTS SCRIPTMAP
|
||||
datamap = &sWaypointScripts;
|
||||
break;
|
||||
default:
|
||||
sLog.outError("SCRIPT_COMMAND_CALLSCRIPT ERROR: no scriptmap present... ignoring");
|
||||
break;
|
||||
}
|
||||
//if no scriptmap present...
|
||||
if(!datamap)
|
||||
break;
|
||||
|
||||
uint32 script_id = step.script->datalong2;
|
||||
//delete iter and return it to begin pos(next one)
|
||||
m_scriptSchedule.erase(iter);
|
||||
iter = m_scriptSchedule.begin();
|
||||
uint32 script_id = step.script->datalong2;
|
||||
//delete iter and return it to begin pos(next one)
|
||||
m_scriptSchedule.erase(iter);
|
||||
iter = m_scriptSchedule.begin();
|
||||
|
||||
ScriptsStart(*datamap, script_id, target, NULL);
|
||||
return;
|
||||
}
|
||||
ScriptsStart(*datamap, script_id, target, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
case SCRIPT_COMMAND_PLAYSOUND:
|
||||
{
|
||||
if(!source)
|
||||
break;
|
||||
//datalong sound_id, datalong2 onlyself
|
||||
((WorldObject*)source)->SendPlaySound(step.script->datalong, step.script->datalong2);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_PLAYSOUND:
|
||||
{
|
||||
if(!source)
|
||||
break;
|
||||
//datalong sound_id, datalong2 onlyself
|
||||
((WorldObject*)source)->SendPlaySound(step.script->datalong, step.script->datalong2);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
default:
|
||||
sLog.outError("Unknown script command %u called.",step.script->command);
|
||||
break;
|
||||
}
|
||||
|
||||
+6
-6
@@ -211,7 +211,7 @@ enum WorldConfigs
|
||||
CONFIG_SHOW_KICK_IN_WORLD,
|
||||
CONFIG_INTERVAL_LOG_UPDATE,
|
||||
CONFIG_MIN_LOG_UPDATE,
|
||||
CONFIG_ENABLE_SINFO_LOGIN,
|
||||
CONFIG_ENABLE_SINFO_LOGIN,
|
||||
|
||||
CONFIG_VALUE_COUNT
|
||||
};
|
||||
@@ -339,9 +339,9 @@ enum RealmZone
|
||||
#define SCRIPT_COMMAND_ACTIVATE_OBJECT 13 // source = unit, target=GO
|
||||
#define SCRIPT_COMMAND_REMOVE_AURA 14 // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
|
||||
#define SCRIPT_COMMAND_CAST_SPELL 15 // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
|
||||
#define SCRIPT_COMMAND_LOAD_PATH 16 // source = unit, path = datalong, repeatable datalong2
|
||||
#define SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT 17 // datalong scriptid, lowguid datalong2, dataint table
|
||||
#define SCRIPT_COMMAND_PLAYSOUND 18 // datalong soundid, datalong2 play only self
|
||||
#define SCRIPT_COMMAND_LOAD_PATH 16 // source = unit, path = datalong, repeatable datalong2
|
||||
#define SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT 17 // datalong scriptid, lowguid datalong2, dataint table
|
||||
#define SCRIPT_COMMAND_PLAYSOUND 18 // datalong soundid, datalong2 play only self
|
||||
|
||||
|
||||
/// Storage class for commands issued for delayed execution
|
||||
@@ -414,7 +414,7 @@ class World
|
||||
/// Get the current Message of the Day
|
||||
const char* GetMotd() const { return m_motd.c_str(); }
|
||||
|
||||
/// Set the string for new characters (first login)
|
||||
/// Set the string for new characters (first login)
|
||||
void SetNewCharString(std::string str) { m_newCharString = str; }
|
||||
/// Get the string for new characters (first login)
|
||||
const std::string& GetNewCharString() const { return m_newCharString; }
|
||||
@@ -564,7 +564,7 @@ class World
|
||||
|
||||
std::multimap<time_t, ScriptAction> m_scriptSchedule;
|
||||
|
||||
std::string m_newCharString;
|
||||
std::string m_newCharString;
|
||||
|
||||
float rate_values[MAX_RATES];
|
||||
uint32 m_configs[CONFIG_VALUE_COUNT];
|
||||
|
||||
@@ -219,8 +219,8 @@ class TRINITY_DLL_SPEC WorldSession
|
||||
|
||||
// Locales
|
||||
LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
|
||||
int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
|
||||
const char *GetTrinityString(int32 entry) const;
|
||||
int GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
|
||||
const char *GetTrinityString(int32 entry) const;
|
||||
|
||||
uint32 GetLatency() const { return m_latency; }
|
||||
void SetLatency(uint32 latency) { m_latency = latency; }
|
||||
@@ -287,12 +287,12 @@ class TRINITY_DLL_SPEC WorldSession
|
||||
void HandlePlayerLogoutOpcode(WorldPacket& recvPacket);
|
||||
void HandleLogoutCancelOpcode(WorldPacket& recvPacket);
|
||||
|
||||
// GM Ticket opcodes
|
||||
void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
|
||||
// GM Ticket opcodes
|
||||
void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
|
||||
|
||||
//void HandleGMSurveySubmit(WorldPacket& recvPacket);
|
||||
|
||||
@@ -544,7 +544,7 @@ class TRINITY_DLL_SPEC WorldSession
|
||||
void HandleChannelRosterQuery(WorldPacket& recvPacket);
|
||||
void HandleChannelInfoQuery(WorldPacket& recvPacket);
|
||||
void HandleChannelJoinNotify(WorldPacket& recvPacket);
|
||||
void HandleChannelDeclineInvite(WorldPacket& recvPacket);
|
||||
void HandleChannelDeclineInvite(WorldPacket& recvPacket);
|
||||
|
||||
void HandleCompleteCinema(WorldPacket& recvPacket);
|
||||
void HandleNextCinematicCamera(WorldPacket& recvPacket);
|
||||
|
||||
Reference in New Issue
Block a user