diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Level2.cpp | 568 | ||||
-rw-r--r-- | src/game/WaypointManager.cpp | 20 |
2 files changed, 204 insertions, 384 deletions
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 8c0a886f2c7..ab226f9ab6c 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -2261,176 +2261,6 @@ bool ChatHandler::HandlePInfoCommand(const char* args) return true; } -/*//show tickets -void ChatHandler::ShowTicket(uint64 guid, char const* text, char const* time) -{ - std::string name; - if(!objmgr.GetPlayerNameByGUID(guid,name)) - name = GetTrinityString(LANG_UNKNOWN); - - std::string nameLink = playerLink(name); - - PSendSysMessage(LANG_COMMAND_TICKETVIEW, nameLink.c_str(),time,text); -} - -//ticket commands -bool ChatHandler::HandleTicketCommand(const char* args) -{ - char* px = strtok((char*)args, " "); - - // ticket<end> - if (!px) - { - if(!m_session) - { - SendSysMessage(LANG_PLAYER_NOT_FOUND); - SetSentErrorMessage(true); - return false; - } - - size_t count = objmgr.GetTicketCount(); - - bool accept = m_session->GetPlayer()->isAcceptTickets(); - - PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, accept ? GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF)); - return true; - } - - // ticket on - if(strncmp(px,"on",3) == 0) - { - if(!m_session) - { - SendSysMessage(LANG_PLAYER_NOT_FOUND); - SetSentErrorMessage(true); - return false; - } - - m_session->GetPlayer()->SetAcceptTicket(true); - SendSysMessage(LANG_COMMAND_TICKETON); - return true; - } - - // ticket off - if(strncmp(px,"off",4) == 0) - { - if(!m_session) - { - SendSysMessage(LANG_PLAYER_NOT_FOUND); - SetSentErrorMessage(true); - return false; - } - - m_session->GetPlayer()->SetAcceptTicket(false); - SendSysMessage(LANG_COMMAND_TICKETOFF); - return true; - } - - // ticket #num - int num = atoi(px); - if(num > 0) - { - QueryResult *result = CharacterDatabase.PQuery("SELECT guid,ticket_text,ticket_lastchange FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_, num-1); - - if(!result) - { - PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num); - SetSentErrorMessage(true); - return false; - } - - Field* fields = result->Fetch(); - - uint32 guid = fields[0].GetUInt32(); - char const* text = fields[1].GetString(); - char const* time = fields[2].GetString(); - - ShowTicket(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER),text,time); - delete result; - return true; - } - - uint64 target_guid; - if(!extractPlayerTarget(px,NULL,&target_guid)) - return false; - - // ticket $char_name - GMTicket* ticket = objmgr.GetGMTicket(GUID_LOPART(target_guid)); - if(!ticket) - return false; - - std::string time = TimeToTimestampStr(ticket->GetLastUpdate()); - - ShowTicket(target_guid, ticket->GetText(), time.c_str()); - - return true; -} - -//dell all tickets -bool ChatHandler::HandleDelTicketCommand(const char *args) -{ - char* px = strtok((char*)args, " "); - if (!px) - return false; - - // delticket all - if(strncmp(px,"all",4) == 0) - { - objmgr.DeleteAll(); - SendSysMessage(LANG_COMMAND_ALLTICKETDELETED); - return true; - } - - int num = (uint32)atoi(px); - - // delticket #num - if(num > 0) - { - QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_,num-1); - if(!result) - { - PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num); - SetSentErrorMessage(true); - return false; - } - Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); - delete result; - - objmgr.Delete(guid); - - //notify player - if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER))) - { - pl->GetSession()->SendGMTicketGetTicket(0x0A, 0); - PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, GetNameLink(pl).c_str()); - } - else - PSendSysMessage(LANG_COMMAND_TICKETDEL); - - return true; - } - - Player* target; - uint64 target_guid; - std::string target_name; - if(!extractPlayerTarget(px,&target,&target_guid,&target_name)) - return false; - - // delticket $char_name - objmgr.Delete(GUID_LOPART(target_guid)); - - // notify players about ticket deleting - if(target) - target->GetSession()->SendGMTicketGetTicket(0x0A,0); - - std::string nameLink = playerLink(target_name); - - PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL,nameLink.c_str()); - return true; -}*/ - - /////WAYPOINT COMMANDS /** @@ -2469,20 +2299,20 @@ bool ChatHandler::HandleWpAddCommand(const char* args) Creature* target = getSelectedCreature(); if (!path_number) - { + { if(target) pathid = target->GetWaypointPathId(); - else - { - QueryResult *result = WorldDatabase.PQuery( "SELECT MAX(id) FROM waypoint_data"); - uint32 maxpathid = result->Fetch()->GetInt32(); - pathid = maxpathid+1; - sLog.outDebug("DEBUG: HandleWpAddCommand - New path started."); - PSendSysMessage("%s%s|r", "|cff00ff00", "New path started."); - } - } else - pathid = atoi(path_number); + { + QueryResult *result = WorldDatabase.PQuery( "SELECT MAX(id) FROM waypoint_data"); + uint32 maxpathid = result->Fetch()->GetInt32(); + pathid = maxpathid+1; + sLog.outDebug("DEBUG: HandleWpAddCommand - New path started."); + PSendSysMessage("%s%s|r", "|cff00ff00", "New path started."); + } + } + else + pathid = atoi(path_number); // path_id -> ID of the Path // point -> number of the waypoint (if not 0) @@ -2510,8 +2340,7 @@ bool ChatHandler::HandleWpAddCommand(const char* args) WorldDatabase.PExecuteLog("INSERT INTO waypoint_data (id, point, position_x, position_y, position_z) VALUES ('%u','%u','%f', '%f', '%f')", pathid, point+1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); - PSendSysMessage("%s%s%u%s%u%s|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point,"|r|cff00ff00 created. "); - + PSendSysMessage("%s%s%u%s%u%s|r", "|cff00ff00", "PathID: |r|cff00ffff", pathid, "|r|cff00ff00: Waypoint |r|cff00ffff", point,"|r|cff00ff00 created. "); return true; } // HandleWpAddCommand @@ -2643,231 +2472,227 @@ bool ChatHandler::HandleWpUnLoadPathCommand(const char *args) bool ChatHandler::HandleWpEventCommand(const char* args) { -if(!*args) - return false; + if(!*args) + return false; char* show_str = strtok((char*)args, " "); - std::string show = show_str; // Check if( (show != "add") && (show != "mod") && (show != "del") && (show != "listid")) return false; - - if(show == "add") - { - uint32 id = 0; char* arg_id = strtok(NULL, " "); - - if(arg_id) - uint32 id = atoi(arg_id); - - if(id) + uint32 id = 0; + + if(show == "add") { - QueryResult *result = WorldDatabase.PQuery( "SELECT `id` FROM waypoint_scripts WHERE guid = %u", id); + if(arg_id) + id = atoi(arg_id); - if( !result ) + if(id) { - WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id); - PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id); + QueryResult *result = WorldDatabase.PQuery( "SELECT `id` FROM waypoint_scripts WHERE guid = %u", id); + + if( !result ) + { + WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id); + PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", id); + } + else + { + PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: %u|r", id); + delete result; + } } else { - PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: %u|r", id); - delete result; + QueryResult *result = WorldDatabase.PQuery( "SELECT MAX(guid) FROM waypoint_scripts"); + id = result->Fetch()->GetUInt32(); + WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id+1); + PSendSysMessage("%s%s%u|r", "|cff00ff00","Wp Event: New waypoint event added: |r|cff00ffff", id+1); } - } - else - { - QueryResult *result = WorldDatabase.PQuery( "SELECT MAX(guid) FROM waypoint_scripts"); - id = result->Fetch()->GetUInt32(); - WorldDatabase.PExecute("INSERT INTO waypoint_scripts(guid)VALUES(%u)", id+1); - PSendSysMessage("%s%s%u|r", "|cff00ff00","Wp Event: New waypoint event added: |r|cff00ffff", id+1); - } - return true; + return true; } - if(show == "listid") { - uint32 id; - char* arg_id = strtok(NULL, " "); - - if(!arg_id) - { - PSendSysMessage("%s%s|r", "|cff33ffff","Wp Event: You must provide waypoint script id."); - return true; - } + if(!arg_id) + { + PSendSysMessage("%s%s|r", "|cff33ffff","Wp Event: You must provide waypoint script id."); + return true; + } - id = atoi(arg_id); + id = atoi(arg_id); - uint32 a2, a3, a4, a5, a6; - float a8, a9, a10, a11; - char const* a7; + uint32 a2, a3, a4, a5, a6; + float a8, a9, a10, a11; + char const* a7; - QueryResult *result = WorldDatabase.PQuery( "SELECT `guid`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o` FROM waypoint_scripts WHERE id = %u", id); + QueryResult *result = WorldDatabase.PQuery( "SELECT `guid`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o` FROM waypoint_scripts WHERE id = %u", id); - if( !result ) - { - PSendSysMessage("%s%s%u|r", "|cff33ffff", "Wp Event: No waypoint scripts found on id: ", id); - return true; - } + if( !result ) + { + PSendSysMessage("%s%s%u|r", "|cff33ffff", "Wp Event: No waypoint scripts found on id: ", id); + return true; + } - Field *fields; + Field *fields; - do - { - fields = result->Fetch(); - a2 = fields[0].GetUInt32(); - a3 = fields[1].GetUInt32(); - a4 = fields[2].GetUInt32(); - a5 = fields[3].GetUInt32(); - a6 = fields[4].GetUInt32(); - a7 = fields[5].GetString(); - a8 = fields[6].GetFloat(); - a9 = fields[7].GetFloat(); - a10 = fields[8].GetFloat(); - a11 = fields[9].GetFloat(); - - PSendSysMessage("|cffff33ffid:|r|cff00ffff %u|r|cff00ff00, guid: |r|cff00ffff%u|r|cff00ff00, delay: |r|cff00ffff%u|r|cff00ff00, command: |r|cff00ffff%u|r|cff00ff00, datalong: |r|cff00ffff%u|r|cff00ff00, datalong2: |r|cff00ffff%u|r|cff00ff00, datatext: |r|cff00ffff%s|r|cff00ff00, posx: |r|cff00ffff%f|r|cff00ff00, posy: |r|cff00ffff%f|r|cff00ff00, posz: |r|cff00ffff%f|r|cff00ff00, orientation: |r|cff00ffff%f|r", id, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); - }while(result->NextRow()); + do + { + fields = result->Fetch(); + a2 = fields[0].GetUInt32(); + a3 = fields[1].GetUInt32(); + a4 = fields[2].GetUInt32(); + a5 = fields[3].GetUInt32(); + a6 = fields[4].GetUInt32(); + a7 = fields[5].GetString(); + a8 = fields[6].GetFloat(); + a9 = fields[7].GetFloat(); + a10 = fields[8].GetFloat(); + a11 = fields[9].GetFloat(); + + PSendSysMessage("|cffff33ffid:|r|cff00ffff %u|r|cff00ff00, guid: |r|cff00ffff%u|r|cff00ff00, delay: |r|cff00ffff%u|r|cff00ff00, command: |r|cff00ffff%u|r|cff00ff00, datalong: |r|cff00ffff%u|r|cff00ff00, datalong2: |r|cff00ffff%u|r|cff00ff00, datatext: |r|cff00ffff%s|r|cff00ff00, posx: |r|cff00ffff%f|r|cff00ff00, posy: |r|cff00ffff%f|r|cff00ff00, posz: |r|cff00ffff%f|r|cff00ff00, orientation: |r|cff00ffff%f|r", id, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); + } + while(result->NextRow()); - delete result; + delete result; } if(show == "del") { + id = atoi(arg_id); - char* arg_id = strtok(NULL, " "); - uint32 id = atoi(arg_id); - - QueryResult *result = WorldDatabase.PQuery( "SELECT `guid` FROM waypoint_scripts WHERE guid = %u", id); + QueryResult *result = WorldDatabase.PQuery( "SELECT `guid` FROM waypoint_scripts WHERE guid = %u", id); - if( result ) - { - - WorldDatabase.PExecuteLog("DELETE FROM waypoint_scripts WHERE guid = %u", id); - PSendSysMessage("%s%s%u|r","|cff00ff00","Wp Event: Waypoint script removed: ", id); - delete result; - } - else - PSendSysMessage("|cffff33ffWp Event: ERROR: you have selected a non existing script: %u|r", id); - - return true; - } - - - if(show == "mod") - { - char* arg_1 = strtok(NULL," "); + if( result ) + { + WorldDatabase.PExecuteLog("DELETE FROM waypoint_scripts WHERE guid = %u", id); + PSendSysMessage("%s%s%u|r","|cff00ff00","Wp Event: Waypoint script removed: ", id); + delete result; + } + else + PSendSysMessage("|cffff33ffWp Event: ERROR: you have selected a non existing script: %u|r", id); - if(!arg_1) - { - SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r"); return true; } - uint32 id = atoi(arg_1); - - if(!id) + if(show == "mod") { - SendSysMessage("|cffff33ffERROR: No vallid waypoint script id not present.|r"); - return true; - } - - char* arg_2 = strtok(NULL," "); + if(!arg_id) + { + SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r"); + return true; + } - if(!arg_2) - { SendSysMessage("|cffff33ffERROR: No argument present.|r"); - return true;} + id = atoi(arg_id); + if(!id) + { + SendSysMessage("|cffff33ffERROR: No vallid waypoint script id not present.|r"); + return true; + } - std::string arg_string = arg_2; + char* arg_2 = strtok(NULL," "); + if(!arg_2) + { + SendSysMessage("|cffff33ffERROR: No argument present.|r"); + return true; + } + + std::string arg_string = arg_2; -if( (arg_string != "setid") && (arg_string != "delay") && (arg_string != "command") -&& (arg_string != "datalong") && (arg_string != "datalong2") && (arg_string != "dataint") && (arg_string != "posx") -&& (arg_string != "posy") && (arg_string != "posz") && (arg_string != "orientation") -) { SendSysMessage("|cffff33ffERROR: No valid argument present.|r"); - return true;} + if( (arg_string != "setid") && (arg_string != "delay") && (arg_string != "command") + && (arg_string != "datalong") && (arg_string != "datalong2") && (arg_string != "dataint") && (arg_string != "posx") + && (arg_string != "posy") && (arg_string != "posz") && (arg_string != "orientation")) + { + SendSysMessage("|cffff33ffERROR: No valid argument present.|r"); + return true; + } + char* arg_3; + std::string arg_str_2 = arg_2; + arg_3 = strtok(NULL," "); -char* arg_3; -std::string arg_str_2 = arg_2; -arg_3 = strtok(NULL," "); + if(!arg_3) + { + SendSysMessage("|cffff33ffERROR: No additional argument present.|r"); + return true; + } -if(!arg_3) -{SendSysMessage("|cffff33ffERROR: No additional argument present.|r"); - return true;} + float coord; -float coord; + if(arg_str_2 == "setid") + { + uint32 newid = atoi(arg_3); + PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r","|cff00ff00","Wp Event: Wypoint scipt guid: ", newid," id changed: ", id); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET id='%u' WHERE guid='%u'", + newid, id); return true; + } + else + { + QueryResult *result = WorldDatabase.PQuery("SELECT id FROM waypoint_scripts WHERE guid='%u'",id); - if(arg_str_2 == "setid") - { - uint32 newid = atoi(arg_3); - PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r","|cff00ff00","Wp Event: Wypoint scipt guid: ", newid," id changed: ", id); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET id='%u' WHERE guid='%u'", - newid, id); return true; - } - else - { + if(!result) + { + SendSysMessage("|cffff33ffERROR: You have selected an non existing waypoint script guid.|r"); + return true; + } - QueryResult *result = WorldDatabase.PQuery("SELECT id FROM waypoint_scripts WHERE guid='%u'",id); + delete result; - if(!result) - { - SendSysMessage("|cffff33ffERROR: You have selected an non existing waypoint script guid.|r"); - return true; + if(arg_str_2 == "posx") + { + coord = atof(arg_3); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET x='%f' WHERE guid='%u'", + coord, id); + PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff %u|r|cff00ff00 position_x updated.|r", id); + return true; + } + else if(arg_str_2 == "posy") + { + coord = atof(arg_3); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET y='%f' WHERE guid='%u'", + coord, id); + PSendSysMessage("|cff00ff00Waypoint script: %u position_y updated.|r", id); + return true; + } + else if(arg_str_2 == "posz") + { + coord = atof(arg_3); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET z='%f' WHERE guid='%u'", + coord, id); + PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 position_z updated.|r", id); + return true; + } + else if(arg_str_2 == "orientation") + { + coord = atof(arg_3); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET o='%f' WHERE guid='%u'", + coord, id); + PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 orientation updated.|r", id); + return true; + } + else if(arg_str_2 == "dataint") + { + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET %s='%u' WHERE guid='%u'", + arg_2, atoi(arg_3), id); + PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 dataint updated.|r", id); + return true; + } + else + { + std::string arg_str_3 = arg_3; + WorldDatabase.escape_string(arg_str_3); + WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET %s='%s' WHERE guid='%u'", + arg_2, arg_str_3.c_str(), id); + } + } + PSendSysMessage("%s%s|r|cff00ffff%u:|r|cff00ff00 %s %s|r","|cff00ff00","Waypoint script:", id, arg_2,"updated."); } - - delete result; - -if(arg_str_2 == "posx") -{ - coord = atof(arg_3); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET x='%f' WHERE guid='%u'", - coord, id); - PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff %u|r|cff00ff00 position_x updated.|r", id); return true; -}else if(arg_str_2 == "posy") -{ - coord = atof(arg_3); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET y='%f' WHERE guid='%u'", - coord, id); - PSendSysMessage("|cff00ff00Waypoint script: %u position_y updated.|r", id); - return true; -} else if(arg_str_2 == "posz") -{ - coord = atof(arg_3); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET z='%f' WHERE guid='%u'", - coord, id); - PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 position_z updated.|r", id); - return true; -} else if(arg_str_2 == "orientation") -{ - coord = atof(arg_3); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET o='%f' WHERE guid='%u'", - coord, id); - PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 orientation updated.|r", id); - return true; -} else if(arg_str_2 == "dataint") -{ - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET %s='%u' WHERE guid='%u'", - arg_2, atoi(arg_3), id); - PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 dataint updated.|r", id); - return true; -}else -{ - std::string arg_str_3 = arg_3; - WorldDatabase.escape_string(arg_str_3); - WorldDatabase.PExecuteLog("UPDATE waypoint_scripts SET %s='%s' WHERE guid='%u'", - arg_2, arg_str_3.c_str(), id); -} -} - PSendSysMessage("%s%s|r|cff00ffff%u:|r|cff00ff00 %s %s|r","|cff00ff00","Waypoint script:", id, arg_2,"updated."); -} -return true; } bool ChatHandler::HandleWpModifyCommand(const char* args) @@ -3078,9 +2903,8 @@ bool ChatHandler::HandleWpShowCommand(const char* args) // first arg: on, off, first, last char* show_str = strtok((char*)args, " "); if (!show_str) - { return false; - } + // second arg: GUID (optional, if a creature is selected) char* guid_str = strtok((char*)NULL, " "); sLog.outDebug("DEBUG: HandleWpShowCommand: show_str: %s guid_str: %s", show_str, guid_str); @@ -3105,7 +2929,6 @@ bool ChatHandler::HandleWpShowCommand(const char* args) pathid = target->GetWaypointPathId(); } - else { sLog.outDebug("|cff00ff00DEBUG: HandleWpShowCommand: PathID provided|r"); @@ -3113,9 +2936,7 @@ bool ChatHandler::HandleWpShowCommand(const char* args) // Warn if player also selected a creature // -> Creature selection is ignored <- if(target) - { SendSysMessage(LANG_WAYPOINT_CREATSELECTED); - } pathid = atoi((char*)guid_str); } @@ -3131,30 +2952,24 @@ bool ChatHandler::HandleWpShowCommand(const char* args) // Show info for the selected waypoint if(show == "info") - { - // Check if the user did specify a visual waypoint if( target->GetEntry() != VISUAL_WAYPOINT ) - { PSendSysMessage(LANG_WAYPOINT_VP_SELECT); SetSentErrorMessage(true); return false; } - QueryResult *result = WorldDatabase.PQuery( "SELECT id, point, delay, move_flag, action, action_chance FROM waypoint_data WHERE wpguid = %u", target->GetGUIDLow()); if(!result) - { SendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM); return true; } SendSysMessage("|cff00ffffDEBUG: wp show info:|r"); - do { Field *fields = result->Fetch(); @@ -3170,7 +2985,8 @@ bool ChatHandler::HandleWpShowCommand(const char* args) PSendSysMessage("|cff00ff00Show info: Move flag: |r|cff00ffff%u|r", flag); PSendSysMessage("|cff00ff00Show info: Waypoint event: |r|cff00ffff%u|r", ev_id); PSendSysMessage("|cff00ff00Show info: Event chance: |r|cff00ffff%u|r", ev_chance); - }while( result->NextRow() ); + } + while( result->NextRow() ); // Cleanup memory delete result; @@ -3179,7 +2995,7 @@ bool ChatHandler::HandleWpShowCommand(const char* args) if(show == "on") { - QueryResult *result = WorldDatabase.PQuery( "SELECT point, position_x,position_y,position_z FROM waypoint_data WHERE id = '%u'", pathid); + QueryResult *result = WorldDatabase.PQuery( "SELECT point, position_x,position_y,position_z FROM waypoint_data WHERE id = '%u'", pathid); if(!result) { @@ -3215,7 +3031,8 @@ bool ChatHandler::HandleWpShowCommand(const char* args) pCreature->AddObjectToRemoveList(); } - }while( result2->NextRow() ); + } + while( result2->NextRow() ); delete result2; @@ -3398,12 +3215,11 @@ bool ChatHandler::HandleWpShowCommand(const char* args) else { pCreature->CombatStop(); - pCreature->DeleteFromDB(); - pCreature->AddObjectToRemoveList(); } - }while(result->NextRow()); + } + while(result->NextRow()); // set "wpguid" column to "empty" - no visual waypoint spawned WorldDatabase.PExecuteLog("UPDATE waypoint_data SET wpguid = '0'"); //WorldDatabase.PExecuteLog("UPDATE creature_movement SET wpguid = '0' WHERE wpguid <> '0'"); @@ -3418,12 +3234,10 @@ bool ChatHandler::HandleWpShowCommand(const char* args) SendSysMessage(LANG_WAYPOINT_VP_ALLREMOVED); // Cleanup memory delete result; - return true; } PSendSysMessage("|cffff33ffDEBUG: wpshow - no valid command found|r"); - return true; } @@ -4358,11 +4172,11 @@ bool ChatHandler::HandleTempGameObjectCommand(const char* args) Player *chr = m_session->GetPlayer(); char* spawntime = strtok(NULL, " "); - uint32 spawntm; + uint32 spawntm = 300; if( spawntime ) spawntm = atoi((char*)spawntime); - + float x = chr->GetPositionX(); float y = chr->GetPositionY(); float z = chr->GetPositionZ(); diff --git a/src/game/WaypointManager.cpp b/src/game/WaypointManager.cpp index 382f70a19ad..3ebbef7fc87 100644 --- a/src/game/WaypointManager.cpp +++ b/src/game/WaypointManager.cpp @@ -99,10 +99,17 @@ void WaypointStore::Load() void WaypointStore::UpdatePath(uint32 id) { - // TODO: this will cause memory leak - if(WaypointPathHolder.find(id) != WaypointPathHolder.end()) - WaypointPathHolder[id]->clear(); - + // Prevent memory leak, deallocate allocated memory instead of just clearing from object holder + WaypointPathMap::iterator itr = WaypointPathHolder.find(id); + if(itr != WaypointPathHolder.end()) + { + for(WaypointPath::iterator jtr = WaypointPathHolder[id]->begin(); jtr != WaypointPathHolder[id]->end(); ++jtr) + { + delete (*jtr); + } + delete itr->second; + } + 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); @@ -111,9 +118,7 @@ void WaypointStore::UpdatePath(uint32 id) return; WaypointPath* path_data; - path_data = new WaypointPath; - Field *fields; do @@ -142,7 +147,8 @@ void WaypointStore::UpdatePath(uint32 id) path_data->push_back(wp); - }while (result->NextRow()); + } + while (result->NextRow()); WaypointPathHolder[id] = path_data; |