void WaypointManager::_clearPath(WaypointPath &path) { for(WaypointPath::iterator itr = path.begin(); itr != path.end(); ++itr) if(itr->behavior) delete itr->behavior; path.clear(); }
/// return true if a valid scriptId is provided bool WaypointManager::SetNodeScriptId(uint32 entry, uint32 dbGuid, uint32 point, int32 pathId, WaypointPathOrigin wpOrigin, uint32 scriptId) { // Support only normal movement tables if (wpOrigin != PATH_FROM_GUID && wpOrigin != PATH_FROM_ENTRY) return false; WaypointPath* path = GetPathFromOrigin(entry, dbGuid, pathId, wpOrigin); if (!path) return false; char const* const table = wpOrigin == PATH_FROM_GUID ? "creature_movement" : "creature_movement_template"; char const* const key_field = wpOrigin == PATH_FROM_GUID ? "id" : "entry"; uint32 const key = wpOrigin == PATH_FROM_GUID ? dbGuid : entry; WorldDatabase.PExecuteLog("UPDATE %s SET script_id=%u WHERE %s=%u AND point=%u", table, scriptId, key_field, key, point); WaypointPath::iterator find = path->find(point); if (find != path->end()) find->second.script_id = scriptId; ScriptChainMap const* scm = sScriptMgr.GetScriptChainMap(DBS_ON_CREATURE_MOVEMENT); if (!scm) return false; return scm->find(scriptId) != scm->end(); }
void WaypointManager::SetNodeOrientation(uint32 entry, uint32 dbGuid, uint32 point, int32 pathId, WaypointPathOrigin wpOrigin, float orientation) { // Support only normal movement tables if (wpOrigin != PATH_FROM_GUID && wpOrigin != PATH_FROM_ENTRY) return; WaypointPath* path = GetPathFromOrigin(entry, dbGuid, pathId, wpOrigin); if (!path) return; char const* const table = wpOrigin == PATH_FROM_GUID ? "creature_movement" : "creature_movement_template"; char const* const key_field = wpOrigin == PATH_FROM_GUID ? "id" : "entry"; uint32 const key = wpOrigin == PATH_FROM_GUID ? dbGuid : entry; WorldDatabase.PExecuteLog("UPDATE %s SET orientation=%f WHERE %s=%u AND point=%u", table, orientation, key_field, key, point); WaypointPath::iterator find = path->find(point); if (find != path->end()) find->second.orientation = orientation; }
void WaypointManager::SetNodeOrientation(uint32 entry, uint32 dbGuid, uint32 point, uint32 pathId, WaypointPathOrigin wpOrigin, float orientation) { // Support only normal movement tables if (wpOrigin == PATH_FROM_EXTERNAL) return; WaypointPath* path = GetPathFromOrigin(entry, dbGuid, pathId, wpOrigin); if (!path) return; char const* const table = waypointOriginTables[wpOrigin]; char const* const key_field = waypointKeyColumn[wpOrigin]; uint32 const key = wpOrigin == PATH_FROM_GUID ? dbGuid : entry; if (wpOrigin == PATH_FROM_ENTRY) WorldDatabase.PExecuteLog("UPDATE %s SET orientation=%f WHERE %s=%u AND point=%u AND pathId=%u", table, orientation, key_field, key, point, pathId); else WorldDatabase.PExecuteLog("UPDATE %s SET orientation=%f WHERE %s=%u AND point=%u", table, orientation, key_field, key, point); WaypointPath::iterator find = path->find(point); if (find != path->end()) find->second.orientation = orientation; }
void WaypointManager::SetNodePosition(uint32 entry, uint32 dbGuid, uint32 point, int32 pathId, WaypointPathOrigin wpOrigin, float x, float y, float z) { // Support only normal movement tables if (wpOrigin != PATH_FROM_GUID && wpOrigin != PATH_FROM_ENTRY) { return; } WaypointPath* path = GetPathFromOrigin(entry, dbGuid, pathId, wpOrigin); if (!path) { return; } char const* const table = wpOrigin == PATH_FROM_GUID ? "creature_movement" : "creature_movement_template"; char const* const key_field = wpOrigin == PATH_FROM_GUID ? "id" : "entry"; uint32 const key = wpOrigin == PATH_FROM_GUID ? dbGuid : entry; WorldDatabase.PExecuteLog("UPDATE %s SET position_x=%f, position_y=%f, position_z=%f WHERE %s=%u AND point=%u", table, x, y, z, key_field, key, point); WaypointPath::iterator find = path->find(point); if (find != path->end()) { find->second.x = x; find->second.y = y; find->second.z = z; } }
/// return true if a valid scriptId is provided bool WaypointManager::SetNodeScriptId(uint32 entry, uint32 dbGuid, uint32 point, uint32 pathId, WaypointPathOrigin wpOrigin, uint32 scriptId) { // Support only normal movement tables if (wpOrigin == PATH_FROM_EXTERNAL) return false; WaypointPath* path = GetPathFromOrigin(entry, dbGuid, pathId, wpOrigin); if (!path) return false; char const* const table = waypointOriginTables[wpOrigin]; char const* const key_field = waypointKeyColumn[wpOrigin]; uint32 const key = wpOrigin == PATH_FROM_GUID ? dbGuid : ((entry << 8) + pathId); if (wpOrigin == PATH_FROM_ENTRY) WorldDatabase.PExecuteLog("UPDATE %s SET script_id=%u WHERE %s=%u AND point=%u AND pathId=%u", table, scriptId, key_field, key, point, pathId); else WorldDatabase.PExecuteLog("UPDATE %s SET script_id=%u WHERE %s=%u AND point=%u", table, scriptId, key_field, key, point); WaypointPath::iterator find = path->find(point); if (find != path->end()) find->second.script_id = scriptId; return sCreatureMovementScripts.second.find(scriptId) != sCreatureMovementScripts.second.end(); }
void WaypointManager::_clearPath(WaypointPath& path) { for (WaypointPath::const_iterator itr = path.begin(); itr != path.end(); ++itr) { delete itr->second.behavior; } path.clear(); }