rendered paste bodyIndex: src/game/Chat.cpp===================================================================--- src/game/Chat.cpp (revision 5740)+++ src/game/Chat.cpp (working copy)@@ -388,6 +388,7 @@ { "castback", SEC_ADMINISTRATOR, &ChatHandler::HandleCastBackCommand, "", NULL }, { "casttarget", SEC_ADMINISTRATOR, &ChatHandler::HandleCastTargetCommand, "", NULL }, { "cometome", SEC_ADMINISTRATOR, &ChatHandler::HandleComeToMeCommand, "", NULL },+ { "addrandomwalk", SEC_ADMINISTRATOR, &ChatHandler::HandleAddRandomWalkCommand, "", NULL }, //! Development Commands { "setvalue", SEC_ADMINISTRATOR, &ChatHandler::HandleSetValue, "", NULL },Index: src/game/Chat.h===================================================================--- src/game/Chat.h (revision 5740)+++ src/game/Chat.h (working copy)@@ -337,6 +337,7 @@ bool HandleCastBackCommand(const char *args); bool HandleCastTargetCommand(const char *args); bool HandleComeToMeCommand(const char *args);+ bool HandleAddRandomWalkCommand(const char *args); //! Development Commands bool HandleSetValue(const char* args);Index: src/game/Language.h===================================================================--- src/game/Language.h (revision 5740)+++ src/game/Language.h (working copy)@@ -557,6 +557,8 @@ LANG_PLAYER_AFK = 708, LANG_PLAYER_DND_DEFAULT = 709, LANG_PLAYER_AFK_DEFAULT = 710,++ LANG_ADD_RANDOM_WALK = 711, }; /* NOT USED VALUESIndex: src/game/Level2.cpp===================================================================--- src/game/Level2.cpp (revision 5740)+++ src/game/Level2.cpp (working copy)@@ -3408,3 +3408,68 @@ target->UpdateHonorFields(true); return true; }++/**+ * Implementation of AddRandomWalk command, which does the following:+ * Sets creature movement type to "waypoint"+ * Adds current position as a waypoint+ * Adds random wait time from defined range for the waypoint+ *+ * Purpose: ease the hand fixing of the creature random movements :)+ */+bool ChatHandler::HandleAddRandomWalkCommand(const char *args)+{+ Creature* target = getSelectedCreature();++ if(!target)+ {+ SendSysMessage(LANG_SELECT_CREATURE);+ return true;+ }++ if (!*args)+ return false;++ char* minTime = strtok((char*)args, " ");+ char* maxTime = strtok((char*)NULL, " ");++ if(!minTime)+ return false;++ if(!maxTime)+ return false;++ uint32 i_minTime = (uint32)atoi(minTime);+ uint32 i_maxTime = (uint32)atoi(maxTime);++ uint32 time = urand(i_minTime, i_maxTime);++ uint32 point;++ QueryResult *result = WorldDatabase.PQuery( "SELECT MAX(point) FROM creature_movement WHERE id = '%u'",target->GetDBTableGUIDLow());+ if( result )+ {+ point = (*result)[0].GetUInt32()+1;++ delete result;+ }+ else+ point = 0;++ Player* player = m_session->GetPlayer();++ WorldDatabase.PExecuteLog("INSERT INTO creature_movement (id,point,position_x,position_y,position_z,waittime) VALUES ('%u','%u','%f', '%f', '%f','%u')",+ target->GetDBTableGUIDLow(), point, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), time);+ WorldDatabase.PExecuteLog("UPDATE creature SET MovementType = '%u' WHERE guid = '%u'", WAYPOINT_MOTION_TYPE,target->GetDBTableGUIDLow());++ target->SetDefaultMovementType(WAYPOINT_MOTION_TYPE);+ target->GetMotionMaster()->Initialize();+ if(target->isAlive()) // dead creature will reset movement generator at respawn+ {+ target->setDeathState(JUST_DIED);+ target->RemoveCorpse();+ target->Respawn();+ }++ PSendSysMessage(LANG_ADD_RANDOM_WALK, target->GetDBTableGUIDLow(), i_minTime, i_maxTime, time);+}\ No newline at end of file