All pastes #1004698 Raw Edit

AddRandomWalk command for MaNGOS

public diff v1 · immutable
#1004698 ·published 2008-05-02 07:42 UTC
rendered paste body
Index: 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